完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
首先来介绍下看门狗是个神魔东西,在现实工业设备设计中需要考虑环境中电磁干扰等一系列干扰,这些干扰会影响单片机的正常工作(会出现程序莫名跑飞),我们改变不了环境就只好从自身这里下手,于是有了一个检测单片机自身运行状态的东西,看看程序是不是正常跑完。这个东西就叫看门狗。看门狗分两类:独立看门狗和窗口看门狗。这俩的区别就是独立看门狗用的是独立的时钟LSI,这样可以在系统时钟不工作的时候继续工作,窗口看门狗是用的系统时钟,所以和系统时钟共存亡。
好了开启正题,独立看门狗是被LSI时钟驱动的,LSI时钟是一个不准确的时钟(30-60GHZ),因为看门狗是个检测工具不需要太准确的时钟,只要可以驱动就可以。 控制独立看门狗需要几个寄存器,我们来一一介绍。第一个IWDG_KR键值寄存器,它的功能更像是一个总开关控制另外几个寄存器的读写与开关。eg:向IWDG_KR中输入0XCCCC,开启独立看门狗;写入0xAAAA,IWDG_RLR寄存器中的数会到计数器中;写入0x5555,会打开IWDG_PR和IWDG_RLR的写入保护。 第二个是IWDG_RLR寄存器,这个寄存器可以当作一个存数的功能。 第三个是IWDG_PR分频寄存器,为什么要用分频器呢,我们不是已经有好几个时钟了吗(HSE,LSI等),是这样的,下面是一张时钟树图。 我们可以看到外设都挂在AHB 和APB总线上,这个总线上的频率是由HSI,HSE,PLL时钟共同提供的,他们的频率有72MHZ 或者64MHZ,但是每个外设的适用频率是不一样的,这里就用到了分频器,把主线上的频率变化成外设适用的,这里的看门狗也需要分频才可工作。 第四个是重载寄存器,该寄存器用来保存重装载到计数器中的值。该寄存器也是一个 32 位寄存器,但是只有低 12 位是有效的。 以上就是我们需要用到的寄存器,现在我们可以启动 STM32 的独立看门狗, 通过对寄存器的讲解我们大致了解了独立看门狗原理和配置方法。接下来我们通过库函数方法教大家一步一步配置独立看门狗。 独立看门狗相关的库函数和定义分布在文件 stm32f10x_iwdg.h 和stm32f10x_iwdg.c 中 1,取消寄存器写入保护,向IWDG_KR中写入0x5555,代码为IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);这个函数非常简单,顾名思义就是开启/取消写保护,也就是使能/失能写权限。 2)设置独立看门狗的预分频系数和重装载值 wdg.c部分 #include “wdg.h” //初始化独立看门狗 //prer:分频数:0~7(只有低 3 位有效!) //分频因子=42^prer.但最大值只能是 256! //rlr:重装载寄存器值:低 11 位有效。 //时间计算(大概):Tout=((42^prer)*rlr)/40 (ms)。 void IWDG_Init(u8 prer,u16 rlr) { IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对寄存器 IWDG_PR 和 IWDG_RLR 的写操作 IWDG_SetPrescaler(prer); //设置 IWDG 预分频值:设置 IWDG 预分频值为 64 IWDG_SetReload(rlr); //设置 IWDG 重装载值 IWDG_ReloadCounter(); //按照 IWDG 重装载寄存器的值重装载 IWDG 计数器 IWDG_Enable(); //使能 IWDG} //喂独立看门狗 void IWDG_Feed(void) { IWDG-》KR=0XAAAA;//reload } main部分 int main(void) { delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组 2 uart_init(9600); //串口初始化为 9600 LED_Init(); //初始化与 LED 连接的硬件接口 KEY_Init(); //按键初始化 delay_ms(300); //让人看得到灭 IWDG_Init(4,625); //与分频数为 64,重载值为 625,溢出时间为 1s LED0=0; //点亮 LED0 while(1) { if(KEY_Scan(0)==WKUP_PRES)IWDG_Feed();//如果 WK_UP 按下,则喂狗 delay_ms(10); }; } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1935浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
728浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
567浏览 3评论
593浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
551浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 12:09 , Processed in 0.752236 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号