我是靠谱客的博主 自然水壶,最近开发中收集的这篇文章主要介绍stm32cubemx hal学习记录:TIMER输入捕获一、实验功能描述二、参数配置三、代码编写四、需要背的,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
一、实验功能描述
使用一个定时器输出一路PWM,然后使用另一个定时器测量出占空比可频率
二、参数配置
1、配置RCC、SYS、USART1、时钟84MHz
2、使用TIM2的CH1通道输出1kHz,占空比为40%的方波
3、使用TIM3的CH1和CH2的输入捕获功能进行检测占空比和测量频率
Counter Setting:
Prescaler(时钟预分频数):84-1 最大捕获频率84MHz/(83+1) = 1MHz
Counter Period(自动重装载值):65535,设置为最大值,若为32位则设置为4294967295
Input Capture Channel1:
Polarity Selection:Rising Edge(上升沿捕获)
Input Capture Channel2:
Polarity Selection:Failing Edge(下降沿捕获)
三、代码编写
1、TIM2输出一路PWM
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,40);
2、在TIM3代码处启动TIM3 IC
HAL_TIM_IC_Start(&htim3,TIM_CHANNEL_1);
HAL_TIM_IC_Start(&htim3,TIM_CHANNEL_2);
3、编写输入捕获函数
void TIM3_GetCapture(uint16_t *pucBuf)
{
pucBuf[0]=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_1)+1;
pucBuf[1]=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2)+1;
}
4、在main中定义变量和调用函数
uint16_t ucCapt[2];
uint16_t Freq;
uint16_t Duty;
while (1)
{
TIM3_GetCapture(ucCapt);
Freq=1000000/ucCapt[0];
Duty=ucCapt[1]*100/ucCapt[0];
}
5、进行debug,结果正确
四、需要背的
1、输入捕获初始化
HAL_TIM_IC_Start(&htim3,TIM_CHANNEL_1);
HAL_TIM_IC_Start(&htim3,TIM_CHANNEL_2);
2、输入捕获函数
void TIM3_GetCapture(uint16_t *pucBuf)
{
pucBuf[0]=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_1)+1;
pucBuf[1]=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2)+1;
}
3、频率与占空比计算公式
Freq=1000000/ucCapt[0];
Duty=ucCapt[1]*100/ucCapt[0];
最后
以上就是自然水壶为你收集整理的stm32cubemx hal学习记录:TIMER输入捕获一、实验功能描述二、参数配置三、代码编写四、需要背的的全部内容,希望文章能够帮你解决stm32cubemx hal学习记录:TIMER输入捕获一、实验功能描述二、参数配置三、代码编写四、需要背的所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复