目录
1.三种定时器的区别
2.通用定时器的特点描述
3.计数器模式
4.通用定时器工作过程
5.计数器时钟计算方法、
5.1定时器的输入时钟频率 - TimeClockFren
5.2计数器时钟计算方法
6.定时器相关寄存器
7.定时器库函数结构体
8.通用定时器函数
9.定时器中断配置过程
10.项目实战 - 通用定时器中断闪烁灯
STM32F1xxx系列总共有8个定时器:分别是2个高级定时器 + 4个通用定时器 + 2个基本定时器。
STM32通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获),或者产生输入波形(输出比较和PWM)等。
定时器的预分频器和RCC时钟控制预分频器,脉冲长度和波形周期可以在us到ms之间调整,每个通用定时器都是完全独立,没有互相共享任何内存。
除非APB1分频系数为1,否则通用定时器时钟为APB1的两倍.
举例:
AHB = 72M
APB1 = 36M(分频系数为2)
通用定时器时钟为 36 * 2 = 72M
TimeOut = ((Prescaler + 1) * (Period + 1) ) / TimeClockFren;
例如:
Tout = 1s = 10 000 (9999 + 1)*7200(分频系数 7199+1)/72M(72000 000)
typedef struct
{uint16_t TIM_Prescaler; //分割TIM时钟的预分频值。uint16_t TIM_CounterMode; //设置计数模式uint16_t TIM_Period; //自动重装载值uint16_t TIM_ClockDivision; //时钟分频 uint8_t TIM_RepetitionCounter; //高级定时器使用
} TIM_TimeBaseInitTypeDef;
//定时器初始化
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
//定时器使能
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
//定时器状态标志位
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
//定时器清除标志位
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
//定时器中断标志位
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
//定时器清除中断标志位
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);
定时器配置LED每秒闪烁一次
Tout = [自动重装载值(ARR+1)* 分频系数(PSC+1)]/Tclk(分频器时钟)
Tout = 10 000 (9999 + 1)*7200(分频系数 7199+1)/72M(72000 000)
9-通用定时器中断闪烁灯 · 宋小康/stm32f103c8t6 - 码云 - 开源中国 (gitee.com)
上一篇:Oracle Dataguard(主库为 Oracle rac 集群)配置教程(03)—— 创建 dataguard 数据库之前的准备工作
下一篇:文献阅读笔记 # CodeBERT: A Pre-Trained Model for Programming and Natural Languages