定时器
- 定时器
-
- [5.1 独立看门狗定时器](#5.1 独立看门狗定时器)
- [5.2 窗口看门狗](#5.2 窗口看门狗)
- [5.3 通用定时器](#5.3 通用定时器)
- 计数器的时钟频率与内部时钟的关系:
-
- 示例
-
- [例1 定时器中断](#例1 定时器中断)
- [例2 PWM输出控制LED渐明渐暗](#例2 PWM输出控制LED渐明渐暗)
- [例 3 引脚电平输入捕获](#例 3 引脚电平输入捕获)
- 输入捕获的一般配置步骤:
定时器
5.1 独立看门狗定时器
描述:
独立看门狗的寄存器:
独立看门狗的配置步骤:
![](https://file.jishuzhan.net/article/1692199665593749505/c6469db475874256ad62641f4d08fbb9.png)
看门狗计时时间的计算:
![](https://file.jishuzhan.net/article/1692199665593749505/8290b1fdda244d18acf1cdf463f4f89a.png)
使用的库函数:
在1秒内按键喂狗,否则复位。初始化时LED为灭,while中点亮,如果复位则灯闪烁,喂狗后灯一直亮。
Iwdog.h文件(条件编译在预编译时实现)
Iwdog.c文件
主函数:
5.2 窗口看门狗
计数值递减,B段是窗口,
<1>当计数值递减在A段时喂狗,会产生复位信号;
<2>当计数值由0x40h减1到了0X3Fh时(T6位变为0)还没有喂狗,会产生喂狗信号。
看门狗有什么作用?
![](https://file.jishuzhan.net/article/1692199665593749505/b1cd2bdbd6d946b3a23e7baf9b856457.png)
窗口看门狗超时时间计算:
![](https://file.jishuzhan.net/article/1692199665593749505/9502ac3f33ee4012a334194f43a54b4b.png)
窗口看门狗的配置过程:
![](https://file.jishuzhan.net/article/1692199665593749505/ba62ce761ddd4a878b8d9c93e9d9e57b.png)
设置窗口值时,窗口值是7位,所以存在8位值->7位的变换,使用&运算。(黄色标记部分)
主函数:
5.3 通用定时器
三种定时器:
![](https://file.jishuzhan.net/article/1692199665593749505/3824a18b7c2d411ba1066f3636a17daa.png)
定时器的时钟来源:
定时器的时钟默认选择的是系统内部时钟,内部时钟的选择:
计数器的时钟频率与内部时钟的关系:
预分频寄存器:
具体的定时器结构和工作过程可以参看《stm32中文参考手册》
示例
例1 定时器中断
要求:每500ms中断一次,中断服务函数控制LED状态取反,实现LED灯闪烁。
定时器参数初始化的库函数:
定时器中断实现步骤:
![](https://file.jishuzhan.net/article/1692199665593749505/2523d0375f56479e84d16a2f56a0f0c5.png)
定时器参数计算:
![](https://file.jishuzhan.net/article/1692199665593749505/bbe0e5d3e9ee457db7fb48f47475d033.png)
根据要求,Tout=500ms,由于系统的时钟频率为72MHz,如果设置APB1的频率是AHB的2分频,即36MHz,此时就要考虑APB1的分频系数了,
<1>分频系数为1,即不分频,则输出的CK_PSC=36MHZ,即Tclk=36MHz;
<2>分频系数为2或其他值,则CK_PSC=APB12,即,Tclk=APB1 2。
由于系统函数程序中默认的是APB1=36MHz,次处设置APB1的分频系数是2,所以根据前面的介绍得出,Tclk=72MHz。ARR和PSC的值只要不超出16位二进制数转十进制数的值的范围,合理即可,当然方便理解和计算最好。
timer.c文件
定时器初始化函数
定时器中断服务函数:
主函数:
例2 PWM输出控制LED渐明渐暗
![](https://file.jishuzhan.net/article/1692199665593749505/1717fd99d4ae43fcadb6ebc8847e2776.png)
PWM输出是通过定时器TIMER中的设定值与计时值比较大小输出不同的电平。
工作过程:
![](https://file.jishuzhan.net/article/1692199665593749505/a71e373e36504d71a9b90827444dc6e5.png)
PWM模式1和PWM模式2的区别:
![](https://file.jishuzhan.net/article/1692199665593749505/8135fb56e83744afaadfa1b9c71a0719.png)
PWM模式:
![](https://file.jishuzhan.net/article/1692199665593749505/6b0d880c309f412b9940d9e0af61f080.png)
自动重转载寄存器:
PWM输出的库函数:
PWM输出的配置步骤:
![](https://file.jishuzhan.net/article/1692199665593749505/471b92c887804fcc9d98479dec6562d3.png)
示例程序:
如果使用的是高级定时器的话,必须使能这个:
例 3 引脚电平输入捕获
以通道1为例,介绍输入捕获的工作原理:
由上面的框图,分解介绍
<1>设置输入捕获滤波器:
TIMx_CR1->CKD:
捕获/比较模式寄存器TIMx_CCMR->IC1F设置采样的频率:
<2>设置输入捕获极性:
<3>设置输入捕获映射通道(通道1为例):
上面说到的映射到TI1和TI2上,如下图所示:
<4>设置输入捕获分频寄存器:
<5>捕捉到有效信号后使能中断
输入捕获相关库函数:
通道极性设置独立函数:
获取通道捕获值:
输入捕获的一般配置步骤:
![](https://file.jishuzhan.net/article/1692199665593749505/7c7644aba84e4d08aedf036f7beb80b1.png)
使用PA0和TIM5的通道1
代码:
将结构体定义在了程序外,其它初始化与之前的类似。
定义了两个变量记录输入
中断服务函数:
主函数: