stm32 WFI没有触发

时间:2015-07-07 15:17:27

标签: c embedded interrupt stm32 intrinsics

我正在使用STM32L151(Cortex-M3)并在gpio引脚上配置外部中断:

/* Enable clocks */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9, ENABLE);

/* ExtInt Input */
GPIO_InitTypeDef GPIO_InitStr;
GPIO_InitStr.GPIO_Speed = GPIO_Speed_40MHz;
GPIO_InitStr.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStr.GPIO_PuPd  = GPIO_PuPd_DOWN;
GPIO_InitStr.GPIO_Pin = GPIO_Pin_13;
GPIO_Init(GPIOC, &GPIO_InitStr);

/* Interrupts on EXTINT */
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource13);
EXTI_InitTypeDef ExtiInitStr = {EXTI_Line13, EXTI_Mode_Interrupt, EXTI_Trigger_Rising, ENABLE};
EXTI_Init(&ExtiInitStr);
NVIC_InitTypeDef NvicInitStr = {EXTI15_10_IRQn, 0, 0, ENABLE};
NVIC_Init(&NvicInitStr);

我的main.c最终达到了我所拥有的地步:

    __enable_irq();
//...program related code..
    __ASM volatile ("wfi");

此时,处理器不会从外部引脚变为高电平唤醒。 如果我用

替换WFI线
while(1);

正确触发中断。我试着按照例子但没有找到不同的东西。 (我使用ST-Link / V2调试器,GNU工具用于ARM嵌入式处理器工具链和Eclipse插件,使用gdb和openOCD,如果这很重要的话)

感谢任何提示!

0 个答案:

没有答案