Veiko 发表于 2015-1-13 16:36:13

STOP模式下STM32F103C8的PA8不能唤醒

本帖最后由 Veiko 于 2015-1-14 14:29 编辑

在进入STOP模式前我对外部引脚作了配置,代码如下:
void UserEnterLowPowerMode(void)
{
      EXTI_InitTypeDef   EXTI_InitStructure;
      GPIO_InitTypeDef   GPIO_InitStructure;
      NVIC_InitTypeDef   NVIC_InitStructure;
      
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
                         | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD
                         | RCC_APB2Periph_AFIO, ENABLE);

/* PA*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All - GPIO_Pin_0 - GPIO_Pin_8;/* 去掉GPIOA - PA0 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* PB*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* PC*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* PD*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOD, &GPIO_InitStructure);
      
      
      EXTI_ClearITPendingBit(EXTI_Line0 | EXTI_Line1 | EXTI_Line2 | EXTI_Line3 \
                                 | EXTI_Line4 | EXTI_Line5 | EXTI_Line6 | EXTI_Line7 \
                                                                                                         | EXTI_Line8 | EXTI_Line9 | EXTI_Line10 | EXTI_Line11 \
                                                                                                         | EXTI_Line12 | EXTI_Line13 | EXTI_Line14 | EXTI_Line15 \
                                                                                                         | EXTI_Line16 | EXTI_Line17 | EXTI_Line18 | EXTI_Line19);/* 配置中断--清空标志位 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/* Enable GPIOA clock */

/* Configure PA.00 pin as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);/* Connect EXTI0 Line to PA.00 pin */
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource8);/* Connect EXTI8 Line to PA.08 pin */

/* Configure EXTI0 line */
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

/* Enable and set EXTI9-5 Interrupt to the lowest priority */
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
      
          /* Configure EXTI8 line */
EXTI_InitStructure.EXTI_Line = EXTI_Line8;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

/* Enable and set EXTI8 Interrupt to the lowest priority */
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn ;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

      EXTI_ClearITPendingBit(EXTI_Line0 | EXTI_Line1 | EXTI_Line2 | EXTI_Line3 \
                                 | EXTI_Line4 | EXTI_Line5 | EXTI_Line6 | EXTI_Line7 \
                                                                                                         | EXTI_Line8 | EXTI_Line9 | EXTI_Line10 | EXTI_Line11 \
                                                                                                         | EXTI_Line12 | EXTI_Line13 | EXTI_Line14 | EXTI_Line15 \
                                                                                                         | EXTI_Line16 | EXTI_Line17 | EXTI_Line18 | EXTI_Line19);/* 配置中断--清空标志位 */
      
      //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SRAM|RCC_AHBPeriph_FLITF, DISABLE);
      PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);/* 进入停止模式 */
      
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);/* 使能AFIO时钟 */
      GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);/* 使用SWD,禁用JTAG,JTAG多余端口作IO使用 */

SystemInit();
      UserHardWareInitize();
      Set_System();
      Set_USBClock();
      USB_Interrupts_Config();
      USB_Init();
      
      USB_PullUpResON();

      SEI();
}中断中除了清标志外没有做任何操作的,以下是代码:/**
* @briefThis function handles External line 0 interrupt request.
* @paramNone
* @retval None
*/
void EXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
    /* Clear theEXTI line 0 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line0);
}
}

/**
* @briefThis function handles External line 0 interrupt request.
* @paramNone
* @retval None
*/
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line5) != RESET)
{
    /* Clear theEXTI line 5 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line5);
}
      else if(EXTI_GetITStatus(EXTI_Line6) != RESET)
{
    /* Clear theEXTI line 6 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line6);
}
      else if(EXTI_GetITStatus(EXTI_Line7) != RESET)
{
    /* Clear theEXTI line 7 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line7);
}
      else if(EXTI_GetITStatus(EXTI_Line8) != RESET)
{
    /* Clear theEXTI line 8 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line8);
}
      else if(EXTI_GetITStatus(EXTI_Line9) != RESET)
{
    /* Clear theEXTI line 9 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line9);
}
}

但PA0引脚的上升沿可以唤醒,PA8引脚的上升沿却不能唤醒,请大神帮忙解惑,不胜感激!
已解决,答案见16楼

WSCKY 发表于 2015-1-13 16:36:14

看看数据手册吧~PA0可以唤醒

PA8没有



hlt512 发表于 2015-1-14 09:15:14

是不是PA8没有唤醒功能?

Veiko 发表于 2015-1-14 09:19:26

hlt512 发表于 2015-1-14 09:15
是不是PA8没有唤醒功能?

根据芯片手册,在STOP模式下所有的EXTI引脚配置后都可以唤醒啊

Veiko 发表于 2015-1-14 09:19:57

hlt512 发表于 2015-1-14 09:15
是不是PA8没有唤醒功能?

现在就是不知道哪里配置错了,或者还有什么需要配置但却忘了配置的参数

Veiko 发表于 2015-1-14 09:21:24

WSCKY 发表于 2015-1-14 09:20
看看数据手册吧~PA0可以唤醒

PA8没有

额,这只是引脚名称,能不能唤醒不能只看这个,要看对应低功耗模式的唤醒条件才行啊,但条件里说可以唤醒的

Veiko 发表于 2015-1-14 09:30:22

WSCKY 发表于 2015-1-14 09:20
看看数据手册吧~PA0可以唤醒

PA8没有


我是参照这个图然后再看详细说明来做的,但可能哪里还没配好

netlhx 发表于 2015-1-14 09:41:53

外设的复用功能指定只有PA0,当然PA8就没有用了,有些外设可以调整复用引脚,也只能在指定的范围内

晓枫VS枯叶 发表于 2015-1-14 09:49:29

把中断代码贴出来吧!

Veiko 发表于 2015-1-14 09:53:03

晓枫VS枯叶 发表于 2015-1-14 09:49
把中断代码贴出来吧!

中断中只清了标志位,代码已贴出来了,在1楼更新的,麻烦看一下
页: [1] 2 3
查看完整版本: STOP模式下STM32F103C8的PA8不能唤醒