STM32 HAL库自学记录-旋转编码器的使用
前言
通过本文可学会两种实现判断旋转编码器正转反转的方法,可根据自己的应用场景来选择使用哪种方法。
使用工具
1、芯片:STM32F103RCT6
2、STM32CubeMx软件
3、IDE: MDK-Keil软件
4、旋转编码器模块
5、XCOM V1.4串口软件
旋转编码器原理介绍
图中C端为GND。
方向:A相和B相相差一个相位,一般来说是90°。A相信号在前表示正转,B相信号在前表示反转。
上图是模块的原理图,实物图如下:
方法一 定时器中断方式(实质就是外部中断)
cubeMX配置:
首先是时钟配置,我这边是有外部时钟的,所以选择了使用外部时钟,具体配置如下图:
接下来选择自己要使用的引脚,外部中断和定时器输入捕获中断在这个实验中都是一个效果,偷懒就建一个工程吧。记得TIM4的combined channels要选择encoder mode,他就会默认使用了TIM4的channel1和channel2。记得选择NVIC把TIM4的中断打开。
我这个里面还配置了两个LED灯和一个PB5引脚,PB5引脚是为了连接旋转编码器的按键功能。此外还配置了一个串口,用来打印的。这里就不展开讲解了。
这边看下project manager的配置都没有问题的话就可以点击generate code来生成工程和代码了。
在主函数中添加:
HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_1);//开启输入捕获且捕获后进入中断
在main.c中添加中断服务函数,我这边添加的定时器中断服务函数,要是使用外部中断就添加外部中断服务函数即可。
void HAL_TIM_IC_CaptureCallback(</