目录
一,STM32GubeMX基本配置
1,基础外设配置(可跳过)
2,时钟配置
3,配置定时器脉冲捕获配置
注意:PSC预分频器的取值会影响到检测频率的范围,PSC越小可以检测的频率就越大,但是相对的就不能检测小频率,计算频率和占空比公式如下
其中
CK_PSC:系统时钟 72000000
PSC :预分频寄存器的值 0~65535
ARR:定时器对应通道捕获的的值 0~65535
计算最大频率时设ARR = 1, 则 Hz(Max) = 72000000/PSC;
计算最小频率时设ARR = 65535, 则 Hz(Min) = 1098/PSC;(72000000/65535 = 1098)
由此可以确定不同PSC对应可以检测的频率范围
(1)Slave Mode(从模式配置):
Reset Mode(复位模式): 外部引脚有一个输入脉冲进来或者内部有一个脉冲进来定时器计数器归0重新计数(上升沿或者下降沿),触发的触发信号的来源由Trigger Source决定。
(2)Trigge Source(触发源选择):
TI2FP2:经过滤波之后的通道二的信号
虽然TIM输出的通道数目很多,但是能用来做PWM输入捕获的只有TI1FP1和TI2FP(STM32F4xx中文参考手册(456页)),所以我们的检测信号源只能是这两个其中的一个。
(3)CHannel(输入通道和输入模式选择):
如果触发源选择TI1FP1,那么由上图可知Channel1应该配置为Direct(直接输入模式),Channel2设置为Indrect(间接输入模式)。
总之,选择那个通道为Trigge Source(触发源选择) 那个就要配置为direct。而且间接输入的CCR计数值小于直接,通常用来做占空比的分子。
(4)Polarity Selection(触发方式):
上升沿和下降沿不影响占空比的相关配置,只要两个相反就可以了。
4,配置输入捕获中断
二,Kile5代码编写
TIM接口初始化
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);//使能两个接口
中断函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM3)
{
sprintf(LIN2," %dHZ ",1000000/(TIM3->CCR2 + 1));
sprintf(LIN3," %d%% ",(TIM3->CCR1 + 1)*100/(TIM3->CCR2 + 1));
}
}
三,原理分析
示例分析
STM32F4xx中文参考手册(456页)
上图是Channel1配置为上升沿触发,Channel2配置为下降沿触发的输入捕获原理图,当TI1产生第一个上升沿时Channel1被触发 CNT清0重新开始计数,当TI1为下降沿时Channel2被触发CCR2保存CNT的值 但是CNT不会清零 ,当TI1变为上升沿时CCR1被触发保存CNT的值。所以CCR2捕获的就是占空比,CCR1捕获的就是周期。
为什么下降沿没有触发CNT复位呢?查看手册可以发现控制触发方式由CCER寄存器的CC1P和CC1NP决定。
仿真查看寄存器CCER,发现代码配置默认为CC1NP/CC1P=0,
由上可知 程序默认CCNP/CC1P == 0, 所以TIxFP为上升沿触发