当前位置: 首页 > news >正文

诚信网站平台建设方案广州定制网站建设方案书

诚信网站平台建设方案,广州定制网站建设方案书,施工合同简单通用版,惠州开发做商城网站建设哪家好学习之路主要为FreeRTOS操作系统在STM32F103#xff08;STM32F103C8T6#xff09;上的运用#xff0c;采用的是标准库编程的方式#xff0c;使用的IDE为KEIL5。 注意#xff01;#xff01;#xff01;本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习… 学习之路主要为FreeRTOS操作系统在STM32F103STM32F103C8T6上的运用采用的是标准库编程的方式使用的IDE为KEIL5。 注意本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习也可以通过Proteus仿真的方式进行学习。 后续文章会同时发表在个人博客(jason1016.club)、CSDN 视频会发布在bilibili(UID:399951374) STM32F1 低功耗模式 proteus仿真无法实现 STM32 本身就支持低功耗模式STM32F1共有三种低功耗模式 ● 睡眠(Sleep)模式。 ● 停止(Stop)模式。 ● 待机(Standby)模式。 1、睡眠(Sleep)模式 ● 进入睡眠模式 进入睡眠模式有两种指令WFI(等待中断)和WFE(等待事件)。根据 Cortex-M 内核的SCR(系统控制)寄存器可以选择使用立即休眠还是退出时休眠当 SCR 寄存器的 SLEEPONEXIT(bit1)位为 0 的时候使用立即休眠当为 1 的时候使用退出时休眠。关于立即休眠和退出时休眠的详细内容请参考《权威指南》“第 9 章 低功耗和系统控制特性”章节。 CMSIS(Cortex 微控制器软件接口标准)提供了两个函数来操作指令 WFI 和 WFE我们可以直接使用这两个函数__WFI 和__WFE。FreeRTOS 系统会使用 WFI 指令进入休眠模式。 ● 退出休眠模式 如果使用 WFI 指令进入休眠模式的话那么任意一个中断都会将 MCU 从休眠模式中唤醒如果使用 WFE 指令进入休眠模式的话那么当有事件发生的话就会退出休眠模式比如配置一个 EXIT 线作为事件。 当 STM32F103 处于休眠模式的时候 Cortex-M3 内核停止运行但是其他外设运行正常比如 NVIC、SRAM 等。休眠模式的功耗比其他两个高但是休眠模式没有唤醒延时应用程序可以立即运行。 2、停止(Stop)模式 停止模式基于 Cortex-M3 的深度休眠模式与外设时钟门控在此模式下 1.2V 域的所有时钟都会停止PLL、HSI 和 HSE RC 振荡器会被禁止但是内部 SRAM 的数据会被保留。调压器可以工作在正常模式也可配置为低功耗模式。如果有必要的话可以通过将 PWR_CR 寄存器的FPDS 位置 1 来使 Flash 在停止模式的时候进入掉电状态当 Flash 处于掉电状态的时候 MCU从停止模式唤醒以后需要更多的启动延时。 3、待机(Standby)模式 相比于前面两种低功耗模式待机模式的功耗最低。待机模式是基于 Cortex-M3 的深度睡眠模式的其中调压器被禁止。1.2V 域断电PLL、HSI 振荡器和 HSE 振荡器也被关闭。除了备份区域和待机电路相关的寄存器外SRAM 和其他寄存器的内容都将丢失。 退出待机模式的话会导致 STM32F1 重启所以待机模式的唤醒延时也是最大的。实际应用中要根据使用环境和要求选择合适的待机模式。 二、Tickless 模式 1、模式原理 一般的简单应用中处理器大量的时间都在处理空闲任务所以我们就可以考虑当处理器处理空闲任务的时候就进入低功耗模式当需要处理应用层代码的时候就将处理器从低功耗模式唤醒。FreeRTOS 就是通过在处理器处理空闲任务的时候将处理器设置为低功耗模式来降低能耗。一般会在空闲任务的钩子函数中执行低功耗相关处理比如设置处理器进入低功耗模式、关闭其他外设时钟、降低系统主频等等。 我们知道 FreeRTOS 的系统时钟是由滴答定时器中断来提供的系统时钟频率越高那么滴答定时器中断频率也就越高。18.1 小节讲过中断是可以将 STM32F03 从睡眠模式中唤醒周期性的滴答定时器中断就会导致 STM32F103 周期性的进入和退出睡眠模式。因此如果滴答定时器中断频率太高的话会导致大量的能量和时间消耗在进出睡眠模式中这样导致的结果就是低功耗模式的作用被大大的削弱。 为此FreeRTOS 特地提供了一个解决方法——Tickless 模式当处理器进入空闲任务周期以后就关闭系统节拍中断(滴答定时器中断)只有当其他中断发生或者其他任务需要处理的时候处理器才会被从低功耗模式中唤醒。 为此我们将面临两个问题 问题一关闭系统节拍中断会导致系统节拍计数器停止系统时钟就会停止。 FreeRTOS 的系统时钟是依赖于系统节拍中断(滴答定时器中断)的如果关闭了系统节拍中断的话就会导致系统时钟停止运行这是绝对不允许的该如何解决这个问题呢我们可以记录下系统节拍中断的关闭时间当系统节拍中断再次开启运行的时候补上这段时间就行了。这时候我们就需要另外一个定时器来记录这段该补上的时间如果使用专用的低功耗处理器的话基本上都会有一个低功耗定时器比如 STM32L4 系列(L 系列是 ST 的低功耗处理器)就有一个叫做 LPTIM(低功耗定时器)的定时器。STM32F103 没有这种定时器那么就接着使用滴答定时器来完成这个功能具体实现方法后面会讲解。 问题二如何保证下一个要运行的任务能被准确的唤醒 即使处理器进入了低功耗模式但是我的中断和应用层任务也要保证及时的响应和处理。中断自然不用说本身就可以将处理器从低功耗模式中唤醒。但是应用层任务就不行了它无法将处理器从低功耗模式唤醒无法唤醒就无法运行这个问题看来很棘手既然应用层任务无法将处理器从低功耗模式唤醒那么我们就借助其他的力量来完成这个功能。如果处理器在进入低功耗模式之前能够获取到还有多长时间运行下一个任务那么问题就迎刃而解了我们只需要开一个定时器定时器的定时周期设置为这个时间值就行了定时时间到了以后产生定时中断处理器不就从低功耗模式唤醒了。这里似乎又引出了一个新的问题那就是如何知道还有多长时间执行下一个任务这个时间也就是低功耗模式的执行时间值得庆辛的是 FreeRTOS已经帮我们完成了这个工作。 2、Tickless具体实现 //宏定义在FreeRTOSconfig.h中设置 #define configUSE_TICKLESS_IDLE 1 //1 启用低功耗 tickless 模式 /*当此宏为0时表示不使用Tickless为1时表示使用系统自带的低功耗模式Sleep模式滴答定时器计时为2时表示自定义实现Tickless功能*//***************************************************************************************************************/ /* FreeRTOS与低功耗管理相关配置 */ /***************************************************************************************************************/ extern void PreSleepProcessing(uint32_t ulExpectedIdleTime); extern void PostSleepProcessing(uint32_t ulExpectedIdleTime);#define configPRE_SLEEP_PROCESSING PreSleepProcessing //进入低功耗模式前要做的处理 #define configPOST_SLEEP_PROCESSING PostSleepProcessing //退出低功耗模式后要做的处理 //进入低功耗模式前需要处理的事情 //ulExpectedIdleTime低功耗模式运行时间 void PreSleepProcessing(uint32_t ulExpectedIdleTime) {//关闭某些低功耗模式下不使用的外设时钟此处只是演示性代码RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,DISABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,DISABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,DISABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,DISABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,DISABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,DISABLE); } //退出低功耗模式以后需要处理的事情 //ulExpectedIdleTime低功耗模式运行时间 void PostSleepProcessing(uint32_t ulExpectedIdleTime) {//退出低功耗模式以后打开那些被关闭的外设时钟此处只是演示性代码RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE); }
http://www.sadfv.cn/news/140129/

相关文章:

  • 建立网站需要备案吗网站范例
  • 网站建设合作协议文本在国外用什么地图导航
  • 网站seo工作国际知名设计公司的新方案
  • 如何建设英文网站产品营销推广策略
  • 个人备案网站名称怎么写网站开发常用字体
  • 怎么用虚拟机做网站怎么创建网站
  • 建设网站团队校园门户网站解决方案
  • 景点网站建设方案有哪些平面设计网站
  • 买建筑公司网站零基础学网页设计
  • 阿里云域名续费网站php网站后台登陆不上
  • 门户网站开发需要无锡网站制作哪家便宜
  • 在线教育网站开发实例清空wordpress数据库表
  • 韶关做网站的wordpress给分类添加自定义文字
  • 电动车网站建设成都网站建设桔子
  • 做网站买主机还是服务器wordpress建站成品图
  • 眼镜商城网站建设方案济南抖音seo
  • 高端定制外贸网站网站名称和域名有关系
  • 网站代码字体变大云南网站定制
  • 做做网站2023下载东莞搜索seo网站关键词优化
  • 网站关键字字数长沙网站建站
  • 自有服务器可以做网站吗音乐网站建设报告
  • 移动网站建设解决方案山东临沂网站推广
  • 汕头市城市建设总公司网站淘宝网网页版登录入口在哪里
  • 用阿里云空降怎么建设网站织梦音乐网站模板
  • 中国网站设计师联盟如何建设一个好的网站
  • 网站模版制作怎么开网店呢
  • 云南公司建网站多少钱炒币做合约哪个网站最好
  • 如何建站工作服定制电话
  • 马拉松网站建设方案微信号管理系统
  • 网站建设上传视频做网站技术含量