STM32 TIM定时器,配置,详解(1)

计数器寄存器(TIMx_CNT)预分频器寄存器(TIMx_PSC)自动重载寄存器(TIMx_ARR)。

PSC预分频器,顾名思义,先预备一下分频,有时候频率过高,后面的定时器承受不住,就先用PSC先分频一下。如何分频的?将每接受到一次,PSC就跳动一次,当到了PSC的设置值的时候,再传递到下一个定时器。而PSC的范围计算是从0开始的,所以定时器时钟频率应该为Fosc/(PSC+ 1)。有点类似C的数组,a3是a0,a1,a2,但是psc3是psc0,psc1,psc2,psc3。所以PSC要+1。

举个例子,STM32F10x的总线时钟最大为是72MHz,如果此时我们想要一个1ms的中断,不去分频的话1/72us不好计算,如果我们进行分频(71+1)那么此时分频后频率为1MHz,周期就是1us,再进行1000个机器周期就得到我们想要的1ms。

定时器初始化结构体详解

cpp 复制代码
typedef struct
{
		uint16_t TIM_Prescaler;        // 预分频器
		uint16_t TIM_CounterMode;      // 计数模式
		uint32_t TIM_Period;           // 定时器周期
		uint16_t TIM_ClockDivision;    // 时钟分频
		uint8_t TIM_RepetitionCounter; // 重复计算器
} TIM_TimeBaseInitTypeDef;
  1. TIM_Prescaler: 设置预分频器
  2. TIM_CounterMode: 设置定时器计数模式,有向上计数,向下计数以及三种中心对齐模式,基本定时器只能是向上计数,即 TIMx_CNT只能从 0开始递增,并且无需初始化。
  3. TIM_Period: 定时器周期,自动重载寄存器,实际就是设定自动重载寄存器的值,在事件生成时更新到影子寄存器。可设置范围为 0至 65535。
  4. TIM_ClockDivision: 时钟分频,设置定时器时钟 CK_INT 频率与数字滤波器采样时钟频率分频比,基本定时器没有此功能,不用设置。
  5. TIM_RepetitionCounter: 重复计数器,属于高级控制寄存器专用寄存器位,利用它可以非常容易控制输出 PWM 的个数。

使用定时器之前必须开启定时器时钟,基本定时器属于 APB1总线外设。 APB1总线外设时钟=72MHz。设置自动重装载寄存器 arr 的值为9999,设置时钟预分频器寄存器psc的值为7199,则驱动计数器的时钟:CK_CNT = APB1Periph/ (7199+1)=72MHz/7200=10KHz,计数器计数一次的时间等于:1/CK_CNT=0.0001s,当计数器从0计数到9999时,产生一次中断,则中断一次的时间为:0.0001*10000=1s

cpp 复制代码
void TIM2_Configuration(){
	
	//初始化结构体
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	
	//1.分配时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	
	//2.初始化定时器相关配置
	TIM_TimeBaseStructure.TIM_Period = 7199;
	TIM_TimeBaseStructure.TIM_Prescaler = 9999;
	
	/*一般设置为TIM_CKD_DIV1,不分频*/
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
	
	//3.打开定时器
	TIM_Cmd(TIM2,ENABLE);
}
相关推荐
andrsted2 小时前
用练题簿小程序 - 让错题不再白错
学习·微信小程序·小程序·学习方法
2601_949950632 小时前
练题簿,把培训从“走过场”变成“真落地”
人工智能·学习·小程序·刷题·小程序推荐
北域码匠5 小时前
高通滤波算法深度解析(High-Pass Filter)
stm32·算法·c#·数字信号处理·嵌入式开发·滤波算法·高通滤波
南棱笑笑生5 小时前
20260904实测给飞凌OK3576-C开发板刷入Rockchip原厂的IMG固件【使用飞凌的DTS】切换串口波特率为1.5Mbps
c语言·开发语言·rockchip
问天_观心5 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
指掀涛澜天下惊5 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
star learning white6 小时前
STM32入门学习5
stm32·嵌入式硬件·学习
传奇开心果编程6 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
新晨单片机设计6 小时前
S006A-基于STM32单片机温湿度检测系统【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus
lifallen6 小时前
Skill 的生命周期:问题消失以后
人工智能·学习·ai·ai编程