返回列表 发新帖我要提问本帖赏金: 10.00元(功能说明)

[STM32F1] 关于STM32F103芯片按钮机制串口发送程序

[复制链接]
1290|15
 楼主| jf101 发表于 2022-9-7 08:27 | 显示全部楼层 |阅读模式
本帖最后由 jf101 于 2022-10-18 22:22 编辑

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

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

管脚配置.PNG

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

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

DI.PNG

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

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

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

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







打赏榜单

21小跑堂 打赏了 10.00 元 2022-10-19
理由:恭喜通过原创审核

评论

求关于STM32F103芯片按钮机制串口发送程序源码 [email]1957685961@qq.com[/email]  发表于 2023-1-13 14:50
循环检测引脚电平,按需上报状态,确实可以减轻上位机的压力。方法还可以优化,比如中断机制或者类似核酸采样的混采机制。  发表于 2022-10-19 10:41
@21小跑堂 :第一发原创贴,有点不知道流程,谢谢指出过程中的不足,本文已经改正!感谢!  发表于 2022-10-18 22:24
Hey,欢迎参与原创申请活动,本帖字数还未满800字噢~~大佬可以再扩充扩充文字描述噢,扩充完了可以再@21小跑堂一遍  发表于 2022-10-13 14:23
szt1993 发表于 2022-9-7 09:55 | 显示全部楼层
编程思想很好!感谢分享!受教了!
中国龙芯CDX 发表于 2022-9-7 10:00 | 显示全部楼层
硬件是基础,思想是精华!用精华驱动基础,步步高升!
小小蚂蚁举千斤 发表于 2022-9-7 14:38 | 显示全部楼层
STM32的HAL库做的也挺到位的,封装调用很方便!
Pretext 发表于 2022-9-7 15:47 | 显示全部楼层
就是把检测按键变化放到下位机中
Pretext 发表于 2022-9-7 15:48 | 显示全部楼层
要是用外部中断的话,也可以不需要用定时器了,有按键中断发送串口数据。

评论

@呐咯密密 :是的,你说的没问题,因为这个DI数量比较多,如果中断的话需要考虑的比较多了  发表于 2022-10-19 17:37
@jf101 :你引脚电平都发生变化了,不就有中断源了吗?为啥要上位机,还有你这不就是检测按钮的吗?  发表于 2022-10-19 09:57
外部中断没问题,就是增加一个中断机制还得靠上位机或是按钮触发中断!  发表于 2022-9-7 15:51
AdaMaYun 发表于 2022-9-7 15:55 | 显示全部楼层
文章思想很好!用自己状态改变作为触发发送判断机制,很有借鉴价值!赞!
小夏天的大西瓜 发表于 2022-9-8 09:05 | 显示全部楼层
正在学习STM32,简单看了一下,正在分析学习,思想很好,很简单易理解!谢谢!
Henryko 发表于 2022-9-11 21:55 | 显示全部楼层
按键中断发送数据
您需要登录后才可以回帖 登录 | 注册

本版积分规则

262

主题

1929

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部