STM8S的低功耗模式
- 格式:docx
- 大小:106.26 KB
- 文档页数:2
stm8s和stm8l低功耗对⽐stm8s和stm8l低功耗对⽐ 在低功耗应⽤中,⼀般来说mcu是常态halt模式,然后偶尔被唤醒(外部中断或者内部定时唤醒)进⼊运⾏模式。
所以对⽐低功耗性能,⼀般来说只需要对⽐run模式和halt下的功耗即可,因为项⽬选⽤的是通过内部定时器唤醒,所以选⽤active halt mode。
以下是stm8s003和stm8l151在这两种模式下的功耗对⽐:run mode:stm8sstm8l对⽐ 在使⽤同样的16M内部RC振荡器情况下,stm8s 3.7ma,stm8l 3.54ma,两款mcu耗电量差不多。
active halt mode:stm8sstm8l对⽐ 在同样的关闭外设,且使⽤内部低速RC振荡器唤醒的情况下:stm8s 10ua,stm8l 0.54ua。
⼤约有20倍的差距,不过对于要求不是特别⾼的情况下,ua级别的差距影响不会太⼤。
实测:为了实际验证,分别将单⽚机焊接到空板⼦上编写代码进⾏测试。
stm8 编写如下代码:32ms唤醒⼀次主程序:void main(void){CLK_HSECmd ( DISABLE );CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);AWU_DeInit();AWU_Init(AWU_TIMEBASE_32MS);CLK_SlowActiveHaltWakeUpCmd(ENABLE); //关闭活跃停机模式下的电压调节器(MVR)CLK_FastHaltWakeUpCmd(DISABLE); //关闭快速唤醒FLASH_SetLowPowerMode(FLASH_LPMODE_POWERDOWN); //设置为停机后flash掉电GPIO_Init(GPIOA,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_LOW_SLOW);GPIO_Init(GPIOB,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_LOW_SLOW);GPIO_Init(GPIOC,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_LOW_SLOW);GPIO_Init(GPIOD,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_LOW_SLOW);GPIO_WriteLow(GPIOA,GPIO_PIN_ALL);GPIO_WriteLow(GPIOB,GPIO_PIN_ALL);GPIO_WriteLow(GPIOC,GPIO_PIN_ALL);GPIO_WriteLow(GPIOD,GPIO_PIN_ALL);AWU_Cmd(ENABLE);while(1){ halt();}}中断处理程序:INTERRUPT_HANDLER(AWU_IRQHandler, 1){/* In order to detect unexpected events during development,it is recommended to set a breakpoint on the following instruction.*/u8 awu_temp = 0;awu_temp = AWU_GetFlagStatus();}程序下载到单⽚机后,串到台式万⽤表上实测电流11ua,见下图:stm8l 编写如下代码:32ms唤醒⼀次主程序:void main(void){GPIO_Init(GPIOA, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);GPIO_Init(GPIOB, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);GPIO_Init(GPIOC, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);GPIO_Init(GPIOD, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);GPIO_Init(GPIOE, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);GPIO_Init(GPIOF, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);GPIO_Write(GPIOA,0x00);GPIO_Write(GPIOB,0x00);GPIO_Write(GPIOC,0x00);GPIO_Write(GPIOD,0x00);GPIO_Write(GPIOE,0x00);GPIO_Write(GPIOF,0x00);RTC_DeInit(); //初始化默认状态CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE); //允许RTC时钟CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1); // 38K/1 RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div2); //38/2=19KRTC_SetWakeUpCounter(19*32); //19*32 32msRTC_ITConfig(RTC_IT_WUT, ENABLE); //开启中断PWR_FastWakeUpCmd(DISABLE); //关闭快速唤醒功能PWR_UltraLowPowerCmd(ENABLE);//超低功耗RTC_WakeUpCmd(ENABLE);while(1){ halt();}}中断处理程序:INTERRUPT_HANDLER(RTC_CSSLSE_IRQHandler,4){/* In order to detect unexpected events during development,it is recommended to set a breakpoint on the following instruction.*/RTC_ClearITPendingBit(RTC_IT_WUT);}将程序下载到单⽚机后,串到台式万⽤表测试电流在4ua左右,见下图:。
STM8L051低功耗模式测试文档STM8L051的五种低功耗模式wait ,low power run mode,low power wait mode,Ative-Halt mode,Halt mode。
1、WAIT mode在等待模式,CPU的时钟是停止的,被选择的外设继续运行。
W AIT mode 分为两种方式:WFE,WFI。
WFE是等待事件发生,才从等待模式中唤醒。
WFI是等待中断发生,才从等待模式中唤醒。
2、low power run mode在低功耗运行模式下,CPU和被选择的外设在工作,程序执行在LSI或者LSE下,从RAM 中执行程序,Flash和EEPROM都要停止运行。
电压被配置成Ultra Low Power模式。
进入此模式可以通过软件配置,退出此模式可以软件配置或者是复位。
3、low power wait mode这种模式进入是在low power run mode下,执行wfe。
在此模式下CPU时钟会被停止,其他的外设运行情况和low power run mode类似。
在此模式下可以被内部或外部事件、中断和复位唤醒。
当被事件唤醒后,系统恢复到low power run mode。
4、Active-Halt mode在此模式下,除了RTC外,CPU和其他外设的时钟被停止。
系统唤醒是通过RTC中断、外部中断或是复位。
5、Halt mode在此模式下,CPU和外设的时钟都被停止。
系统唤醒是通过外部中断或复位。
关闭内部的参考电压可以进一步降低功耗。
通过配置ULP位和FWU位,也可以6us的快速唤醒,不用等待内部的参考电压启动。
一、各个低功耗模式的代码实现1、WAIT mode等待模式分为两种:WFI和WFE。
1.1 WFI mode当执行“wfi”语句时,系统就进入WFI模式,当中断发生时,CPU被从WFI模式唤醒,执行中断服务程序和继续向下执行程序。
通过置位CFG_GCR的AL位,使主程序服务完中断服务程序后,重新返回到WFI 模式。
STM8L探索套件学习笔记-低功耗模式(十二)官方给的例程当中,使用PE6 作为IDD_WAKUP,将系统从低功耗中唤醒,STM8L 有5 种低功耗模式,降低功耗的方法还可以将系统时钟降低或者关闭没有使用的外设。
今天我们就使用U3 这个14 阶脉动进位计数器M74HC4060 进行HALT 模式唤醒,从原理图可以看到Q14 脚输出的反向连接到T2 模拟开关,控制PE6 端口。
因为经过两个反向器,使用Q14 的逻辑等于PE6 的逻辑。
U3的时钟频率为30KHZ,Q14 的脉冲周期为2 的14 次方除以30KHZ,约等于0.5s,也就是说Q14 输出的脉冲是周期大约为1 秒,占空比为1:1 的方波。
所以PE6 的电平变化也是周期大约为1 秒,占空比为1:1 的方波。
代码设计如下:void main(void) {GPIO_Init(LED3_PORT,LED3_PIN,GPIO_Mode_Out_PP_High_Fast);//输出低电平-高速10MGPIO_Init(LED4_PORT,LED4_PIN,GPIO_Mode_Out_PP_High_Fast); //输出低电平-高速10MGPIO_Init(CNT_EN_PORT,CNT_EN_PIN,GPIO_Mode_Out_PP_High_Fast); GPIO_Init(WAKEUP_PORT,WAKEUP_PIN,GPIO_Mode_In_FL_IT);//PE6LCD_ GLASS_Init();LCD_GLASS_DisplayString(“M74HC”);/*Enable Rising edge port PE6 for wake up conter *///EXTI->CR2 = 0x10;//上升沿或者下载沿都可以EXTI_SetPinSensitivity(EXTI_Pin_6, EXTI_Trigger_Rising);/* Enable Interrupts */enableInterrupts();GPIO_ResetBits(GPIOC,GPIO_Pin_4);//使能U3 计数器/* Infinite loop */while (1){GPIO_ToggleBits(LED3_PORT,LED3_PIN);halt();//进入HALT 模式,外部中断能够唤醒}}程序开始初始化板上的LED3/LED4,LCD显示测试M74HC 计数器的功能。
STM8S105K4T6C中文1. 简介STM8S105K4T6C是意法半导体(STMicroelectronics)公司推出的一款适用于嵌入式系统的32位微控制器。
它采用了STM8S系列的核心芯片,并集成了丰富的外设和功能,能够满足各种应用的需求。
本文将介绍STM8S105K4T6C的主要特性、性能参数以及应用领域。
2. 主要特性•STM8S内核:–8位CPU,运行频率最高可达16 MHz;–支持多达22条中断线;–带冗余比较器和自动校准单元的时钟系统。
•存储器:–32 KB Flash,可用于存储应用程序和数据;– 2 KB RAM,用于存储运行时数据。
•外设:–与主控器通信的SPI、I2C和UART接口;–16位定时器和计数器;–12位ADC模数转换器;–4路通用输入/输出端口。
•低功耗模式:–支持多种低功耗模式,可最大程度地降低功耗。
3. 性能参数•工作电压范围:2.95 V 到 5.5 V•工作温度范围:-40 °C 到 85 °C•总线速率:最高可达16 MHz•DMA通道数:None•电源模式:三级独立供电和低功耗模式•外设供电电压:1.8 V 至 5.5 V4. 应用领域由于STM8S105K4T6C具有低功耗、高集成功能和可靠性等特点,它在各个领域都有广泛的应用:•家电控制:可用于空调、电视、洗衣机等家电产品的控制系统。
•工业自动化:适用于PLC(可编程逻辑控制器)、工业仪表和机器人等设备。
•汽车电子:可应用于车载音响、汽车电控单元和驾驶辅助设备等。
•智能家居:可用于智能灯控、智能门锁和智能家居中枢控制系统等。
•电子设备:适用于手持设备、音频设备和医疗设备等嵌入式系统。
5. 开发工具和资源•STM8CubeMX:用于生成配置代码和启动文件的软件工具。
•STVD开发环境:ST公司提供的集成开发环境,支持C语言编程。
•STM8S105K4T6C官方文档:详细介绍了芯片的功能和使用方法。
STM8L低功耗调试方法STM8L低功耗调试方法做了一个电池供电的项目,刚开始光想着完成功能,最后再去整低功耗。
看了资料STM8L 的低功耗感觉很好。
结果把自己坑惨了。
因为就这个功能老是实现不了。
着急上火的我,从ST的官网下载了STM8L的代码。
关键词,就一句话:Halt_Init();发现解决不了问题。
又接着看资料。
表示要关闭各路时钟CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, DISABLE);CLK_PeripheralClockConfig(CLK_Peripheral_TIM3, DISABLE);CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, DISABLE);CLK_PeripheralClockConfig(CLK_Peripheral_LCD, DISABLE);想想也是,应该让这些个模块都休息。
把功耗降低。
结果不尽人意。
又找来一句:PWR_UltraLowPowerCmd(ENABLE);还是不行。
又找百度,发现GPIO的设置很重要。
于是,把所有的GPIO全部设为输出。
且都设为与上下拉相对应的电平。
保证没有漏电流。
仍然解决不了问题。
越到后面越急。
发现加了一堆代码。
就是不行。
发现总是有1.27MA的电流。
一直存在。
坑的事情发生了,网上居然很多人都是在这个电流附近。
各种神操作。
两天后(每天只折腾一到二个小时),我奔溃了。
接下来,我静下心来,弄了一个全新的工程。
把代码一小段一小段的加上去试。
终于发现有些有意思的事情了。
原以为,把时钟关闭,这个模块就没有了驱动,就会休息。
就应该省电。
实际上,这个操作是有个过程的,看一下正常的初始化操作(以定时器为例)CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE);TIM4_TimeBaseInit(TIM4_Prescaler_16 ,124);TIM4_ITConfig(TIM4_IT_Update , ENABLE);TIM4_Cmd(ENABLE);要求,先打开时钟,然后设好时钟的分频和时钟基数,再打开中断允许,最后开启时钟功能。
单片机低功耗模式一、什么是单片机低功耗模式?单片机低功耗模式指的是在一些特定的场景下,为了节省能源和延长设备的使用寿命,单片机采用一系列节能措施降低其功耗的模式。
这种模式下,单片机可以进入睡眠状态或者其他低功耗状态,在不影响设备正常运行的前提下,最大限度地降低其功率消耗。
二、为什么需要单片机低功耗模式?随着物联网、智能家居等新兴技术的发展,对于设备的能源消耗和使用寿命越来越重视。
在这种情况下,单片机作为嵌入式系统中不可或缺的组成部分,其功耗也成为一个非常重要的问题。
如果设备长期处于高功耗状态,会导致电池寿命缩短、电费增加等问题。
因此,在一些特定场景下采用单片机低功耗模式可以有效地解决这些问题。
三、单片机低功耗模式有哪些类型?1. 睡眠模式睡眠模式是最常见也是最简单的一种低功耗模式。
在这种状态下,单片机会关闭一些外设,进入睡眠状态。
这种模式下,单片机的功耗通常只有几个微安,非常省电。
当外部中断信号到来时,单片机会被唤醒,重新进入工作状态。
2. 待机模式待机模式是一种比较灵活的低功耗模式。
在这种状态下,单片机可以选择关闭一些外设或者降低其工作频率等方式来降低功耗。
同时,在这种模式下,单片机仍然可以继续处理一些简单的任务。
3. 停止模式停止模式是一种非常严格的低功耗模式。
在这种状态下,所有外设都被关闭,并且单片机的时钟也被停止。
在这种情况下,单片机无法执行任何任务,并且需要通过外部中断信号来唤醒。
4. 休眠模式休眠模式是一种比较特殊的低功耗模式。
在这种状态下,单片机会将RAM中的数据保存到闪存中,并且关闭所有外设和时钟。
在这种情况下,单片机消耗的电流非常小,在某些场景下可以达到纳安级别。
四、如何实现单片机低功耗模式?实现单片机低功耗模式通常需要以下步骤:1. 选择合适的低功耗模式不同的场景下需要选择不同的低功耗模式。
比如在设备长时间不使用时,可以选择停止模式;在设备需要随时响应外部事件时,可以选择睡眠模式等。
Stm8芯片低功耗的问题:
除了运行模式,可以采用以下三种低功耗模式:等待、主动停机、停机。
其中停机模式的低功耗最低。
停机模式:CPU和片上设备完全停止工作,定时唤醒单元AWU也停止,仅由外部中断及复位唤醒,耗电6uA~66uA。
要低功耗设计,主要考虑几个方面:
1.外设的低功耗,不需要的外设模块,全部关闭。
2.GPIO的处理,不需要的IO最好做悬浮输入处理。
3.主时钟的处理,先降到最低内部LSI时钟,关闭其他不需要的时钟模块。
4.进入低功耗模式。
如果在进入低功耗之前把所有无用的IO口全部配置成输出拉低状态,外围需要的IO 口配置成相对应的状态,那么你的板子低功耗应该是没有问题的;若是进入低功耗之前没有再次对IO口进行配置,只是在刚上电初始化时配置了一下,那你的板子低功耗很大可能存在问题的。
最近在测睡眠低功耗的问题,但是测试中会存在差异性的问题,和芯片有关系,有的芯片能过,有的不能过,很是奇怪,查了好长时间,终于发现了问题。
原来是DEBUG/SWIM 脚有问题,如果对这个脚不管不顾,那么它的状态就是默认输入状态,由于DEBUG/SWIM 脚是程序调试脚,既有输出功能又有输入功能,如果睡眠时,这个脚的状态是悬空状态,那么DEBUG/SWIM脚的状态就会存在不确定性,这种状态下有的暗电流就会浮动(个人觉得和芯片的整体性能有关,有的芯片有浮动,有的芯片没有).
举例说明:
假如你的板子进入低功耗时,如下图所示,Q10时断开的,也就是说IGN_ON是和
VDD_5V是间接导通的,IGN_ON是和单片机引脚相连的,此时为了安全起见(确保功耗是最小的),应设对应的单片机引脚为输出高。
STM8S功耗管理(设计通法)这篇文章我们聊下功耗管理,不仅仅是STM8S,51,32,等等单片机都绕不过这个坎,在文章最后试图给出一些设计的通法。
对于由电池供电的系统来说,功耗是非常重要的指标。
通常,要求系统的平均功耗小于某个目标值来保证一个适当的电池续航时间。
这意味着系统可以在短时间内功耗较大,而把平均功耗维持在目标值以下。
在互补金属氧化物半导体(CMOS)数字逻辑电路中,功耗为下列因子之和:●静态功耗(主要由晶体管的偏置电流和漏电流产生)●动态功耗,取决于电源电压和工作时钟频率,按照下面公式:动态功耗 = CV^2f,其中─ C为CMOS负载电容─ V为电源电压─ f为时钟频率在CMOS逻辑电路以一定时钟频率运行时,静态功耗与动态功耗相比是可以忽略的。
但在一些低功耗模式下,时钟不再运行,此时静态功耗是主要的功耗源。
因此,功耗主要取决于:●微控制器单元(MCU)的芯片面积:所采用的工艺,晶体管的数量,片上集成和使用的模拟功能/外设。
●MCU电源电压:CMOS逻辑电路中消耗的电流与电源电压的平方成正比。
因此,可以通过降低供电电压来降低功耗。
●时钟频率:在不要求进行高速处理的应用中,降低时钟频率可以降低功耗。
●激活的外设数目或使用的MCU功能数目(CSS、BOR、PVD……):激活的外设数目越多,或使用的MCU功能数目越多,则功耗越大。
●工作模式:功耗会随着应用所处的不同功耗模式而改变(CPU开启/关闭,晶振开启/关闭……)。
系统在3v-5.5v之间,其实是比较宽的,看框图有两个稳压器。
就分为内外两种完整的时钟树从这里输入主时钟源(f MASTER )为内核和外设提供时钟,只读寄存器CLK_CMSR包含了当前主时钟源的选择信息。
可以读出来。
这些就是时钟管理STM8S的时钟管理起来比较自由,随便的开关。
给大家表演个封装库。
先搞个转换用的宏函数.从基地址开始+相应的偏移地址就算封装好啦!偏移的地址在数据手册里面,是0。
STM8S时钟控制器功能强大而且灵活易用,其目的在于使用户在获得最好的性能同时,亦能保证消耗的功率最低用户可以单独地管理各个时钟源,并将它们分配到CPU和各个外设。
主时钟和CPU时钟均带有预分频器,注意的是STM8S系列是没有锁相环倍频功能的。
这一节我们主要是对主时钟的编程,片内外设的时钟留到对应的外设章节中说明。
STM8具有安全可靠的无故障时钟切换机制,可在程序运行中将主时钟源切换到另一个时钟源。
之所以我们在这一节内容安排在第三节,是因为STM8S有默认时钟源而且简单IO 口编程相对于入门来说更容易接受,所以我们特意安排在第三节。
抗电磁干扰时钟配置寄存器为了避免由电磁干扰造成的对应用程序误写操作或系统挂起,大多数关键的时钟配置寄存器都有一个互补寄存器与之相对应。
系统将会自动检测这些关键寄存器与其互补寄存器之间是否匹配。
如果不匹配,则产生一个EMS复位,从而使应用程序恢复到正常操作。
详情请参见时钟寄存器描述。
这在特定环境下是很有帮助的。
主时钟源介绍下面4中时钟源可用做主时钟1、1-24MHz高速外部晶振(HSE)2、最大24MHz高速外部时钟信号3、16MHz高速内部RC振荡器(HSI)4、128KHz低速内部RC(LSI)各个时钟源可以单独打开或者关闭,从而优化功耗HSE高速外部时钟信号可由下面两个时钟源产生HSE外部晶体/陶瓷谐振器HSE用户外部有源时钟HISHIS信号由内部16MHz RC振荡器与一个可编程分频器(分频因子从1到8)产生。
分频因子由寄存器CLK——CKDIVR决定。
LSI128KHz的LSI RC时钟是一个低功耗的可选主时钟源,也可在停机(Halt)模式下作为维持独立看门狗的低功耗时钟源。
2、主时钟切换时钟切换功能为用户提供了一种易用、快速、安全的从一个时钟源切换到另一个时钟源的途径。
2.1系统启动为使系统快速启动,复位后时钟控制器自动使用HSI的8分频(HSI/8)做为主时钟(2MHz)。
四种STM8低功耗模式的主要特性如表12。
(表12:STM8S低功耗模式管理)
1.如果外设时钟未被关闭
2.包括通讯外设的中断(参见中断向量表)
STM8等待(Wait)模式
在运行模式下执行WFI(等待中断)指令,可进入等待模式。
此时CPU停止运行,但外设与中断控制器仍保持运行,因此功耗会有所降低。
等待模式可与PCG(外设时钟门控),降低CPU 时钟频率,以及选择低功耗时钟源(LSI,HSI)相结合使用,以进一步降低系统功耗。
参见时钟控制
(CLK)的说明。
在等待模式下,所有寄存器与RAM的内容保持不变,之前所定义的时钟配置也保持不变(主时钟状态寄存器CLK_CMSR)。
当一个内部或外部中断请求产生时,CPU从等待模式唤醒并恢复工作。
STM8停机(Halt)模式
在该模式下主时钟停止。
即由fMASTER提供时钟的CPU及所有外设均被关闭。
因此,所有外设均没有时钟,MCU的数字部分不消耗能量。
在停机模式下,所有寄存器与RAM的内容保持不变,默认情况下时钟配置也保持不变(主时钟状态寄存器CLK_CMSR)。
MCU可通过执行HALT指令进入停机模式。
外部中断可将MCU从停机模式唤醒。
外部中断指配置为中断输入的GPIO端口或具有触发外设中断能力的端口。
在这种模式下,为了节省功耗主电压调节器关闭。
仅低电压调节器(及掉电复位)处于工作状态。
stm8s系列单片机原理与应用STM8S系列单片机原理与应用。
STM8S系列单片机是STMicroelectronics公司推出的一款低功耗、高性能的8位微控制器。
它具有丰富的外设资源和灵活的应用方式,被广泛应用于家电、工业控制、汽车电子等领域。
本文将介绍STM8S系列单片机的原理和应用,希望能为大家对STM8S系列单片机有更深入的了解。
首先,我们来了解一下STM8S系列单片机的基本原理。
STM8S 系列单片机采用了较为先进的8位内核,具有较高的时钟频率和运算性能。
它内置了丰富的外设资源,包括通用定时器、串行外设接口、模拟数字转换器等,可以满足不同应用场景的需求。
此外,STM8S系列单片机还支持多种低功耗模式,可以在电池供电的场景下延长使用时间,具有很好的节能效果。
在实际应用中,STM8S系列单片机有着广泛的应用。
以家电行业为例,STM8S系列单片机可以用于空调控制、洗衣机控制、冰箱控制等各种家电产品中。
它的高性能和低功耗特点,使得家电产品在工作稳定性和节能方面都有很好的表现。
在工业控制领域,STM8S系列单片机也被广泛应用于各种自动化设备中,如PLC控制器、工业机器人等。
此外,汽车电子领域也是STM8S系列单片机的重要应用领域,它可以用于车身控制、发动机控制、车载娱乐系统等各种汽车电子产品中。
除了以上提到的应用领域,STM8S系列单片机还可以在通信设备、医疗设备、智能家居等领域发挥作用。
它的灵活性和可靠性,使得它在各种应用场景下都能够得到广泛的应用。
总的来说,STM8S系列单片机以其高性能、低功耗、丰富的外设资源和灵活的应用方式,成为了各种电子产品的理想选择。
它的原理和应用涉及到了多个领域,为各种产品的设计和开发提供了强大的支持。
相信随着技术的不断进步,STM8S系列单片机将会在更多的领域展现其强大的应用价值。
STM8S如何实现Atomthreads最低功耗STM8S如何实现Atomthreads最低功耗Atomthreads像众多操作系统一样,在没有任务调度是会调用idle。
(by cpuwolf)staTIc void atomIdleThread (uint32_t param){ /* Compiler warning */ param = param; /* Loop forever */ while (1) { /** \todo Provide user idle hooks*/ }}atomthreads中atomIdleThread()是以线程的形式存在,也就是最低优先级线程。
作者默认没有填写这个函数。
uint8_t atomOSInit (void *idle_thread_stack_top, uint32_t idle_thread_stack_size){ uint8_t status; /* IniTIalise data */ curr_tcb = NULL; tcbReadyQ = NULL; atomOSStarted = FALSE; /* Create the idle thread */ status = atomThreadCreate(idle_tcb, IDLE_THREAD_PRIORITY, atomIdleThread, 0, idle_thread_stack_top, idle_thread_stack_size); /* Return status */ return (status);}针对STM8我们最自然想到的是在其中加一个wfi,STM8进入wfi模式几乎不会影响任何外设的运行。
以STM8S105K4为例,其进入该模式的典型电流是1.8mA。
这个电流,用一节2000mA手机供电,理论上也最多能坚持46天,才一个月多点。
这个记录太差了。
STM8还有一个HALT模式,这是该芯片的最低功耗模式,电流是uA级别。
STM8低功耗设定及其例程STM8有三种低功耗模式,即等待、活跃停机和停机。
具体它们三者有什么区别自己看官方手册去吧,这里只讲停机模式的应用,其他的一笔带过!一、进入的方式:等待模式进入用的指令是WFI,而活跃停机和停机用的都是halt(),所不同的是,在执行halt指令之前,如果开启了AWU,则是活跃停机,反之则是停机。
还有一点要说明的是,在停机模式下独立看门狗是不能养的,而只能养窗口看门狗。
二、具体进入的步骤:1、首先,你声明一个标志位,名字自己取。
这个标志位是用来判断系统是该处于运行模式还是处于停机模式的。
我这里用fPowerOn_flag,如下:bool fPowerOn_flag = FALSE;有了这个标志位以后就写下面的部分了:int main(void){//设置内部16M晶振为系统时钟Clk_Init(); //系统时钟初始化函数MWWDG_Init();//窗口看门狗初始化函数while (1){Free_WWDG();//喂狗函数if(fPowerOn_flag == FALSE){Halt_OffDevice();//停机前关闭不需要的外设halt();//进入停机模式System_Init();//系统初始化函数}if(fPowerOn_flag){//运行代码在这里添加}}}以上就是一个停机模式的模板了,大家参照着用就可以了。
系统上电默认是进入停机模式,然后通过按键唤醒进入运行模式。
下面为大家讲一下主函数中每个函数的写法和功能吧!2、各函数说明:a、时钟初始化函数:void Clk_Init(void){CLK_DeInit();//复位时钟寄存器CLK_HSICmd(ENABLE);//使能内部高速时钟CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV4);//配置内部高速时钟(时钟分频器:4分频),系统时钟4MHzCLK_ClockSecuritySystemEnable();//开启时钟安全系统}这个函数我想不用多讲了,大家都懂的。
stm8s电动车方案现在市场上的电动车种类繁多,其中STM8S电动车方案是一款技术先进、效能出众的产品。
本文将详细介绍STM8S电动车方案的特点、应用领域以及优势所在。
一、STM8S电动车方案的特点STM8S电动车方案采用了先进的STM8S系列微控制器作为控制核心,具有以下特点:1. 高性能:STM8S系列微控制器具有高速运算能力和丰富的外设资源,能够满足电动车各项功能的需求,保证了车辆的稳定性和可靠性。
2. 低功耗:STM8S系列微控制器采用低功耗设计,能够有效延长电动车的续航里程,提高电池的使用寿命。
3. 多功能:STM8S系列微控制器具有丰富的接口和外设资源,可支持多种传感器的输入和控制功能,如电动车的速度、转向、制动等。
4. 强大的通信能力:STM8S系列微控制器支持多种通信接口,如UART、SPI和I2C等,方便实现电动车与其他设备的数据交互和通信。
二、STM8S电动车方案的应用领域STM8S电动车方案广泛应用于各类电动车产品中,包括电动自行车、电动摩托车、电动汽车等。
其应用领域包括但不限于以下几点:1. 城市交通:STM8S电动车方案能够满足城市交通工具对性能和功耗的要求,可广泛应用于城市短途交通工具,如共享电动车、电动步行车等。
2. 物流配送:STM8S电动车方案支持多种传感器接口和通信功能,可用于物流配送行业,提高送货效率和减少运营成本。
3. 个人代步:STM8S电动车方案的小巧灵活、低功耗的特点,使得其在个人代步工具领域具有广泛的应用前景。
4. 旅游观光:STM8S电动车方案可应用于旅游观光行业,提供便利的交通工具和绿色环保的旅游方式。
三、STM8S电动车方案的优势相比其他电动车方案,STM8S电动车方案具有以下优势:1. 高性价比:STM8S电动车方案采用成熟的STM8S系列微控制器,价格相对较低,性价比高。
2. 稳定可靠:STM8S系列微控制器经过严格的质量控制和测试,具有稳定可靠的性能,可满足电动车的持续运行需求。
STM8S的低功耗模式有4种。
关系如下。
本次使用的停机(HALT)
使用了内部定时器,外部中断,LED指示是否进入低功耗。
在while循环中设置如下
1while(1)
2 {
3if(!IR_IN) // 外部中断产生
4 {
5执行程序...
6
7 IR_IN = 1;
8 }
9else
10 {
11 TIM1_Cmd(DISABLE); // 关闭定时器
12 ClrLED; //关闭LED
13 _asm("halt"); // 进入停机模式
14 SetLED; // 开启LED
15 }
16 }
在主函数中检测到外部中断了,执行相关函数。
函数自行完成后,进入else
其中如果使用halt模式,可以不写11行。
如果使用WFI模式需要写11行在else中 13行开起停机模式。
如果停机模式正常进入,LED灯是熄灭的,如果没有进入停机模式,LED灯被开启。
用来判断状态。
测试:
按键触发,外部中断引脚产生下降沿中断,点亮LED灯(在中断函数中点亮的)
当按键弹起后LED灯熄灭。
由于测试工具限制,只能确保电流低于1ma。