EXTI 唤醒GD32L233深度睡眠模式1

[复制链接]
1550|1
 楼主| 小小蚂蚁举千斤 发表于 2023-6-26 09:56 | 显示全部楼层 |阅读模式
使用两个按键,其中一个按键用于触发系统进入深度睡眠模式 1,另一个按键用于将系统从深度睡眠模式 1 唤醒。系统上电后,LED1 闪烁。当按下 Tamper 按键后,系统进入深度睡眠模式 1,LED1 停止闪烁;按下 Wakeup 按键后,系统从深度睡眠模式 1 唤醒,LED 继续闪烁。由于从深度睡眠唤醒后,系统将切换 IRC16M 作为系统时钟源,因此需要重新配置系统时钟才能保证 LED1 按照之前的频率闪烁。 EXTI 唤醒相关配置如下:
1. 按键配置

  1. static void wakeup_key_init(void)
  2. {
  3. rcu_periph_clock_enable(RCU_GPIOA);
  4. rcu_periph_clock_enable(RCU_SYSCFG);
  5. /* wakeup key init */
  6. gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
  7. /* EXTI line 0 configuration */
  8. nvic_irq_enable(EXTI0_IRQn, 2);
  9. syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN0);
  10. exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
  11. exti_interrupt_flag_clear(EXTI_0);
  12. }
  13. static void tamper_key_init(void)
  14. {
  15. rcu_periph_clock_enable(RCU_GPIOC);
  16. rcu_periph_clock_enable(RCU_SYSCFG);
  17. /* tamper key init */
  18. gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_13);
  19. /* EXTI line 13 configuration */
  20. nvic_irq_enable(EXTI10_15_IRQn, 2);
  21. syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN13);
  22. exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
  23. exti_interrupt_flag_clear(EXTI_13);
  24. }
2. 按键中断处理
  1. void EXTI0_IRQHandler(void)
  2. {
  3. if(SET == exti_interrupt_flag_get(EXTI_0)) {
  4. /* clear EXTI line 0 pending flag */
  5. exti_interrupt_flag_clear(EXTI_0);
  6. }
  7. }
  8. void EXTI10_15_IRQHandler(void)
  9. {
  10. if(SET == exti_interrupt_flag_get(EXTI_13)) {
  11. /* clear EXTI line 13 pending flag */
  12. exti_interrupt_flag_clear(EXTI_13);
  13. enter_deepsleep_flag = 1;
  14. }
  15. }


70772459 发表于 2023-12-4 21:34 | 显示全部楼层
由于从深度睡眠唤醒后,系统将切换 IRC16M 作为系统时钟源,因此需要重新配置系统时钟,
请分享一下重新配置系统时钟的代码,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

228

主题

2630

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部