STM32 cubemx 定时器 编码器驱动
代码地址
- cubemx 配置
1.创建项目 - 配置RCC
- 配置时钟树
- 配置定时器
一个定时器只能够接入一组编码器,
配置定时器为编码器模式,编码器模式为:TI1 TI2 均触发,
分频系数–>编码器模式为TI1 TI2均触发,即上升沿和下降沿均计数,一次触发增加4个计数,因此Prescaler = 4-1
计数周期–>可根据编码器线束决定,计数数值会溢出.
启动编码器溢出中断
编码器计数器值存在溢出现象,因此可以通过定时器全局中断捕获,进而增加数据范围,
设置中断嵌套
启动编码器检测,启动定时器中断
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
HAL_TIM_Base_Start_IT(&htim3);
获取编码器旋转数据
enc1 = (uint32_t)(__HAL_TIM_GET_COUNTER(&htim3));
printf("encode = %d! \r\n",enc1);
设置计数数据初始值
__HAL_TIM_SetCounter(&htim3,0);
添加编码器溢出中断回调
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM3)
{
printf("encode overflow! \r\n");
}
}
获取编码器转向
int32_t uwDirection; 正传 > 0 反转 < 0
uwDirection = (int32_t)__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3);