STM32_EC11旋转编码器(定时器Encoder模式)
1.硬件
硬件:STM32f103c8t6、EC11旋转编码器
硬件连接:EC11与STM32f103c8t6用杜邦线按照下表进行连接,按键未用,故未接。
2.软件
CubeMX配置:
1.打开TIM2的Encoder模式。
2.配置定时器参数。
备注:polarity -> rising edge 检测到上升沿的时候就触发encoder捕获AB相的值,捕获到A、B任意上升沿\下降沿 ,都计数。
代码编写:
1.开启编码器计数。
HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL); //启动计数
2.调用 __HAL_TIM_IS_TIM_COUNTING_DOWN 可获得旋转方向,0正1负。
val = (uint32_t)(__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim2)); //获取方向
3.调用 __HAL_TIM_GET_COUNTER 获取计数值,即编码器的脉冲数。
enc = (uint32_t)(__HAL_TIM_GET_COUNTER(&htim2)); //获取计数值
4.考虑到编码器用来做输入,系统功能函数多了,放在while循环里面实时性不高,这里利用stm32f103的滴答定时器,将检查函数放在SysTick_Handler() 中断服务函数中,实现每隔1ms扫描一次编码器。
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */
/* USER CODE END SysTick_IRQn 0 */
HAL_IncTick();
/* USER CODE BEGIN SysTick_IRQn 1 */
enc = (uint32_t)(__HAL_TIM_GET_COUNTER(&htim2)); //获取计数值
val = (uint32_t)(__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim2)); //获取方向
/* USER CODE END SysTick_IRQn 1 */
}
**项目代码地址:**https://download.csdn.net/download/qq_42673988/19101506?spm=1001.2014.3001.5501
运行效果: