stm32cubemx hal学习记录:TIMER输入捕获

一、实验功能描述

使用一个定时器输出一路PWM,然后使用另一个定时器测量出占空比可频率

二、参数配置

1、配置RCC、SYS、USART1、时钟84MHz

2、使用TIM2的CH1通道输出1kHz,占空比为40%的方波

stm32cubemx hal学习记录:TIMER输入捕获_第1张图片

 3、使用TIM3的CH1和CH2的输入捕获功能进行检测占空比和测量频率

stm32cubemx hal学习记录:TIMER输入捕获_第2张图片

stm32cubemx hal学习记录:TIMER输入捕获_第3张图片

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);

stm32cubemx hal学习记录:TIMER输入捕获_第4张图片

 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,结果正确

stm32cubemx hal学习记录:TIMER输入捕获_第5张图片

四、需要背的

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];

你可能感兴趣的:(stm32,stm32,学习,单片机)