- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
NUCLEO教程之六:喂狗
编译:netlhx
很多MCU里面都有内置的看门狗支持。所谓看门狗,一般是MCU里面的一个组件,经过适当的设置
之后,一旦启动,它就会不知疲倦的始终运行,老老实实的为你做事!
STM32里的看门狗可以分为两种:IWDG和WWDG,即独立看门狗及窗口看门狗。
看门狗计数器
不管是哪种看门狗,本质都是一个计数器,根据计数值的状态来决定是否执行相应的操作。今天我们来
看看WWDG。先看一张图,T[6:0]就是看门狗计数器
WWDG使用的计数器是7位的,给它指定一个值后,如果启动了看门狗,则该计数器向下开始计数。
由于计数器是7位的,所以计数器的最大值就是0x7F,另外规定,如果计数器的值从0x40变化到0x3F
的话,则会引起系统复位。所以要想不让系统复位,得定期的刷新计数器的值,不能让它有机会计数到
0x3F。
另外一条规定是:不能任意的刷新计数器的值,必须在指定的时间段内才能刷新计数器的值,这个时间
段就是所谓的窗口。
也就是说:指定一个窗口值W[6:0],当计数器在计数过程中,只有计数器的值位于W[6:0]及0x3F之间
的话,才允许刷新计数器的值。
另外,像其它的计数器一样,计数频率也是可以调整的,所以我们通过指定下面几个参数就能确定知道
什么时候要喂狗了:
需要注意的是,来自APB1的时钟,经4096分频之后,才是WWDG的进入频率,该频率还可以进一
步分频,这就是上图中的分频设置。
喂狗时间计算
按照上图中的设置,我们来计算一下喂狗的时间。
初值设置为127,窗口值设置为80,APB1时钟频率所以第一个时间值为:
1s*8*4096*(127-80)/=32.08m
窗口值的另一个范围为
1s*8*4096*(127-63)/=43.69m
也就是说,在定时器启动或计数器复位后的这一段时间内才能刷新计数器的值,其它段刷新的话都会导
致系统复位
当然还有一种情况,如果不刷新计数器,则当计数器的值从0X40变化到0X3F时,也会导致系统复位。
代码
下面代码的功能是,系统上电或复位后检测是否是由看门狗引起的复位,如果是,则LED灯亮2秒,然
后熄灭;然后启动看门狗,进入快闪状态。
下面是代码(节录)
intmain(void)
{
/*USERCODEBEGIN1*/
/*USERCODEEND1*/
/*MCUConfiguration
*/
/*Resetofallperipherals,InitializestheFlashinterfaceandtheSystick.
*/
HAL_Init();
/*Configurethesystemclock*/
SystemClock_Config();
/*Initializeallconfiguredperipherals*/
MX_GPIO_Init();
MX_WWDG_Init();
/*USERCODEBEGIN2*/
if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST)!=RESET)
{
__HAL_RCC_CLEAR_RESET_FLAGS();
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
HAL_Delay(2000);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);
HAL_Delay(500);
}
HAL_WWDG_Start(hwwdg);
/*USERCODEEND2*/
/*USERCODEBEGIN3*/
/*Infiniteloop*/
while(1)
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
HAL_Delay(50);
HAL_WWDG_Refresh(hwwdg,127);
}
/*USERCODEEND3*/
}
/
您可能关注的文档
- 参考学习资料 单片机 HUSB365 Training Template V11.pdf
- 参考学习资料 单片机 HX3608.pdf
- 参考学习资料 单片机 include.docx
- 参考学习资料 单片机 keil常见警告处理大全(比较全).pdf
- 参考学习资料 单片机 L298N原理图.pdf
- 参考学习资料 单片机 LCDwen.pdf
- 参考学习资料 单片机 ld3985.pdf
- 参考学习资料 单片机 LM324.doc
- 参考学习资料 单片机 LTH7_4054 (2)-Copy-Reduced-Flattened-Reduced.pdf
- 参考学习资料 单片机 M25P16-VME6TG.pdf
原创力文档


文档评论(0)