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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版