打印

EXTI 唤醒GD32L233深度睡眠模式1

[复制链接]
991|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
使用两个按键,其中一个按键用于触发系统进入深度睡眠模式 1,另一个按键用于将系统从深度睡眠模式 1 唤醒。系统上电后,LED1 闪烁。当按下 Tamper 按键后,系统进入深度睡眠模式 1,LED1 停止闪烁;按下 Wakeup 按键后,系统从深度睡眠模式 1 唤醒,LED 继续闪烁。由于从深度睡眠唤醒后,系统将切换 IRC16M 作为系统时钟源,因此需要重新配置系统时钟才能保证 LED1 按照之前的频率闪烁。 EXTI 唤醒相关配置如下:
1. 按键配置

static void wakeup_key_init(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_SYSCFG);
/* wakeup key init */
gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
/* EXTI line 0 configuration */
nvic_irq_enable(EXTI0_IRQn, 2);
syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN0);
exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
exti_interrupt_flag_clear(EXTI_0);
}
static void tamper_key_init(void)
{
rcu_periph_clock_enable(RCU_GPIOC);
rcu_periph_clock_enable(RCU_SYSCFG);
/* tamper key init */
gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_13);
/* EXTI line 13 configuration */
nvic_irq_enable(EXTI10_15_IRQn, 2);
syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN13);
exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
exti_interrupt_flag_clear(EXTI_13);
}
2. 按键中断处理
void EXTI0_IRQHandler(void)
{
if(SET == exti_interrupt_flag_get(EXTI_0)) {
/* clear EXTI line 0 pending flag */
exti_interrupt_flag_clear(EXTI_0);
}
}
void EXTI10_15_IRQHandler(void)
{
if(SET == exti_interrupt_flag_get(EXTI_13)) {
/* clear EXTI line 13 pending flag */
exti_interrupt_flag_clear(EXTI_13);
enter_deepsleep_flag = 1;
}
}


使用特权

评论回复
沙发
70772459| | 2023-12-4 21:34 | 只看该作者
由于从深度睡眠唤醒后,系统将切换 IRC16M 作为系统时钟源,因此需要重新配置系统时钟,
请分享一下重新配置系统时钟的代码,谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

196

主题

2037

帖子

1

粉丝