如何计算STM32定时器、独立看门狗和窗口看门狗

2020-03-05 投稿人 : www.gay9991.cn 围观 : 626 次

目录

1,基本,通用定时器

2,独立看门狗定时器

3,窗口看门狗定时器?

之前分享了STM32 GPIO的原理、特点、选型和配置,以及如何计算RTC时钟的异步预分频器和同步预分频器。这一次,简单介绍了STM32L011单片机定时器的参数配置(其他型号相同,本文重点介绍其配置,各种定时器的特点将在后面介绍)。STM32定时器有多种类型,包括通用定时器、基本定时器、独立看门狗定时器、窗口看门狗定时器等。

1,基本,通用定时器

STM32基本和通用可编程定时器主要由一个16位及其相关的自动重载寄存器组成。配置基本定时器和通用定时器时,有三个关键寄存器:计数器寄存器、预分频器寄存器和自动重载寄存器。具体说明如下:

计数器寄存器:有三种同时向上计数、向下计数或向上向下计数。计数器时钟可以被预分频器分频。

预分频器寄存器:它可以将计数器的时钟频率除以1到之间的一个因子(STM32L 011);这里);

自动重新加载寄存器:当计数器达到上溢值(或递减计数时达到下溢值)时,将发送更新事件,计数器寄存器将加载重新计数。

假设计数器寄存器值为0xFC,并被2预除。计数器使能时,定时器时钟开始根据时序效应运行(时序由计数器寄存器和预分频寄存器共同决定)。当计数器从0x00计数到0xFC时,将产生一个中断,并在更新时开始新一轮计数。0x00至0xFC的时间由预分频控制寄存器决定。时序图如下:

?计数器寄存器的值为0xFC(十进制:252),使用2个预分频器的时序周期计算如下(假设时钟频率为32MHZ):

因为1HZ是1秒/时间的频率,HZ表示计数器从0x00计数到0xFC,时序周期为秒。使用STM32CuBeMX的配置如下:

假设计数器寄存器值为0xFC,使用4个预分频器?时序图如下:

计数器寄存器值为0xFC(十进制:252),使用2个预分频器的时序周期计算如下(假设时钟频率为32MHZ):

计数器从0x00至0xFC计数,时序周期为秒。使用STM32CuBeMX的配置如下:

2,独立看门狗定时器

独立看门狗定时器激活后,计数器开始从复位值0xFFF开始递减计数(可通过窗口寄存器修改)。当计数器计数到最终值(0x000)时,将产生一个复位信号。减量期间将键值0x0000 AAAA写入密钥寄存器时,计数器将过载,从而避免看门狗复位。独立看门狗的框图如下:

?独立看门狗定时器有三个关键寄存器:窗口寄存器、预分频器寄存器和过载寄存器。具体指令如下:

窗口寄存器:默认值为0x0000 0FFF(十进制:4095)。当计数器值大于窗口寄存器中存储的值时,如果执行过载操作,将产生复位。

预分频器寄存器:它可以将计数器的时钟频率除以最大值256(STM32L 011);这里);

reload寄存器:当计数器计数到最终值(0x000)时,将产生一个复位信号,计数器寄存器将被加载以进行重新计数。

独立的看门狗定时器时钟由大规模集成电路振荡器提供。STM32L011中的大规模集成电路频率为37千赫。看门狗以与基本和通用可编程定时器完全相同的方式定义周期时间。假设定义了一个1秒周期的看门狗定时器,系统将在不喂狗超过1秒的情况下复位。计算方法如下:

?当然,由于大规模集成电路振荡器的精度有限,在操作过程中会有一定的误差。使用STM32CuBeMX的配置如下:

3,窗口看门狗定时器?

窗口看门狗定时器是一个可编程的自由运行计数器。窗口看门狗激活后,当递减计数器值小于0x40(从0x40到0x3F)时,它将复位,当递减计数器重新加载到窗口阈值之外时,它将复位。喂狗系统只能在0x40和窗口阈值之间正常工作。窗口定时器时序图如下:

时序图分析如下:

[6:0):用于存储看门狗计数器值的7位计数器。它每个PCLK周期递减一次,并在从0x40递减到0x3F时复位(T6清零)。

WGTB[1:0]:定时器时基,有4种方式修改预分频器的时基:00: CK计数器时钟(PCLK div 4096)分频器1,01: CK计数器时钟(PCLK div 4096)分频器2,10: CK计数器时钟(PCLK div 4096)分频器4和11: CK计数器时钟(PCLK div 4096)分频器8;

W []:用于与向下计数器进行比较的7位窗口值。如果窗口值超过窗口阈值,系统将重置。

当递减计数器值从0x40减少到0x3F时,系统将复位;

0x40 ~ W []可以刷新和喂狗,以确保系统的正常运行。

窗口定时器超时值的计算公式如下:

STM32L011窗口看门狗定时器基于APB1频率,假设APB1频率等于32兆赫,并定义一个65毫秒周期的窗口看门狗定时器。计算方法如下:

?使用STM32CuBeMX进行如下配置: