参考学习资料 单片机 nucleo_tutorial6.pdfVIP

  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文档。上传文档
查看更多

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*/

}

/

文档评论(0)

工地殿小二 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档