stm32定时器笔记

一、时基配置

定时器时基配置主要是配置定时器周期,即分频系数和自动重载寄存器。
比如现在我需要配置一个100us的定时周期,那么我需要先选择定时器,然后确定它的时钟频率,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。
下面以定时器2的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作用,
定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)
时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。
假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值;当预
分频系数=1时,APB1=36MHz,TIM2的时钟频率=36MHz(倍频器不起作用);当预分频系数=2时,
APB1=18MHz,在倍频器的作用下,TIM2的时钟频率=36MHz。

定时器定时周期计算:

公式:T=(arr+1)*(PSC+1)/Tck 其中TCK为时钟频率,PSC为时钟预分频系数,arr为自动重装载值。
要配置100us周期,我需要设置TIM_Prescaler预分频器的值为36-1,这样可以得到1us的周期,再设置TIM_Period重载寄存器的值为100-1,这样就得到100us的定时器周期。-1是因为定时器是从0开始或结束的。
最后配置向上计数或向下计数。

 TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;
 TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
 TIM_TimeBaseStructure.TIM_Period = 100-1;
 TIM_TimeBaseStructure.TIM_Prescaler = 84-1;
 TIM_TimeBaseStructure.TIM_ClockDivision = 0;
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

二、捕获/比较通道配置

定时器捕获比较模式说明:

TIM_OCInitTypeDef 结构体是用于配置定时器的输出比较模式的参数,与 TIM_OCxInit 函数配合使用,可以实现 PWM 波形、脉冲宽度调节、频率调节等功能。
TIM_OCInitTypeDef 结构体包含以下成员:

TIM_OCMode:输出比较模式,可以选择 8 种不同的模式,如 TIM_OCMode_Timing、TIM_OCMode_PWM1、TIM_OCMode_PWM2 等。不同的模式决定了输出信号的波形和极性。
TIM_OutputState:输出比较使能,可以选择是否将输出信号通过外部引脚输出,如 TIM_OutputState_Enable 或 TIM_OutputState_Disable。
TIM_OutputNState:互补输出比较使能,只适用于高级定时器,可以选择是否将互补输出信号通过外部引脚输出,如 TIM_OutputNState_Enable 或 TIM_OutputNState_Disable。
TIM_Pulse:输出比较脉冲宽度,可以设置比较寄存器 CCRx 的值,决定了输出信号的占空比或脉冲宽度。
TIM_OCPolarity:输出比较极性,可以选择输出信号的有效电平是高电平还是低电平,如 TIM_OCPolarity_High 或 TIM_OCPolarity_Low。
TIM_OCNPolarity:互补输出比较极性,只适用于高级定时器,可以选择互补输出信号的有效电平是高电平还是低电平,如 TIM_OCNPolarity_High 或 TIM_OCNPolarity_Low。
TIM_OCIdleState:空闲状态下的输出比较状态,只适用于高级定时器,可以选择在空闲状态下(即 BDTR_MOE 位为 0)经过死区时间后的输出信号是高电平还是低电平,如 TIM_OCIdleState_Set 或 TIM_OCIdleState_Reset。
TIM_OCNIdleState:空闲状态下的互补输出比较状态,只适用于高级定时器,可以选择在空闲状态下(即 BDTR_MOE 位为 0)经过死区时间后的互补输出信号是高电平还是低电平,如 TIM_OCNIdleState_Set 或 TIM_OCNIdleState_Reset。

以通用定时器为例,具有四个捕获/比较通道,每个通道可以设置不同的占空比

TIM_OCStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCStructure.TIM_Pulse = Main_Time*0.5;
TIM_OC1Init(TIM9,&TIM_OCStructure); 

三、中断优先级配置

中断优先组:以stm32为例,可设置5组中断分组,分别是0~4,其中根据组别不同分别对应有
0,1,2,3,4个抢占优先级
4,3,2,1,0个响应优先级
抢占优先级:若A比B高,B正在执行时,当A发生中断,停止B,A立刻响应执行
响应优先级:若A比B高,C正在执行时,当C执行完后,A开始执行。

四、开启中断与定时器相关函数

TIM_ITConfig(TIM2,TIM_FLAG_Update,ENABLE);//中断使能
TIM_Cmd(TIM2, ENABLE);//定时器使能

链接:

stm32精确输出脉冲个数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值