GD32三种低功耗例程
GD32F303ZET6三种低功耗例程
睡眠模式例程:MCU的UART3接收到数据 ,进入UART3接收中断 即唤醒睡眠模式。
int main(void)
{
/******** 本实验测试单片机睡眠模式 *********/
/* 功能:串口中断唤醒 唤醒后闪灯 闪烁5次 进入睡眠模式 */int FlashingCount =0;//init uart3Modbus2_Init(9600); //init ledgd_eval_led_init(LED2); //run lightwhile(1){my_delay(1000);//取反gd_eval_led_toggle(LED2);FlashingCount ++;if(FlashingCount >= 10){FlashingCount = 0;gd_eval_led_off(LED2);//进入睡眠模式rcu_periph_clock_enable(RCU_PMU);pmu_to_sleepmode(WFI_CMD);} }
}void Modbus2_Init(unsigned int baud) //UART3
{dma_parameter_struct dma_init_struct;//初始化串口/* enable GPIO clock */rcu_periph_clock_enable(RCU_GPIOC); //tx PC10 rx PC11/* enable USART clock */rcu_periph_clock_enable(RCU_UART3);/* connect port to USARTx_Tx */gpio_init(GPIOC, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);/* connect port to USARTx_Rx */gpio_init(GPIOC, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_11);/* USART configure */usart_deinit(UART3);usart_baudrate_set(UART3, baud);usart_receive_config(UART3, USART_RECEIVE_ENABLE); usart_transmit_config(UART3, USART_TRANSMIT_ENABLE);//开启接收中断usart_interrupt_enable(UART3, USART_INT_RBNE); //中断注册nvic_irq_enable(UART3_IRQn, 1U, 1U); usart_enable(UART3); // DMA使能
// /* enable DMA0 */rcu_periph_clock_enable(RCU_DMA1);/* deinitialize DMA channel4(UART3 tx) */dma_deinit(DMA1, DMA_CH4); //对应STM32 DMA2 - 通道5dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL;dma_init_struct.memory_addr = (uint32_t)(Modbus2_DataCtrl.SendData);dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;dma_init_struct.number = Modbus2_DataLen; //发送前 需要修改的数据dma_init_struct.periph_addr = ((uint32_t)0x40004C04); //(unsigned int)USART_DATA(UART3); dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;dma_init(DMA1, DMA_CH4, &dma_init_struct);/* configure DMA mode */dma_circulation_disable(DMA1, DMA_CH4);dma_memory_to_memory_disable(DMA1, DMA_CH4);//没有设置DMA中断/* DMA0 通道3 中断优先级设置并使能 */nvic_irq_enable(DMA1_Channel3_Channel4_IRQn, 1, 1);/* 使能 DMA0 通道3 传输完成、传输错误中断 */dma_interrupt_enable(DMA1, DMA_CH4, DMA_INT_FTF|DMA_INT_ERR);/* enable USART0 DMA channel transmission and reception */dma_channel_enable(DMA1, DMA_CH4);/* USART DMA enable for transmission and reception */usart_dma_transmit_config(UART3, USART_DENT_ENABLE); //发送
}void UART3_IRQHandler(void)
{unsigned char ReceiveData = 0;if(usart_interrupt_flag_get(UART3, USART_INT_FLAG_RBNE) != RESET){ReceiveData = usart_data_receive(UART3);usart_interrupt_flag_clear(UART3, USART_INT_FLAG_RBNE);}//空闲中断 帧中断if(usart_interrupt_flag_get(UART3, USART_INT_FLAG_IDLE) != RESET) {ReceiveData = usart_data_receive(UART3); //清除空闲中断}}void gd_eval_led_init (led_typedef_enum lednum)
{/* enable the led clock */rcu_periph_clock_enable(GPIO_CLK[lednum]);/* configure led GPIO port */ gpio_init(GPIO_PORT[lednum], GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN[lednum]);GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum];
}
深度睡眠模式例程:
int main(void)
{
/******** 本实验测试单片机深度睡眠模式 *********//* 功能:深度睡眠模式需要EXTI的任何中断来唤醒 唤醒后闪灯 闪烁5次 进入深度睡眠模式 本测试设置PE3外部中断 下降沿触发 唤醒MCU*/int FlashingCount =0;//init uart3Modbus2_Init(9600); //init ledgd_eval_led_init(LED2); //run light//init PE3 init_PE3();while(1){my_delay(1000);//取反gd_eval_led_toggle(LED2);FlashingCount ++;if(FlashingCount >= 10){FlashingCount = 0;gd_eval_led_off(LED2);//进入停止模式rcu_periph_clock_enable(RCU_PMU);pmu_to_deepsleepmode(PMU_LDO_LOWPOWER, WFI_CMD); //notice:WFI need EXTI interrupt wakeup//恢复HSE时钟SYSCLKConfig_STOP(); } }
}void init_PE3(void)
{//enable clockrcu_periph_clock_enable(RCU_GPIOE);rcu_periph_clock_enable(RCU_AF);//init pe3 iogpio_init(GPIOE, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_3);//set interrut /* enable and set key EXTI interrupt to the lowest priority */nvic_irq_enable(EXTI3_IRQn, 2U, 0U);/* connect key EXTI line to key GPIO pin */gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOE, GPIO_PIN_SOURCE_3);/* configure key EXTI line */exti_init(EXTI_3, EXTI_INTERRUPT, EXTI_TRIG_FALLING);exti_interrupt_flag_clear(EXTI_3);
}void EXTI3_IRQHandler(void)
{if(RESET != exti_interrupt_flag_get(EXTI_3)){gd_eval_led_toggle(LED2);}exti_interrupt_flag_clear(EXTI_3);
}
待机模式例程:
int main(void)
{
/******** 本实验测试单片机待机模式 *********//* 功能:待机模式唤醒方式:WKUP引脚上升沿(接3.3V 即可 已测试) 复位引脚(已测试) 独立看门狗中断 RTC闹钟 唤醒后程序重新执行。LED灯 闪烁5次 进入待机模式 */int FlashingCount =0;//init uart3Modbus2_Init(9600); //init ledgd_eval_led_init(LED2); //run lightwhile(1){my_delay(1000);//取反gd_eval_led_toggle(LED2);FlashingCount ++;if(FlashingCount >= 10){FlashingCount = 0;gd_eval_led_off(LED2);//进入停止模式rcu_periph_clock_enable(RCU_PMU);pmu_wakeup_pin_enable();pmu_to_standbymode(WFI_CMD); //notice:WFI need EXTI interrupt wakeup } }
}
GD32三种低功耗例程相关推荐
- stm32f103c6t6下的HAL库搭建三种低功耗模式及实战分析(stm32通用)
目录 三种低功耗模式介绍 睡眠模式(sleep mode) 停止模式(stop mode) 待机模式(standby mode) 总结 实战测试 个别电路原理图 功耗分析 ADC功耗大解决方案 ADC ...
- ESP8266模块三种低功耗睡眠模式
ESP8266模块睡眠模式 1.前言 2.睡眠模式 2.1 modem sleep -- 调制解调器睡眠模式 2.1.1`使用场景 2.1.2 核心代码 2.1.3 测试代码 2.2 light sl ...
- 32怎么通过一个按键实现不同工作模式_stm32几种低功耗模式的实现和差别
点击上方蓝字关注我哦- 01 前言 按功耗由高到低排列,STM32具有运行.睡眠.停止和待机四种工作模式.上电复位后 STM32 处于运行状态,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式 ...
- 百度地图三种定位方式测试(高精度、低功耗、仅用设备)
百度地图三种定位方式测试(高精度.低功耗.仅用设备) Android定位SDK自v7.0版本起,按照附加功能不同,向开发者提供了四种不同类型的定位开发包,可根据不同需求,自有选择所需类型的开发包使用. ...
- 【玩转STM32】:串口唤醒低功耗的三种方式/低功耗下打印数据
在使用STM32做低功耗项目时,大概率会遇到一个问题:低功耗模式下想打印数据怎么办? 今天,学长给大家另辟蹊径,介绍一种使用串口唤醒低功耗的案例.方法.可设置三种唤醒方式:检测到起始位唤醒.检测到 R ...
- Streamr助你掌控自己的数据(2)——三种整合数据至Streamr的典型场景
博客说明 所有刊发内容均可转载但是需要注明出处. 三种整合数据至Streamr的典型场景 本系列文档主要介绍怎么通过Streamr管理自己的DATA,整个系列包括三篇教程文档,分别是:教你5分钟上传数 ...
- 吸顶wifi_分享 | 酒店WiFi网络的三种部署模式
酒店的无线网络,在酒店部署移动网络业务的时候,很多酒店会发现实际效果远达不到预期.酒店员工和入住用户经常会抱怨无线网络不稳定.视频无限缓冲中.经常掉线--,那么今天我们来了解酒店无线网络的部署.一.影 ...
- RISC-V生态未来的三种可能~
来源:嵌入式资讯精选 因为x86 架构与 Arm 架构商业使用都要付费,因此,RISC-V开源具有很大优势. 今天就来说说 RISC-V 生态的内容. 关于RISC-V RISC:Reduced In ...
- [ASP.NET 控件实作 Day31] TBContextMenu 控件三种不同模式的 Click 动作
上一篇 整合 jQuery ContextMenu plugin 的右键选单控件 的文章中,我们实作了 TBContextMenu 控件:本文将以 TBContextMenu 控件为例,为选单项目加入 ...
最新文章
- 【iOS官方文档翻译】iOS蓝牙的基本概念
- django form 对象is_bound属性
- (原)JNI中env-GetByteArrayElements和AndroidBitmap_getInfo的冲突
- SpringCloud系列——Zuul 动态路由
- 从内部自用到对外服务,配置管理的演进和设计优化实践
- java 12-3 StringBuffer的添加和删除功能
- Docker框架使用系列教程(五)容器间的链接
- 【常见笔试面试算法题12续集二】动态规划算法案例2矩阵最小路径和练习题
- 第四次c语言实验报告模板,C语言实验报告模板.doc
- Python中re(正则表达式)模块学习
- 最全的CSS浏览器兼容整理
- php网页读取sql数据库数据模板,discuz模板中直接读取数据库中的插件数据
- 数据结构队列算法——模拟病人在医院等待就诊过程
- Web项目【用户管理系统】完整版
- math_数集(数集符号)/算数运算中英文对照
- MFC——CWnd类
- ZONe Energy Programming Contest E - Sneaking (最短路)
- 如何把mac里的照片放移动硬盘
- 中国996外资955曝光,有你家公司吗?
- 黑威联 QNAP NAS 通挂载外部存储使用相册套件
热门文章
- 【ANSYS Workbench】ACT配合Workbench真能替代Mechanical APDL经典命令操作吗?
- 【名说】 DB2 ROOL-BACK PENDING 日志后滚异常解决方法
- KEAZ128学习(三)--- GPIO和PORT
- 在两个已经排好序的数组里找出第K小的数
- 学习是个过程——不断反复不断进步
- WinEdt 报错: Misplaced alignment tab character . 解决方法
- 拿到华为200万年薪的8个人到底是何方神圣?为什么有人反而不屑?
- sas 导入csv文件_SAS导入导出时编码问题汇总
- 由蓝眼睛岛问题引发的思考
- CI系列之五:SVNAdmin安装及配置