STM8低功耗.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
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分频),系统时钟4MHz ? CLK_ClockSecuritySystemEnable();//开启时钟安全系统 } 这个函数我想不用多讲了,大家都懂的。 b、窗口看门狗函数: void MWWDG_Init(void) { ? WWDG_Init(COUNTERINIT, WINDOW);//COUNTERINIT =?0x7f,WINDOW =?0x77 } 这个是窗口看门狗初始化函数。 void Free_WWDG(void) { ? INT8U CounterValue; ? CounterValue = (INT8U)(WWDG_GetCounter() 0x7F); ?? ? /*? ? ?* 判断是否小于所设置的窗口上限值? ? ?* 只有小于窗口上限值才能清零 ? ?*/ ? if(CounterValue WINDOW){ ? ? WWDG_SetCounter(COUNTERINIT); ? } } 这个是窗口看门狗喂狗函数,防止看门狗复位。 c、停机前外设设置函数: void Halt_OffDevice(void) { ? //关闭设备前,设置系统主时钟,和中断? ? Clk_Init(); ? ?? ? //CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV4); ?? ? ADC1_DeInit(); ? TIM1_DeInit(); ? //停机前关闭不需要的功能模块的时钟 ? ? CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER3,DISABLE); ? CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1,DISABLE); ? CLK_PeripheralClockConfig(CLK_PERIPHERAL_ADC,DISABLE); ? CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2,DISABLE); ? CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4,DISABLE); ? CLK_PeripheralClockConfig(CLK_PERIPHERAL_AWU,DISABLE); ? CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C,DISABLE); ? CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART2,DISABLE

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档