完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1.看门狗的使用环境
在工业的工作环境中设备经常面临一些恶劣的环境,超高温 超低温 强烈的电磁干扰,这些环境都会影响设备的正常工作会造成设备死机,设备中运行的程序直接跑飞 所以可以使用看门狗帮助程序员检测设备是否死机或者程序跑飞,一旦设备死机或者程序跑飞,看门狗可以帮助程序员重启系统 2.看门狗的简介 看门狗属于定时器的资源,既然说看门狗是定时器,那么决定看门狗的定时长短由时钟频率和计数值来决定,和普通定时器不同,普通定时器当定时到了之后,可以去处理程序员指定的事情,但是看门狗不同,当看门狗的定时到了之后,直接重启系统(按reset按键),如果设备本身没有死机或者程序没有跑飞,不需要重启 3.看门狗的喂狗 使用看门狗监测设备系统,如果设备没有死机,程序没有跑飞,是不需要重启的 需要每隔一段时间进行喂狗的操作(给看门狗的计数器重新赋计数值) 4.看门狗外设资源 有些芯片内部集成了看门狗的外设->可以直接使用 有些芯片内部没有看门狗外设->需要硬件工程师在开发板上外接一个看门狗 5.介绍STM32芯片中的看门狗 在STM32F103RBT6芯片中有两个看门狗:独立看门狗(IWDG),窗口看门狗(WWDG)。 注意:一般来说高端芯片中只有一个看门狗,和独立看门狗类似 相同点:
IWDG_KR : 接受特定的值,做特定的操作,[0-15]有效,[16-31]保留 IWDG_PR : 预分频寄存器,[0-2]有效,[3-31]保留 IWDG_PLR : 重装载值寄存器,[0~11]有效,[12-31]保留,计数值范围[0 - 4095] /* 用于驱动独立看门狗 是由时钟频率以及计数值决定定时长短 */ #include "stm32f10x_conf.h" extern void iwdg_init(int ms);//独立看门狗的初始化 /* IWDG_KR 0xAAAA喂狗 0x5555关闭写保护 0xCCCC开启看门狗 IWDG_PR 设置预分频 IWDG_RLR设置计数值 */ extern void iwdg_feed_dog(void);//喂狗的操作 #include "iwdg.h" void iwdg_init(int ms)//独立看门狗的初始化 { IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//开启IWDG_PR和IWDG_RLR寄存器的写访问 IWDG_SetPrescaler(IWDG_Prescaler_64);//设置预分频值为64分频,时钟频率 = 40KHz / 64 = 625Hz IWDG_SetReload(ms);//设置重装载值 IWDG_ReloadCounter();//喂狗 IWDG_Enable();//开启看门狗 } void iwdg_feed_dog(void)//喂狗的操作 { IWDG_ReloadCounter();//喂狗 } 测试 int flag = 0;//定义了一个全局变量,用于记录标志 void h0(void)//KEY0按键按下要处理的事情 { led_on(1); flag = 1;//改变全局变量flag的状态 } void h1(void)//KEY1按键按下要处理的事情 { led_on(2); } void h2(void)//KEY2按键按下要处理的事情 { led_off(1); led_off(2); } int main(void) { led_init();//调用LED灯初始化的函数 buzzer_init();//调用蜂鸣器初始化的函数 button_init();//调用功能按键初始化的函数 delay_init();//调用系统定时器初始化的函数 eint_init();//调用按键中断初始化的函数 set_eint_handler(h0, h1, h2);//设置按键中断的回调函数 buzzer_on();//打开蜂鸣器 iwdg_init(625 * 6);//调用独立看门狗初始化的函数,并且设置计数值(6s之内进行喂狗) delay_ms(4000);//延时4s buzzer_off();//关闭蜂鸣器 while(!flag)//可以让CPU在死循环中其他事情 { iwdg_feed_dog();//喂狗 led_on(0); delay_ms(500); led_off(0); delay_ms(500); } } |
|
|
|
只有小组成员才能发言,加入小组>>
3309 浏览 9 评论
2990 浏览 16 评论
3490 浏览 1 评论
9052 浏览 16 评论
4085 浏览 18 评论
1171浏览 3评论
602浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
594浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2332浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 00:07 , Processed in 1.079505 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号