您当前的位置:首页 > 文章摘抄 > 正文

stm32看门狗(STM32的独立开门狗怎么启用和停止)

STM32程序有没有必要加看门狗1、个人认为没有必要,这在库函数中的实现函数是:IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);2)设置独立看门狗的预分频系数和重装载值 设置看门狗的分频系数的函数是:void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置 IWDG 预分频值设置看门狗的重装载值的函数是:void IWDG_SetReload(uint16_t Reload); //设置 IWDG 重装载值设置好看门狗的分频系数 prer 和重装载值就可以知道看门狗的喂狗时间 (也就是看门狗溢出时间),就不会导致看门狗复位(当然写入多次也是可以的),我们就可以启动 STM32 的独立看门狗,4) 启动看门狗(向 IWDG_KR 写入 0XCCCC)库函数里面启动独立看门狗的函数是:IWDG_Enable(); //使能 IWDG通过这句,即实现独立看门狗的喂狗操作,rlr 为看门狗的重装载值(IWDG_RLR 的值),STM32 窗口看门狗中的喂狗操作具体是指什么是指清空看门狗计数器。

STM32的独立开门狗怎么启用和停止

STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号) 。在键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。无论何时,只要键寄存器 IWDG_KR 中被写入 0xAAAA, IWDG_RLR 中的值就会被重新加载到计数器中从而避免产生看门狗复位 。IWDG_PR 和 IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR 寄存器中写入 0x5555。将其他值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入 0xAAAA)也会启动写保护功能。只要对以上三个寄存器进行相应的设置,我们就可以启动 STM32 的独立看门狗,启动过程可以按如下步骤实现(独立看门狗相关的库函数和定义分布在文件 stm32f10x_iwdg.h 和stm32f10x_iwdg.c 中) :1)取消寄存器写保护(向 IWDG_KR 写入 0X5555)通过这步,我们取消 IWDG_PR 和 IWDG_RLR 的写保护,使后面可以操作这两个寄存器,设置 IWDG_PR 和 IWDG_RLR 的值。这在库函数中的实现函数是:IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);2)设置独立看门狗的预分频系数和重装载值 设置看门狗的分频系数的函数是:void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置 IWDG 预分频值设置看门狗的重装载值的函数是:void IWDG_SetReload(uint16_t Reload); //设置 IWDG 重装载值设置好看门狗的分频系数 prer 和重装载值就可以知道看门狗的喂狗时间 (也就是看门狗溢出时间) ,该时间的计算方式为:Tout=((4×2^prer) ×rlr) /40其中 Tout 为看门狗溢出时间(单位为 ms) ;prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7;rlr 为看门狗的重装载值(IWDG_RLR 的值) ;比如我们设定 prer 值为 4, rlr 值为 625,那么就可以得到 Tout=64×625/40=1000ms,这样,看门狗的溢出时间就是 1s,只要你在一秒钟之内,有一次写入 0XAAAA 到 IWDG_KR,就不会导致看门狗复位(当然写入多次也是可以的)。这里需要提醒大家的是,看门狗的时钟不是准确的 40Khz,所以在喂狗的时候,最好不要太晚了,否则,有可能发生看门狗复位。3)重载计数值喂狗(向 IWDG_KR 写入 0XAAAA)库函数里面重载计数值的函数是:IWDG_ReloadCounter(); //按照 IWDG 重装载寄存器的值重装载 IWDG 计数器通过这句,将使 STM32 重新加载 IWDG_RLR 的值到看门狗计数器里面。 即实现独立看门狗的喂狗操作。4) 启动看门狗(向 IWDG_KR 写入 0XCCCC)库函数里面启动独立看门狗的函数是:IWDG_Enable(); //使能 IWDG通过这句,来启动 STM32 的看门狗。注意 IWDG 在一旦启用,就不能再被关闭!想要关闭,只能重启,并且重启之后不能打开 IWDG,否则问题依旧,所以在这里提醒大家,如果不用 IWDG 的话,就不要去打开它,免得麻烦。

STM32 窗口看门狗中的喂狗操作具体是指什么

是指清空看门狗计数器,看门狗实际上就是一个定时计数器,用来防止程序发生意外而设置的一个监测装置,只要看门狗功能打开,看门狗计数器的计数值是会不停的增加,程序正常运行时,需要在看门狗计数器达到最大值之前(就是看门狗最大计数时间之内)将其清空,使其重新开始计数,这就是“喂狗”。如果程序跑飞,或者发生什么意外状况,而使得“喂狗”操作不能正常进行,看门狗计数器会不断增加,直到溢出,然后单片机复位,从而避免单片机跑飞以后失控而导致死机。

单片机,STM32程序有没有必要加看门狗

1、个人认为没有必要,除了死循环外,想越界,内存泄露等等问题,STM32会进入异常函数,可以添加复位代码来复位单片机2、如果相加,还是按需添加3、加的方式最好是,代码完成后,再加

stm32 学习以及看门狗你大概是在哪里用的呢,看了个例程还是不太明白使用情景

使用情景就是防止程序卡死。比如堆栈溢出或者中断嵌套时卡死。(大量中断嵌套处理不好很容易互相影响卡死)在这种情况下使用看门狗,一旦过了一段时间还没有喂狗则判断程序卡死,自动复位。以上是标准使用模式,当然也许还有其他用处。学STM32完全自学,不仅都没有老师教,连和我一起学习的同学都没有。实际也证明自学足以。我就靠正点原子的教程一点点学的。每一条语句和函数使用方法都尽量搞懂,搞不懂就放着先搞别的,过一段时间再搞。当然那些专业的标准库不需要搞懂原理,会用就行,比如UCOS(这个需要大概懂得其实现原理,函数实现不必须),ucgui,LWIP,以及STM32的官方库函数。推荐你百度搜索正点原子战舰教程,里面包含PDF和与之对应的全部实例。非常丰富,程序构架以及实现思维都非常好,基本上可以说是国内标准模板。总之按照正点原子的教程来准没错,但是你需要付出大量的时间和十足的努力。就像你说的只是单纯的学,不深入浅尝辄止到头来其实什么都没学会。只有你自己愿意深入下去并付诸努力才行。就拿看门狗来说,直接翻到STM32数据手册看门狗一章从头看到尾,一遍看不懂再看一遍,还看不懂放着明天看,还不行过两天再看。肯定能看懂。但是务必注意方法和效率问题。还有就是需要自己去写一些程序,只是复制粘贴不行,自己想一些题目或者找一些题目自己练,去网上找资料想办法把这个想法实现。比如我学SUART时想实现任意字节串口接收,正点原子虽然也写了但是我总感觉不完美,因为他有各种限制还得有一个结束标志位才行。后来我去搜资料花了三四天搞定了利用DMA任意字节收发数据,效果比原子的好多了。原子的教程虽然很优秀但是侧重教学而不是实际应用,自己多想多练才是王道。


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: usb调试模式怎么打开?电脑调试模式启动是什么意思

下一篇: 糖果手机为什么那么便宜(糖果手机好不好用,价格如何)



推荐阅读