你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STOP模式下STM32F103C8的PA8不能唤醒

[复制链接]
Veiko 提问时间:2015-1-13 16:36 /
5ST金币
本帖最后由 Veiko 于 2015-1-14 14:29 编辑

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

  10.   /* PA  */
  11.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All - GPIO_Pin_0 - GPIO_Pin_8;  /* 去掉GPIOA - PA0 */
  12.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  13.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  14.   /* PB  */
  15.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  16.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  17.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  18.   /* PC  */
  19.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  20.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  21.   GPIO_Init(GPIOC, &GPIO_InitStructure);
  22.   /* PD  */
  23.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  24.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  25.   GPIO_Init(GPIOD, &GPIO_InitStructure);
  26.         
  27.         
  28.         EXTI_ClearITPendingBit(EXTI_Line0 | EXTI_Line1 | EXTI_Line2 | EXTI_Line3 \
  29.                                  | EXTI_Line4 | EXTI_Line5 | EXTI_Line6 | EXTI_Line7 \
  30.                                                                                                          | EXTI_Line8 | EXTI_Line9 | EXTI_Line10 | EXTI_Line11 \
  31.                                                                                                          | EXTI_Line12 | EXTI_Line13 | EXTI_Line14 | EXTI_Line15 \
  32.                                                                                                          | EXTI_Line16 | EXTI_Line17 | EXTI_Line18 | EXTI_Line19);/* 配置中断--清空标志位 */
  33.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/* Enable GPIOA clock */
  34.   
  35.   /* Configure PA.00 pin as input floating */
  36.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_8;
  37.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
  38.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  39.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  40.   
  41.   GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);/* Connect EXTI0 Line to PA.00 pin */
  42.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource8);/* Connect EXTI8 Line to PA.08 pin */

  43.   /* Configure EXTI0 line */
  44.   EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  45.   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  46.   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  
  47.   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  48.   EXTI_Init(&EXTI_InitStructure);

  49.   /* Enable and set EXTI9-5 Interrupt to the lowest priority */
  50.   NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
  51.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  52.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  53.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  54.   NVIC_Init(&NVIC_InitStructure);
  55.         
  56.           /* Configure EXTI8 line */
  57.   EXTI_InitStructure.EXTI_Line = EXTI_Line8;
  58.   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  59.   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  
  60.   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  61.   EXTI_Init(&EXTI_InitStructure);

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

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

  79.   SystemInit();
  80.         UserHardWareInitize();
  81.         Set_System();
  82.         Set_USBClock();
  83.         USB_Interrupts_Config();
  84.         USB_Init();
  85.         
  86.         USB_PullUpResON();

  87.         SEI();
  88. }
复制代码
中断中除了清标志外没有做任何操作的,以下是代码:
  1. /**
  2.   * @brief  This function handles External line 0 interrupt request.
  3.   * @param  None
  4.   * @retval None
  5.   */
  6. void EXTI0_IRQHandler(void)
  7. {
  8.   if(EXTI_GetITStatus(EXTI_Line0) != RESET)
  9.   {
  10.     /* Clear the  EXTI line 0 pending bit */
  11.     EXTI_ClearITPendingBit(EXTI_Line0);
  12.   }
  13. }

  14. /**
  15.   * @brief  This function handles External line 0 interrupt request.
  16.   * @param  None
  17.   * @retval None
  18.   */
  19. void EXTI9_5_IRQHandler(void)
  20. {
  21.   if(EXTI_GetITStatus(EXTI_Line5) != RESET)
  22.   {
  23.     /* Clear the  EXTI line 5 pending bit */
  24.     EXTI_ClearITPendingBit(EXTI_Line5);
  25.   }
  26.         else if(EXTI_GetITStatus(EXTI_Line6) != RESET)
  27.   {
  28.     /* Clear the  EXTI line 6 pending bit */
  29.     EXTI_ClearITPendingBit(EXTI_Line6);
  30.   }
  31.         else if(EXTI_GetITStatus(EXTI_Line7) != RESET)
  32.   {
  33.     /* Clear the  EXTI line 7 pending bit */
  34.     EXTI_ClearITPendingBit(EXTI_Line7);
  35.   }
  36.         else if(EXTI_GetITStatus(EXTI_Line8) != RESET)
  37.   {
  38.     /* Clear the  EXTI line 8 pending bit */
  39.     EXTI_ClearITPendingBit(EXTI_Line8);
  40.   }
  41.         else if(EXTI_GetITStatus(EXTI_Line9) != RESET)
  42.   {
  43.     /* Clear the  EXTI line 9 pending bit */
  44.     EXTI_ClearITPendingBit(EXTI_Line9);
  45.   }
  46. }
复制代码


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

最佳答案

查看完整内容

看看数据手册吧~PA0可以唤醒 PA8没有
收藏 评论20 发布时间:2015-1-13 16:36

举报

20个回答
kyChu 回答时间:2015-1-13 16:36:14
看看数据手册吧~PA0可以唤醒

PA0

PA0

PA8没有

PA8

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楼更新的,麻烦看一下
晓枫VS枯叶 回答时间:2015-1-14 10:05:14
你应该没有使用HSE倍频做系统时钟吧,如果用了唤醒后需要重新启动HSE,可以在PA8的中断服务程序里加一个标志,看一下到底有没进入这个中断!
Veiko 回答时间:2015-1-14 10:17:00
晓枫VS枯叶 发表于 2015-1-14 10:05
你应该没有使用HSE倍频做系统时钟吧,如果用了唤醒后需要重新启动HSE,可以在PA8的中断服务程序里加一个标 ...

唤醒后是做了系统的重新配置的,中断在正常工作的模式下是可以进入的,现在就是不能唤醒而已
hlt512 回答时间:2015-1-14 12:46:15
反正我是看不懂,就说说而已
hlt512 回答时间:2015-1-14 12:47:08
Veiko 发表于 2015-1-14 09:19
根据芯片手册,在STOP模式下所有的EXTI引脚配置后都可以唤醒啊

是不是人品问题呢?
Veiko 回答时间:2015-1-14 13:28:17
hlt512 发表于 2015-1-14 12:47
是不是人品问题呢?

有可能,看来要先出去扶老奶奶过马路后再来调
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版