TIM-输入捕获之编码器模式
输入捕获(Input Capture)是一种通过定时器记录输入引脚信号到达时刻的功能,常用于测量外部信号的频率、周期、脉宽等。
采集的精度是4,这里倍频选择4-1

主程序
/* USER CODE BEGIN 2 */
HAL_TIM_Encoder_Start(&htim3,TIM_CHANNEL_ALL);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
encoder_cnt = __HAL_TIM_GET_COUNTER(&htim3);
//检测编码器是否移动
if(encoder_cnt != encoder_last)
{
encoder_static = 0;
no_move_time = HAL_GetTick();
int16_t diff = encoder_cnt - encoder_last;
if(__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3))
printf("逆时针运动:%d,当前位置%d\r\n",diff,encoder_cnt);
else
printf("顺时针运动:%d,当前位置%d\r\n",diff,encoder_cnt);
}
else
{
//超过两秒静止
if(HAL_GetTick() - no_move_time > 2000 && encoder_static == 0)
{
encoder_static = 1;
printf("当前编码器静止2秒,当前位置:%d\r\n",encoder_cnt);
}
}
if(HAL_GPIO_ReadPin(GPIOA,EC11_SW_Pin) == GPIO_PIN_RESET)
{
HAL_Delay(20);
if(HAL_GPIO_ReadPin(GPIOA,EC11_SW_Pin) == GPIO_PIN_RESET)
{
printf("SW按钮被按下\r\n");
while(HAL_GPIO_ReadPin(GPIOA,EC11_SW_Pin) == GPIO_PIN_RESET);
}
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}