历史上的今天
今天是:2024年11月13日(星期三)
2019年11月13日 | STM8L低功耗HALT模式一些总结
2019-11-13 来源:eefocus
进入HALT注意事项
将未使用到的IO口设置为输出低;
关闭所有用到的外设时钟(如 ADC、USART等);
失能所使用到的外设;
实测进入HALT模式待机约为0.3uA
下面列出示例代码,如有错误,还请广大网友指出。 ^_^
#include "stm8l15x.h"
uint8_t sys_1ms_flg = 0;
uint16_t SleepTime = 0;
/*LED工作2S灭 进入HALT模式 外部唤醒 */
void main(void){
CLK_PeripheralClockConfig (CLK_Peripheral_TIM4,ENABLE); /* 使能外设时钟 */
TIM4_DeInit();
TIM4_TimeBaseInit(TIM4_Prescaler_8, 0xfa); /* 16M/8/8=250K,0xfa=250,250*(1/250)=1mS */
TIM4_ITConfig(TIM4_IT_Update, ENABLE); /* 向上溢出中断使能,中断向量号25 */
TIM4_Cmd(ENABLE); /* TIM4使能 */
GPIO_Init(GPIOD,GPIO_Pin_0,GPIO_Mode_Out_PP_High_Slow); /* 初始化LED端口 */
GPIO_Init(GPIOB, GPIO_Pin_1, GPIO_Mode_In_PU_IT); /* 配置GPIB PIN1脚为外部中断脚 */
EXTI_DeInit (); /* 恢复中断的所有设置 */
EXTI_SetPinSensitivity(EXTI_Pin_1, EXTI_Trigger_Falling);/* 配置外部中断 唤醒Halt模式 */
PWR_FastWakeUpCmd(ENABLE); /* 快速唤醒使能 */
PWR_UltraLowPowerCmd(ENABLE); /* */
enableInterrupts(); /* 开启中断总开关 */
while (1){
if(sys_1ms_flg){
sys_1ms_flg = 0;
GPIO_ResetBits(GPIOD, GPIO_Pin_0);
SleepTime++;
if(SleepTime==2000){
SleepTime = 0;
/* 进入HALT前 需把所有为用到的端口设置为低*/
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);
/* 我的板子LED是低点亮 所以置高 */
GPIO_SetBits(GPIOD, GPIO_Pin_0);
/* 上面把端口配置为输出低 但是不是我们想要的 所配置回来GPIB PIN1脚为外部中断脚 */
GPIO_Init(GPIOB, GPIO_Pin_1, GPIO_Mode_In_PU_IT);
/* 先失能Tim4 在禁用tim4时钟 */
/* 个人理解 先把外设时钟禁止了 那它怎么配置其他寄存器呢 不知道理解的正不正确 */
TIM4_Cmd(DISABLE);
CLK_PeripheralClockConfig (CLK_Peripheral_TIM4,DISABLE);
halt(); /* 进入停机模式 实测0.3uA */
nop();
CLK_PeripheralClockConfig (CLK_Peripheral_TIM4,ENABLE);
TIM4_Cmd(ENABLE);
}
}
}
}
上一篇:独立看门狗和窗口看门狗的区别
史海拾趣
|
摘要: 介绍基于SRAM LUT结构的FPGA器件的上电配置方式;着重介绍采用计算机串口下载配置数据的方法和AT89C2051单片机、串行EEPROM组成的串行配置系统的设计方法及实现多任务电路结构中配置的方法,并从系统的复杂度、可靠性和经济性等方面进行比较 ...… 查看全部问答> |
|
看到一些职场的小警示,感觉很不错,和大家分享一下。题目是我起的,意思就是让大家别以为有些规则可以违背,虽然公司的员工手册上讲得天花乱坠。 &nb ...… 查看全部问答> |
|
c51能实现64位的浮点运算吗?float 32位的误差太大了! 在单片机上做计算器的功能,需要比较高的精度,用float他只能支持到7位精度,超过7位的都给我四舍五入了,带来的误差实在太大了!我想用double双精度但sizeof发现他也是4个byte的和float一个样,难道c51单片机就没办法实现64位的双精度浮点运算? ...… 查看全部问答> |
|
近年来,触摸技术正在迅速向不同的市场领域渗透。尽管触摸技术类型迥异,但与其他技术相比,用于按键应用和屏幕应用的电容式触摸增长和渗透最快。其主要原因就在于,采用触摸按键不仅可以改善美学和工业设计,还能够提升可靠性,因为电容式触摸按键 ...… 查看全部问答> |
|
本人新学MSP430,用的是并口仿真器,按网上所说并口模式改为EPP+ECP,并将Debugger-》Driver设置成Fet-Debugger,Fet debugger ->setup设置为LPT-IF,但是没有办法下载程序,总是报错: Fatal error: Failed to initialize. Check if h ...… 查看全部问答> |
|
MSPGCC的维护者Peter(pabigot) 最近完成了MSP430板级支持包的发布, 一般BSP都是一些比较高端或者复杂些的板子才会有,MSP430板级支持包的发布, 说明430的开发环境越来越成熟,越来越丰富了。 既来之则用之,哈哈! 目前主要支持MSP430的官方 ...… 查看全部问答> |
|
关于嵌入式Linux系统flash分区设计及文件系统格式选择的一些浅见 嵌入式系统应用程序升级是比较频繁的,这就需要将flash进行合理的划分,一般情况,flash 的基本分区都有这几部分:1.uboot分区2.kernel分区3.rootfs分区这三部分是最基本的,一般都有。如果只是这样分区,然后应用程序和文件系统放在一起,这样的话 ...… 查看全部问答> |




