前言
**废话:**前面已经学习了CubeMx配置工程的相关用法,本节我们就来看看这所谓的看门狗可以溜着玩不。。。
独立看门狗简介
看门狗的原理: 单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗威廉希尔官方网站
就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号)。
看门狗寄存器的运行机制:
① 独立看门狗时钟源:一般由独立的RC振荡器LSI提供。
② 计数器时钟:递减计数器的时钟由LSI经过一个八位的预分频器得到,可以通过操作寄存器IWDG_PR来设置分频因子,分频因子的取值为:4、8、16、32、64、128、256。
计数器时钟CK_CNT= LSI/ 4*2^PRV(分频因子) ③ 计数器:独立看门狗的计数器是一个 12 位的递减计数器,最大值为 0XFFF,当计数器减到 0时,会产生一个复位信号:IWDG_RESET,让程序重新启动运行,如果在计数器减到 0 之前刷新了计数器的值的话,就不会产生复位信号,重新刷新计数器值的这个动作我们俗称喂狗。
④ 重装载寄存器:重装载寄存器是一个 12 位的寄存器,里面装着要刷新到计数器的值,这个值的大小决定着独立看门狗的溢出时间。
超时时间 Tout = (4*2^prv) / LSI * rlv (s) prv是预分频器寄存器的值,rlv是重装载寄存器的值。 ⑤ 键值寄存器: IWDG_KR 可以说是独立看门狗的一个控制寄存器,主要有三种控制方式,往这个寄存器写入下面三个不同的值有不同的效果。
⑥ 状态寄存器:状态寄存器 SR只有位 0:PVU和位 1:RVU有效,这两位只能由硬件操作,软件操作不了。RVU:看门狗计数器重装载值更新,硬件置 1 表示重装载值的更新正在进行中,更新完毕之后由硬件清 0。PVU: 看门狗预分频值更新,硬件置’1’指示预分频值的更新正在进行中,当更新完成后,由硬件清 0。所以只有当 RVU/PVU等于 0 的时候才可以更新重装载寄存器/预分频寄存器。
STM32F767 的独立看门狗由内部专门的 32Khz 低速时钟( LSI) 驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的32Khz,而是在 17~47Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 32Khz 的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。
本节我们将通过STM32CubeMx来配置独立看门狗实现按键 KEY_UP 来喂狗,然后通过 DS0 提示复位状态的功能。
第一步 创建工程
打开STM32CubeMX软件,创建新工程。
选择自己所用的芯片
根据自己的硬件初始化对应的引脚。我们这里来初始化LED灯和按键的I/O。以备调试软件使用。(这一步还没涉及到独立看门狗配置)
配置完我们要用到的I/O后,开始步入正题配置独立看门狗。在③处配置所需的看门狗参数。(IWDG counter clock prescaler 设置是时钟预分频系数,IWDG down-counter reload value 配置的是重装载值)
因为本节选用的是外部时钟源,所以配置一下RCC。(前几节已讲过不再赘述)
配置时钟树。
设置工程名称、所用的软件编辑器和软件中堆栈的大小。
配置所调用的HAL后,点击③处生成软件工程。(到此STM32CubeMx软件的配置就完成了)
打开独立看门狗软件工程,在iwdg.c文件中我们可以看到独立看门狗的配置初始化、喂狗的时间计算公式以及喂狗函数,特别要注意的是这个分频系数IWDG_PRESCALER_64 = (4*2^prer) 得出prer为4。
编写实现按键 KEY_UP 来喂狗,然后通过 DS0 提示复位状态功能的软件逻辑
第二步 下载验证
将我们的工程编译完成后下载来验证是否完成我们本节的需求。(已完成功能的基本测试)
通过STM32CubeMX软件配置独立看门狗已经完成。这个功能实现起来相对简单,重点是了解独立看门的原理和运行机制这对我们软件的编写会有很大的帮助。好了,本节就到这里吧。
前言
**废话:**前面已经学习了CubeMx配置工程的相关用法,本节我们就来看看这所谓的看门狗可以溜着玩不。。。
独立看门狗简介
看门狗的原理: 单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗威廉希尔官方网站
就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号)。
看门狗寄存器的运行机制:
① 独立看门狗时钟源:一般由独立的RC振荡器LSI提供。
② 计数器时钟:递减计数器的时钟由LSI经过一个八位的预分频器得到,可以通过操作寄存器IWDG_PR来设置分频因子,分频因子的取值为:4、8、16、32、64、128、256。
计数器时钟CK_CNT= LSI/ 4*2^PRV(分频因子) ③ 计数器:独立看门狗的计数器是一个 12 位的递减计数器,最大值为 0XFFF,当计数器减到 0时,会产生一个复位信号:IWDG_RESET,让程序重新启动运行,如果在计数器减到 0 之前刷新了计数器的值的话,就不会产生复位信号,重新刷新计数器值的这个动作我们俗称喂狗。
④ 重装载寄存器:重装载寄存器是一个 12 位的寄存器,里面装着要刷新到计数器的值,这个值的大小决定着独立看门狗的溢出时间。
超时时间 Tout = (4*2^prv) / LSI * rlv (s) prv是预分频器寄存器的值,rlv是重装载寄存器的值。 ⑤ 键值寄存器: IWDG_KR 可以说是独立看门狗的一个控制寄存器,主要有三种控制方式,往这个寄存器写入下面三个不同的值有不同的效果。
⑥ 状态寄存器:状态寄存器 SR只有位 0:PVU和位 1:RVU有效,这两位只能由硬件操作,软件操作不了。RVU:看门狗计数器重装载值更新,硬件置 1 表示重装载值的更新正在进行中,更新完毕之后由硬件清 0。PVU: 看门狗预分频值更新,硬件置’1’指示预分频值的更新正在进行中,当更新完成后,由硬件清 0。所以只有当 RVU/PVU等于 0 的时候才可以更新重装载寄存器/预分频寄存器。
STM32F767 的独立看门狗由内部专门的 32Khz 低速时钟( LSI) 驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的32Khz,而是在 17~47Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 32Khz 的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。
本节我们将通过STM32CubeMx来配置独立看门狗实现按键 KEY_UP 来喂狗,然后通过 DS0 提示复位状态的功能。
第一步 创建工程
打开STM32CubeMX软件,创建新工程。
选择自己所用的芯片
根据自己的硬件初始化对应的引脚。我们这里来初始化LED灯和按键的I/O。以备调试软件使用。(这一步还没涉及到独立看门狗配置)
配置完我们要用到的I/O后,开始步入正题配置独立看门狗。在③处配置所需的看门狗参数。(IWDG counter clock prescaler 设置是时钟预分频系数,IWDG down-counter reload value 配置的是重装载值)
因为本节选用的是外部时钟源,所以配置一下RCC。(前几节已讲过不再赘述)
配置时钟树。
设置工程名称、所用的软件编辑器和软件中堆栈的大小。
配置所调用的HAL后,点击③处生成软件工程。(到此STM32CubeMx软件的配置就完成了)
打开独立看门狗软件工程,在iwdg.c文件中我们可以看到独立看门狗的配置初始化、喂狗的时间计算公式以及喂狗函数,特别要注意的是这个分频系数IWDG_PRESCALER_64 = (4*2^prer) 得出prer为4。
编写实现按键 KEY_UP 来喂狗,然后通过 DS0 提示复位状态功能的软件逻辑
第二步 下载验证
将我们的工程编译完成后下载来验证是否完成我们本节的需求。(已完成功能的基本测试)
通过STM32CubeMX软件配置独立看门狗已经完成。这个功能实现起来相对简单,重点是了解独立看门的原理和运行机制这对我们软件的编写会有很大的帮助。好了,本节就到这里吧。
举报