28

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

 4 years ago
source link: https://blog.csdn.net/m0_38106923/article/details/104066285
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

目录

1、基本、通用类型定时器

之前分享了 STM32 GPIO的原理、特性、选型和配置如何计算RTC时钟异步预分频和同步预分频 ,这次简要阐述STM32L011微控制器定时器的参数配置(其他型号大同小异,本文侧重讲解配置,至于各类定时器的特点后续再述),STM32定时器种类繁多有通用定时器、基本定时器、独立看门狗定时器、窗口看门狗定时器等。

1、基本、通用类型定时器

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

  • 计数器寄存器:有递增计数、递减计数或同时递增和递减计数三类,计数器的时钟可通过预分频器进行分频;

  • 预分频器寄存器:可对计数器时钟频率进行分频,分频系数介于 1 和 65536 之间(这里指STM32L011);

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

假设计数器寄存器数值为0xFC,采用2预分频,当使能计数器后,定时器时钟开始按照定时效果运行(定时由计数器寄存器和预分频器寄存器共同决定),计数器从0x00计数到0xFC后会产生中断,并更新时间开始新一轮的计数,从0x00计数到0xFC时间的长短由预分频控制寄存器决定,时序图如下所示:

FZRR7rM.png!web

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

quQjmmR.png!web

由于1HZ是1秒/次的频率,63492HZ就是,计数器从0x00计数到0xFC,定时周期为63492秒,使用STM32CuBeMX配置如下所示:

YFru637.png!web

假设计数器寄存器数值为0xFC,采用4预分频, 时序图如下所示:

VzINnqj.png!web

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

jmQJfe6.png!web

计数器从0x00计数到0xFC,定时周期为31746秒,使用STM32CuBeMX配置如下所示:

UVFfEz6.png!web

2、独立看门狗定时器

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

IrUniai.png!web

独立看门狗定时器有三种关键寄存器:窗口寄存器、预分频器寄存器和重载寄存器,具体说明如下所示:

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

  • 预分频器寄存器:可对计数器时钟频率进行分频,分频系数最大为256(这里指STM32L011);

  • 重载寄存器:当计数器计数到终值 (0x000) 时会产生一个复位信号,计数器寄存器将装载重新计数。

独立看门狗定时器时钟由LSI振荡器提供,STM32L011中LSI频率为37KHZ,看门狗定义周期时间的方式和基本、通用类型可编程定时器完全一致,假设定义1秒周期的看门狗定时器,超过1秒不喂狗就进行系统复位,计算方式如下所示:

Y7rQVb2.png!web

当然由于LSI振荡器精度有限,在运行过程中会存在一定误差,使用STM32CuBeMX配置如下所示:

IbAVbqE.png!web

3、窗口看门狗定时器

窗口看门狗定时器是可编程的自由运行递减计数器,窗口看门狗激活后当递减计数器值小于 0x40(从 0x40 递减到 0x3F) 时复位,在窗口阈值之外重载递减计数器时也会复位,只有在0x40~窗口阈值之间喂狗系统才可以正常运行,窗口定时器时序图如下所示:

FFzIfmM.png!web

时序图解析如下所示:

  • T[6:0]:7 位计数器,用来存储看门狗计数器的值,它每隔 bmMR3iF.png!web PCLK 个周期递减一次,当它从 0x40 递减到 0x3F(T6 清零)时会产生复位;

  • WDGTB[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[6:0]:7 位窗口值,用于与递减计数器进行比较的窗口值,超过窗口阈值系统会复位;

  • 当递减计数器值从 0x40 递减到 0x3F时系统会复位;

  • 0x40~W[6:0]之间可以刷新喂狗,确保系统正常运行。

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

N7RvYjj.png!web

STM32L011中窗口看门狗定时器基于APB1频率,假设APB1 频率等于 32 MHZ,定义65毫秒周期的窗口看门狗定时器,计算方式如下所示:

AnaQzi7.png!web

使用STM32CuBeMX配置如下所示:

eQjQZbb.png!web

26FFFf7.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK