完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、什么是看门狗:
简单来说看门狗就是一种专用定时器。 二、看门狗的功能: 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。 简单来说就是在系统跑飞(程序异常执行)的情况时,系统复位,程序重新执行。 三、独立看门狗(IWDG) 1、独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它仍有效。 独立看门狗适合应用于需要看门狗作为一个在主程序之外能够完全独立工作,并且对时间精度要求低的场合。 2、独立看门狗的功能 在键值寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗。此时计数器开始从其复位值0xFFF递减,当计数器值计数到尾值0x000时会产生一个复位信号(IWDG_RESET)。 无论何时,只要在键值寄存器IWDG_KR中写入0xAAAA(通常说的喂狗), 自动重装载寄存器IWDG_RLR的值就会重新加载到计数器,从而避免看门狗复位。 如果程序异常,就无法正常喂狗,从而系统复位。 3、独立看门狗寄存器 ①键值寄存器IWDG_KR:0~15位有效 ②预分频寄存器IWDG_PR:0~2位有效。具有写保护功能,要操作先取消写保护 ③重装载寄存器IWDG_RLR:0~11位有效。具有写保护功能,要操作先取消写保护 ④状态寄存器IWDG_SR:0~1位有效 4、独立看门狗超时时间 (适用M4) 溢出时间计算:Tout=((4×2^prer) ×rlr) /32 (M4) 即是:最长超时时间= (IWDG_RLR寄存器最大值)X看门狗时钟周期 注意:M4的时钟频率LSI=32K, 一个看门狗时钟周期就是最短超时时间。 5、独立看门狗操作步骤 //①取消寄存器写保护: void IWDG_WriteAccessCmd(uint16_tIWDG_WriteAccess);//取消写保护:0x5555使能 // ② 设置独立看门狗的预分频系数,确定时钟: void IWDG_SetPrescaler(uint8_tIWDG_Prescaler);//设置预分频系数:写PR // ③ 设置看门狗重装载值,确定溢出时间: void IWDG_SetReload(uint16_tReload);//设置重装载值:写RLR // ④ 使能看门狗 void IWDG_Enable(void);//使能看门狗:写0xCCCC到KR // ⑤ 应用程序喂狗: void IWDG_ReloadCounter(void);//喂狗:写0xAAAA到KR //最后: FlagStatusIWDG_GetFlagStatus(uint16_tIWDG_FLAG);//状态:重装载/预分频 更新 6、代码如下: void IWDG_Init(u8 prer,u16 rlr) { IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对IWDG-》PR IWDG-》RLR的写 IWDG_SetPrescaler(prer); //设置IWDG分频系数 IWDG_SetReload(rlr); //设置IWDG装载值 IWDG_ReloadCounter(); //reload //重载看门狗计数值 IWDG_Enable(); //使能看门狗 } int main(void) { delay_init(168); //初始化延时函数 LED_Init(); //初始化LED端口 KEY_Init(); //初始化按键 delay_ms(100); //延时100ms IWDG_Init(4,500); //与分频数为64,重载值为500,溢出时间为1s LED0=0; //先点亮灯 while(1) { if(KEY_Scan(0)==WKUP_PRES) //如果WK_UP按下,则喂狗 { IWDG_ReloadCounter(); //喂独立看门狗 } delay_ms(10); } } //检查系统是否已经从独立看门狗复位恢复:只需要几十ms if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET) { printf(“IWDG RESET OK!rn”); PFout(8) = ~PFout(8); } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1590 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1529 浏览 1 评论
962 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
676 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1572 浏览 2 评论
1856浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
629浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
511浏览 3评论
520浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
494浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-16 22:25 , Processed in 0.741553 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号