完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
转rtx操作系统
低功耗是MCU的一项非常重要的指标,本章节为大家讲解STM32F103和STM32F407的低功耗方式之待机模式在RTX操作系统上面的实现方法(RTX本身支持的tickless低功耗模式在第24章节讲解) 本章教程配套的例子含Cortex-M3内核的STM32F103和Cortex-M4内核的STM32F407。 23.1 STM32F103待机模式介绍 23.2 STM32F407待机模式介绍 23.3 实验例程说明 23.4 总结 23.1 STM32F103待机模式介绍 说明:在RTX系统上面实现待机方式仅需了解这里讲解的知识基本就够用了,更多休眠方式的知识请看STM32F103参考手册和Cortex-M3权威指南。 在系统或电源复位以后,微控制器处于运行状态。当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。 STM32F103有三种低功耗模式: u 睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统滴答定时器Systick等仍在运行)。 u 停止模式(所有的时钟都已停止)。 u 待机模式(1.8V电源关闭)。 本章节我们主要讲解待机模式,待机模式可实现系统的最低功耗。该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个1.8V供电区域被断电。PLL、HSI和HSE振荡器也被断电。SRAM和寄存器内容丢失,只有备份的寄存器和待机电路维持供电。 在实际的待机模式编程时需要清楚那些问题呢? 请继续往下看。 |
|
相关推荐
|
|
RTX任务创建:
复制代码 /* ********************************************************************************************************* * 函 数 名: AppTaskCreate * 功能说明: 创建应用任务 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ static void AppTaskCreate (void) { HandleTaskUserIF = os_tsk_create_user(AppTaskUserIF, /* 任务函数 */ 1, /* 任务优先级 */ &AppTaskUserIFStk, /* 任务栈 */ sizeof(AppTaskUserIFStk)); /* 任务栈大小,单位字节数 */ HandleTaskLED = os_tsk_create_user(AppTaskLED, /* 任务函数 */ 2, /* 任务优先级 */ &AppTaskLEDStk, /* 任务栈 */ sizeof(AppTaskLEDStk)); /* 任务栈大小,单位字节数 */ HandleTaskMsgPro = os_tsk_create_user(AppTaskMsgPro, /* 任务函数 */ 3, /* 任务优先级 */ &AppTaskMsgProStk, /* 任务栈 */ sizeof(AppTaskMsgProStk)); /* 任务栈大小,单位字节数 */ } |
|
|
|
|
|
信号量创建:
复制代码 static OS_SEM semaphore; /* ********************************************************************************************************* * 函 数 名: AppObjCreate * 功能说明: 创建任务通信机制 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ static void AppObjCreate (void) { /* 创建信号量计数值是0, 用于任务同步 */ os_sem_init (&semaphore, 0); } |
|
|
|
|
|
K2按键(PC13引脚)RTC入侵事件检测的实现,在bsp.c文件中:
复制代码 /* ********************************************************************************************************* * 函 数 名: bsp_Init * 功能说明: 初始化所有的硬件设备。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。只需要调用一次 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void bsp_Init(void) { /* 优先级分组设置为4, 优先配置好NVIC */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); bsp_InitUart(); /* 初始化串口 */ bsp_InitKey(); /* 初始化按键变量(必须在 bsp_InitTimer() 之前调用) */ /* 针对不同的应用程序,添加需要的底层驱动模块初始化函数 */ bsp_InitLed(); /* 初始LED指示灯端口 */ bsp_rtctamper(); } /* ********************************************************************************************************* * 函 数 名: bsp_rtctamper * 功能说明: 配置RTC的入侵事件来唤醒待机模式,另外用户不需要写入侵中断函数。 * 因为系统进入到待机模式后,检测到入侵事件后系统的执行过程等同于进行复位。 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ static void bsp_rtctamper(void) { NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /* 使能PWR时钟 */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); /* 允许访问RTC */ PWR_BackupAccessCmd(ENABLE); /* 选择RTC时钟源 LSI */ RCC_LSICmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) != RESET); RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); /* 使能外部中断 */ EXTI_ClearITPendingBit(EXTI_Line21); EXTI_InitStructure.EXTI_Line = EXTI_Line21; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Event; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* 使能中断通道 TAMPER */ NVIC_InitStructure.NVIC_IRQChannel = TAMP_STAMP_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* 禁止Tamper 1检测 */ RTC_TamperCmd(RTC_Tamper_1, DISABLE); RTC_ClearFlag(RTC_FLAG_TAMP1F); RTC_TamperTriggerConfig(RTC_Tamper_1, RTC_TamperTrigger_FallingEdge); RTC_ITConfig(RTC_IT_TAMP, ENABLE); RTC_ClearITPendingBit(RTC_IT_TAMP1); /* 使能 Tamper 1 detection */ RTC_TamperCmd(RTC_Tamper_1, ENABLE); } |
|
|
|
|
|
23.4 总结
本章节主要为大家讲解了RTX低功耗之待机模式,这里仅是提供了一种待机模式在RTX上的实现思路,有兴趣的同学也可以想一些其它的实现思路。 |
|
|
|
|
|
stm32f407+ksz8863rlli概率性ping不通
478 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-常见网络服务搭建之NFS服务搭建
320 浏览 0 评论
求助:辉芒微芯片 FDM B11GBMH 的信息及开发环境安装
245 浏览 0 评论
867 浏览 0 评论
嵌入式 学习-飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之输入输出重定向
740 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11303 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-28 20:17 , Processed in 0.538161 second(s), Total 47, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号