你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

新手,STM8S标准库外部中断方式连接EC11的问题

[复制链接]
mchoi 提问时间:2023-12-26 14:02 / 未解决

新手,想用STM8S103F3P6连接EC11,记录左右旋转计数。编码器A、B脚分别连接PC3、PC4脚。

代码如下,网上STM8连接EC11资料没有,新手想学**难了。

请大师帮我看看下面几个问题:

1、假如PC3、PC4脚电路中拉高,那么GPIO初始化参数应该是GPIO_MODE_IN_FL_IT 还是 GPIO_MODE_IN_PU_IT ?

2、int8_t 类型,如果计数超过128了,会发生什么?

3、代码帮我看看,有啥问题没有,多谢多谢!

1.JPG

收藏 评论12 发布时间:2023-12-26 14:02

举报

12个回答
xmshao 回答时间:2023-12-27 10:27:39
其实,EC11是个比较常用的一个编码器。


首先,不建议你使用STM8系列芯片做新产品开发了,可以考虑STM32c0、STM32F0这些系列,他们性价比更好。


其次,你现在基于外部中断方式针对编码脉冲进行计数、方向识别,也可以的,尤其系统功能不复杂时。


第三,针对你当前GPIO参数配置,两个都应该可以,最终还得结合你外部中断沿的选择综合考虑;如果要针对上下
沿进行捕获,选择_in_float_it. 如果只针对下沿捕获外部中断,选_pu_it更合适点,对消除抖动和干扰更有利。结合你
当前应用,到底针对什么沿产生外部中断一定要确认下来。从你ISR代码来看,上下沿触发外部中断都用到了。


第四,int8_t超过128时 会发生什么,变成负数了。如果不需要使用负数就定义成无符号数即可,即uint8_t。


第五,你贴出来的代码没看出有啥明显问题,程序逻辑靠你自己把握。


第六,ST MCU的高级或通用TIMER多支持编码器功能。比方你目前关注的STM8芯片的TIMER1是支持编码器接口的,不过


要使用它的话,你要稍微研究下这块内容。资料当然是STMCU的相应技术手册。
butterflyspring 回答时间:2023-12-27 09:44:41
mchoi 发表于 2023-12-26 16:17
[md]多谢回复,

1)8位也好16位也好总会溢出,我是想知道溢出时会怎么样?16位的超过65535时会怎么样?

1. 通常溢出(超出0xff 或0xffff)后从0 开始。 这一点你可以简单调试一下就出来了。
2. TIMER1就是定时器1. 产品的详细功能描述要看厂家的参考手册 RM0016

如果你是想做产品,最好选用STM32C0XXX系列, 功能强大,价格也几乎一样,生态系统完善。
mchoi 回答时间:2023-12-26 14:23:25
大师帮我看看谢谢
mchoi 回答时间:2023-12-26 14:24:30

这论坛编辑器用着不习惯~~~~代码怎么复制粘贴?

butterflyspring 回答时间:2023-12-26 14:43:26
网上找到一个资料,可以参考。认识EC11旋转编码器&编写驱动程序 - 简书 (jianshu.com)
另外STM8有16位的寄存器,定义成16位的变量不是问题。
而且定时器timer1也有硬件编码器功能。

STM8S EC11 encoder.PNG
mchoi 回答时间:2023-12-26 16:17:14

butterflyspring 发表于 2023-12-26 14:43
网上找到一个资料,可以参考。认识EC11旋转编码器&编写驱动程序 - 简书 (jianshu.com)
另外STM8有16位的寄 ...

多谢回复,

1)8位也好16位也好总会溢出,我是想知道溢出时会怎么样?16位的超过65535时会怎么样?

2)TIMER1是什么?是定时器吗?您是怎么知道TIMER1有硬件编码器功能的呢? 请问了解这种有用信息的正规渠道是什么?

作为一个新手,我如何能知道TIMER1有硬件编码器功能?

mchoi 回答时间:2023-12-27 10:21:14

butterflyspring 发表于 2023-12-27 09:44</p>
<ol>
<li>通常溢出(超出0xff 或0xffff)后从0 开始。 这一点你可以简单调试一下就出来了。</li>
<li>TIMER1就是定时 ...

多谢大师热心回复~

mchoi 回答时间:2023-12-27 18:45:37
多谢大师细心回复~

偶然的机会用了一次STM8S103F3P6的I2S,了解的单片机只有STM8S~

我是业余爱好,目前想用单片机连接EC11、OLED、还有几个硬件的控制,确实感觉STM8针脚不够用,回头一定学习STM32,哈哈


另外,上述代码我打算只用下降沿外部中断,下面这样设置没错吧?

EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);

您说的ISR代码中上下沿都用了,,没有吧,我打算A下降沿中断,然后读取B脚状态判断,高电平是右转、低电平是左转,没用上升沿中断吧??
mchoi 回答时间:2023-12-28 11:02:24

xmshao 发表于 2023-12-27 10:27
其实,EC11是个比较常用的一个编码器。</p>
<p>

大师我再请教个问题,

我大概找了一下TIM1编码器模式代码,我怎么没觉得比外部中断方式的代码少啊,,

请问使用TIM1编码器模式有什么优点?????

mchoi 回答时间:2023-12-28 12:18:15

请教各位大师,

STM8的标准库资料里没有TIM1编码器模式例子,百度也没有,

请问使用TIM1编码器模式有什么优点??我如何学习TIM1编码器模式?

xmshao 回答时间:2024-1-1 17:00:41

mchoi 发表于 2023-12-27 18:45
多谢大师细心回复~</p>
<p>偶然的机会用了一次STM8S103F3P6的I2S,了解的单片机只有STM8S~

哦 是我误会了。我看你ISR里对上下沿都做了电平读取。 你那样配置的确应该只是对下沿产生中断事件。

xmshao 回答时间:2024-1-1 17:06:08

mchoi 发表于 2023-12-28 11:02
大师我再请教个问题,</p>
<p>我大概找了一下TIM1编码器模式代码,我怎么没觉得比外部中断方式的代码少啊, ...

[md]如果使用TIMER的编码器接口,优势就是不用手动去做上下计数的处理了,而是TIMER硬件基于编码信号自动识别向上或向下计数方向后 自行做加、减计数。

我看了下STM8标准库,里面好像真没有TIMER encoder的应用示例。你可以参考STM32系列的,不难找到相关参考例程。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版