其实,EC11是个比较常用的一个编码器。
首先,不建议你使用STM8系列芯片做新产品开发了,可以考虑STM32c0、STM32F0这些系列,他们性价比更好。
其次,你现在基于外部中断方式针对编码脉冲进行计数、方向识别,也可以的,尤其系统功能不复杂时。
第三,针对你当前GPIO参数配置,两个都应该可以,最终还得结合你外部中断沿的选择综合考虑;如果要针对上下
沿进行捕获,选择_in_float_it. 如果只针对下沿捕获外部中断,选_pu_it更合适点,对消除抖动和干扰更有利。结合你
当前应用,到底针对什么沿产生外部中断一定要确认下来。从你ISR代码来看,上下沿触发外部中断都用到了。
第四,int8_t超过128时 会发生什么,变成负数了。如果不需要使用负数就定义成无符号数即可,即uint8_t。
第五,你贴出来的代码没看出有啥明显问题,程序逻辑靠你自己把握。
第六,ST MCU的高级或通用TIMER多支持编码器功能。比方你目前关注的STM8芯片的TIMER1是支持编码器接口的,不过
要使用它的话,你要稍微研究下这块内容。资料当然是STMCU的相应技术手册。
其实,EC11是个比较常用的一个编码器。
首先,不建议你使用STM8系列芯片做新产品开发了,可以考虑STM32c0、STM32F0这些系列,他们性价比更好。
其次,你现在基于外部中断方式针对编码脉冲进行计数、方向识别,也可以的,尤其系统功能不复杂时。
第三,针对你当前GPIO参数配置,两个都应该可以,最终还得结合你外部中断沿的选择综合考虑;如果要针对上下
沿进行捕获,选择_in_float_it. 如果只针对下沿捕获外部中断,选_pu_it更合适点,对消除抖动和干扰更有利。结合你
当前应用,到底针对什么沿产生外部中断一定要确认下来。从你ISR代码来看,上下沿触发外部中断都用到了。
第四,int8_t超过128时 会发生什么,变成负数了。如果不需要使用负数就定义成无符号数即可,即uint8_t。
第五,你贴出来的代码没看出有啥明显问题,程序逻辑靠你自己把握。
第六,ST MCU的高级或通用TIMER多支持编码器功能。比方你目前关注的STM8芯片的TIMER1是支持编码器接口的,不过
要使用它的话,你要稍微研究下这块内容。资料当然是STMCU的相应技术手册。
举报