发新帖本帖赏金 10.00元(功能说明)我要提问
返回列表
打印
[STM32F1]

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

[复制链接]
973|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jf101|  楼主 | 2022-9-7 08:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jf101 于 2022-10-18 22:22 编辑

#申请原创# @21小跑堂
就是目前遇到一个项目,是监视各个按钮状态并将各个按钮的状态发送至上位机,上位机进行整体程序逻辑动作。一般情况下串口发送可以直接一直发送给上位机,通过解析不同数据位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编程思想,大家多多交流!程序原件有需求的可以私密我,我给发邮箱!







使用特权

评论回复

打赏榜单

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

评论
1957685961 2023-1-13 14:50 回复TA
求关于STM32F103芯片按钮机制串口发送程序源码 [email]1957685961@qq.com[/email] 
21小跑堂 2022-10-19 10:41 回复TA
循环检测引脚电平,按需上报状态,确实可以减轻上位机的压力。方法还可以优化,比如中断机制或者类似核酸采样的混采机制。 
jf101 2022-10-18 22:24 回复TA
@21小跑堂 :第一发原创贴,有点不知道流程,谢谢指出过程中的不足,本文已经改正!感谢! 
21小跑堂 2022-10-13 14:23 回复TA
Hey,欢迎参与原创申请活动,本帖字数还未满800字噢~~大佬可以再扩充扩充文字描述噢,扩充完了可以再@21小跑堂一遍 
沙发
szt1993| | 2022-9-7 09:55 | 只看该作者
编程思想很好!感谢分享!受教了!

使用特权

评论回复
板凳
中国龙芯CDX| | 2022-9-7 10:00 | 只看该作者
硬件是基础,思想是精华!用精华驱动基础,步步高升!

使用特权

评论回复
地板
STM32的HAL库做的也挺到位的,封装调用很方便!

使用特权

评论回复
5
Pretext| | 2022-9-7 15:47 | 只看该作者
就是把检测按键变化放到下位机中

使用特权

评论回复
6
Pretext| | 2022-9-7 15:48 | 只看该作者
要是用外部中断的话,也可以不需要用定时器了,有按键中断发送串口数据。

使用特权

评论回复
评论
jf101 2022-10-19 17:37 回复TA
@呐咯密密 :是的,你说的没问题,因为这个DI数量比较多,如果中断的话需要考虑的比较多了 
呐咯密密 2022-10-19 09:57 回复TA
@jf101 :你引脚电平都发生变化了,不就有中断源了吗?为啥要上位机,还有你这不就是检测按钮的吗? 
jf101 2022-9-7 15:51 回复TA
外部中断没问题,就是增加一个中断机制还得靠上位机或是按钮触发中断! 
7
AdaMaYun| | 2022-9-7 15:55 | 只看该作者
文章思想很好!用自己状态改变作为触发发送判断机制,很有借鉴价值!赞!

使用特权

评论回复
8
正在学习STM32,简单看了一下,正在分析学习,思想很好,很简单易理解!谢谢!

使用特权

评论回复
9
Henryko| | 2022-9-11 21:55 | 只看该作者
按键中断发送数据

使用特权

评论回复
发新帖 本帖赏金 10.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

231

主题

1538

帖子

2

粉丝