完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
GD32F4xx_Demo_Suites里的PMU_Sleep_Wakeup示例没有展示如何从串口从deepsleep状态唤醒
官方应用笔记中的sleep相关的串口唤醒也是有uart WAKEUP功能的串口器件,没有GD32F103或GD32F4XX系列的串口deepsleep唤醒示例 我尝试了几次,deepsleep后从串口输入字符,灯没有闪,都没有成功,请问GD32官方论坛的研发人员如何解决该问题 下面是大概的代码框架, 串口RX是PA10(EVAL_COM0) void prepare_sleep() { usart_disable(EVAL_COM0); usart_interrupt_disable(EVAL_COM0, USART_INT_RBNE); usart_deinit(EVAL_COM0); gpio_mode_set(EVAL_COM0_GPIO_PORT, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP,EVAL_COM0_RX_PIN); gpio_output_options_set(EVAL_COM0_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,EVAL_COM0_RX_PIN); nvic_irq_enable(EXTI10_15_IRQn, 2U, 0U); syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN10); exti_init(EXTI_10, EXTI_INTERRUPT, EXTI_TRIG_RISING); exti_interrupt_flag_clear(EXTI_10); exti_interrupt_enable(EXTI_10); } void do_sleep() { rcu_periph_clock_enable(RCU_PMU); pmu_to_deepsleepmode(PMU_LDO_NORMAL, PMU_LOWDRIVER_DISABLE, WFI_CMD); while (1) { toggle_alarmled(); //灯没有闪 delay_ms(500); } } void EXTI15_10_IRQHandler() { if(exti_interrupt_flag_get(EXTI_10) != RESET){ do_wakeup_irq(); exti_interrupt_flag_clear(EXTI_10); } } void do_wakeup_irq() { SystemInit(); SystemCoreClockUpdate(); systick_config(); } int main() { //闪灯初始化,略 //串口初始化,略 prepare_sleep(); do_sleep(); } |
|
相关推荐
1个回答
|
|
要实现从串口唤醒GD32F4xx系列微控制器,您需要按照以下步骤操作:
1. 配置串口中断:在进入深度睡眠模式之前,确保串口接收中断已启用。 2. 配置唤醒事件:在进入深度睡眠模式之前,将串口接收中断配置为唤醒事件。 3. 进入深度睡眠模式:调用`pmu_to_deepsleep_mode()`函数进入深度睡眠模式。 4. 唤醒处理:在深度睡眠模式下,当串口接收到数据时,微控制器将从深度睡眠模式唤醒。在唤醒后,需要重新配置串口。 以下是实现从串口唤醒的示例代码: ```c #include "gd32f4xx.h" void prepare_sleep(void) { // 禁用串口 usart_disable(EVAL_COM0); // 禁用串口接收中断 usart_interrupt_disable(EVAL_COM0, USART_INT_RBNE); // 配置唤醒事件 pmu_sleepmode_config(PMU_SLEEP_ENTRY_DEEP_SLEEP); pmu_wakeup_event_enable(PMU_WAKEUP_SOURCE_USART0); } void main(void) { // 初始化串口 usart_deinit(EVAL_COM0); usart_baudrate_set(EVAL_COM0, 115200U); usart_word_length_set(EVAL_COM0, USART_WL_8BIT); usart_stop_bit_set(EVAL_COM0, USART_STB_1BIT); usart_parity_config(EVAL_COM0, USART_PM_NONE); usart_hardware_flow_rts_config(EVAL_COM0, USART_RTS_DISABLE); usart_hardware_flow_cts_config(EVAL_COM0, USART_CTS_DISABLE); usart_receive_config(EVAL_COM0, USART_RECEIVE_ENABLE); usart_interrupt_enable(EVAL_COM0, USART_INT_RBNE); usart_enable(EVAL_COM0); // 进入深度睡眠模式 while (1) { prepare_sleep(); pmu_to_deepsleep_mode(); // 唤醒后重新配置串口 usart_deinit(EVAL_COM0); usart_baudrate_set(EVAL_COM0, 115200U); usart_word_length_set(EVAL_COM0, USART_WL_8BIT); usart_stop_bit_set(EVAL_COM0, USART_STB_1BIT); usart_parity_config(EVAL_COM0, USART_PM_NONE); usart_hardware_flow_rts_config(EVAL_COM0, USART_RTS_DISABLE); usart_hardware_flow_cts_config(EVAL_COM0, USART_CTS_DISABLE); usart_receive_config(EVAL_COM0, USART_RECEIVE_ENABLE); usart_interrupt_enable(EVAL_COM0, USART_INT_RBNE); usart_enable(EVAL_COM0); // 读取接收到的数据 uint8_t data = usart_data_receive(EVAL_COM0); // 处理接收到的数据 // ... } } ``` 请注意,这个示例代码仅用于演示如何从串口唤醒GD32F4xx系列微控制器。您可能需要根据您的具体需求进行调整。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1614 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1541 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
682 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1592 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 19:16 , Processed in 0.735607 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号