我是靠谱客的博主 自然水壶,最近开发中收集的这篇文章主要介绍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输入捕获一、实验功能描述二、参数配置三、代码编写四、需要背的所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部