stm32看门狗毕设,stm32看门狗的作用

http://www.itjxue.com  2023-01-21 21:43  来源:未知  点击次数: 

关于stm32的硬件看门狗

你就想着你养了一条狗,而狗是需要喂养的,如果一段时间不喂它就会反过来咬你一下(好恶劣的狗哇),大概就是这个意思

在MCU中,硬件看门狗,在运行程序中要反复对看门狗进行reload,如果被设置的固定时间内不进行重置watchdog timer,它便让系统reset,所以它的作用是用于在系统运行过程中出现问题或是进入不可预知的错误而进行复位,从而保护你的程序

06 STM32F4的窗口看门狗(WWDG)

??(1)与独立看门狗的区别?

??窗口看门狗(WWDG )其喂狗时间是一个有上下限的范围(窗口),计数器的下限是固定的(0x40),可以通过设定相关寄存器,设定其上限时间(上限计数值)。喂狗的时间不能过早,也不能过晚。你喂得过早或者过晚,都会复位的。

??(2)有了独立看门狗来检测程序运行是否正常,为何还需要窗口看门狗?

??对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但是,这有一个隐患:有可能程序跑乱了,但又跑回到正常的地方,或者,跑乱了的程序正好执行了刷新看门狗的操作。这样的情况下,一般的看门狗就检测不出来了。

??如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗,也不会滞后刷新看门狗,这样,可以检测出程序没有按照正常的路径运行而非正常地跳过了某些程序段的情况。

??(1)控制寄存器 WWDG_CR

??32位寄存器,低8位有效。这8位中,低7位T[6:0]用来存储看门狗的计数器值,随时更新。当该计数器的值从0x40变为0x3F的时候,将产生复位;除了这低7位,还有第8位(位7,叫做WDGA位),是看门狗的激活位。该位由软件置1,用来启动看门狗,并且,一旦启动以后,该位会一直保持为1,在硬件复位以后才能清零。

??(2)配置寄存器 WWDG_CFR

??32位寄存器,我们用到10位。

??1低7位W[6:0],是7位窗口值。这7位就是窗口看门狗的上窗口。

??2位9(第10位),叫做EWI,是提前唤醒中断位。如果我们把这位设置为1,那么,只要递减计数器的计数值下降到0x40,就会产生一个中断。之所以叫做唤醒中断位,就是因为,当计数器的值减到0x40,如果不产生中断,下一个值就是0x3F,此时就会复位;而这里产生一个中断,那么我们就可以在中断服务函数里面及时地喂狗,来唤醒它,避免复位。

??注意:这里在进入中断后,必须在不大于一个窗口看门狗计数周期的时间内重新写WWDG_CR寄存器去喂狗,否则,将会复位。

??3位8和位7(叫做WDGTB[1:0]),叫做定时器时基(Time base),这两位用来修改计数时钟的分频系数。

??(3)状态寄存器 WWDG_SR

??该寄存器用来记录当前是否有提前唤醒的标志。该寄存器只有最低位(位0)一位有效。当计数值达到0x40时,该位由硬件置1.它必须通过软件写0来清除,软件对它写1是无效的。注意:它与是否使能中断没有关系,即使中断没有被使能,在计数器的值达到0x40的时候,该位也会被硬件置1。

??(1)使能WWDG时钟

??WWDG与IWDG不同,独立看门狗有自己独立的32kHz时钟,用的是LSI,而窗口看门狗用的是PCLK1的时钟,挂载在总线APB1上,所以,使用之前,需要先使能。

??(2)设置分频系数与上窗口值

??设置看门狗的分频系数(CFR寄存器,位WDGTB[1:0])的函数是:

??设置看门狗的上窗口值(CFR寄存器,位W[6:0])的函数是:

??(3)开启提前唤醒中断,并分组

??开启WWDG中断的函数为:

开启WWDG中断后,进行中断优先级配置,调用函数NVIC_Init()即可。

??(4)使能看门狗

??(5)编写中断服务函数

??编写中断服务函数WWDG_IRQHandler(),在里面调用函数WWDG_SetCounter(),去喂狗。但要注意,喂狗要迅速,否则当WWDG计数到0x3F的时候,就会引起复位了。还有一个值得注意的地方就是,在中断服务函数里面,要将状态寄存器的EWIF位清空。

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

使用情景就是防止程序卡死。

比如堆栈溢出或者中断嵌套时卡死。(大量中断嵌套处理不好很容易互相影响卡死)在这种情况下使用看门狗,一旦过了一段时间还没有喂狗则判断程序卡死,自动复位。

以上是标准使用模式,当然也许还有其他用处。

学STM32完全自学,不仅都没有老师教,连和我一起学习的同学都没有。实际也证明自学足以。我就靠正点原子的教程一点点学的。每一条语句和函数使用方法都尽量搞懂,搞不懂就放着先搞别的,过一段时间再搞。当然那些专业的标准库不需要搞懂原理,会用就行,比如UCOS(这个需要大概懂得其实现原理,函数实现不必须),ucgui,LWIP,以及STM32的官方库函数。

推荐你百度搜索正点原子战舰教程,里面包含PDF和与之对应的全部实例。非常丰富,程序构架以及实现思维都非常好,基本上可以说是国内标准模板。

总之按照正点原子的教程来准没错,但是你需要付出大量的时间和十足的努力。就像你说的只是单纯的学,不深入浅尝辄止到头来其实什么都没学会。只有你自己愿意深入下去并付诸努力才行。就拿看门狗来说,直接翻到STM32数据手册看门狗一章从头看到尾,一遍看不懂再看一遍,还看不懂放着明天看,还不行过两天再看。肯定能看懂。但是务必注意方法和效率问题。

还有就是需要自己去写一些程序,只是复制粘贴不行,自己想一些题目或者找一些题目自己练,去网上找资料想办法把这个想法实现。比如我学SUART时想实现任意字节串口接收,正点原子虽然也写了但是我总感觉不完美,因为他有各种限制还得有一个结束标志位才行。后来我去搜资料花了三四天搞定了利用DMA任意字节收发数据,效果比原子的好多了。原子的教程虽然很优秀但是侧重教学而不是实际应用,自己多想多练才是王道。

(责任编辑:IT教学网)

更多

推荐综合特效文章