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

【经验之谈】基于STM32F103芯片按钮机制串口发送程序的经验分享

[复制链接]
STMCU小助手 发布时间:2022-12-9 18:00

就是目前遇到一个项目,是监视各个按钮状态并将各个按钮的状态发送至上位机,上位机进行整体程序逻辑动作。一般情况下串口发送可以直接一直发送给上位机,通过解析不同数据位0和1的状态可以知道具体哪个按钮按下,而且现在实际为减少上位机整体解析工作量,要求的发送机制是哪个按钮按下才会触发发送机制,不会一直通过串口给上位机,这样既减少上位机处理数据的压力,也可以单独定位具体的按钮位置容易排查问题点!具体的实现过程如下:


首先,用STM32CubeMX配置各个芯片引脚定义(具体配置过程,我就不在过多的赘述了,小伙伴可以百度查阅),配置的结果如下:

通过引脚配置图,可以看出IO口其实还是挺多的,有23个DI,当然这个是我用到的,实际小伙伴们可以进行删减增添!

下面咱们说说实现原理,具体过程就是咱们可以通过实际DI的状态刷新进行自比较后再串口发送(自比较就是比较上一次状态和本次的状态是否有变化,有变化就发送,没有变化就不发送),具体程序如下图:
1、读取DI状态,这个在main函数中先读一次初始状态进行存储,就是一个最原始的初值,先从外设得到,也就是最开始比较的本体。

2、进行状态变化判定,这一步其实就是自比较程序,比较本次读取的状态与上一次读取的状态值,具体程序如下图:

程序简单解析:状态判定就是再读一次实际状态,跟上次ReadID中状态进行比较,变化了就重新赋值,依次进行状态交替就能实现,并通过串口进行发送!发送数据为前期双方定义好的,第一个字节5b为数据头,第二个字节为按钮标号从01到23的十六进制表示方式,第三个字节为状态位,01按下,00断开,最后一位为前面的和校验,当然这个定义的数据结构可以自行确定含义,只要与上位机达成一致双方都知道就好!

3、在时间中断函数中调用查询,我是放在中断函数中定时进行判断,其实就是刷新数据,我这个是10ms,其实根据自己按钮的紧急程度进行设置中断函数,比如,这个DI里面有关于急停的信号,可以设置为1ms读取一次状态,按照信号的轻重缓急进行区分对待放在不同的中断函数中进行发送。

这样就能够实现按钮变化发送数据,当然这个只是我用STM32F103实现的,用的HAL库函数,咱们STM32芯片很容易程序移植,这个框架也可以用到其他STM芯片,其实更多的还是编程逻辑,希望大家多多提供好的STM32编程思想,大家多多交流!程序原件有需求的可以私密我,我给发邮箱!

---------------------
作者:jf101


收藏 评论0 发布时间:2022-12-9 18:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版