半双工数据收发组件被APP查询是否收到数据的问题。

本文探讨了在单片机与产品间通过单线进行可靠数据收发的设计方案。重点介绍了如何通过设置接收标志位并轮询检查来确保数据的有效接收,以及如何处理产品未响应或通讯断开的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在嵌入式项目中,一般需要适当为某个外设或单个功能实现单独编写模块或组件的.c文件,以实现整个系统的高內聚低耦合。

记录一下在当前我负责的一个项目中,需要使用单片机实现单线和产品通讯,完成数据收发的功能的问题。

单片机和产品之间只使用一根数据线和另一根GND
完成数据收发,单片机发数据时产品收,产品发数据时单片机收,收发一一对应,产品不主动发数据,产品在收到指令后,必须在一定时间内给予回应。

在准备做数据接收部分,先在脑海中构思的时候,首先想的是,数据发送完毕,单片机开启中断准备接收和自动完成接收,并将接收数据放在缓冲中。
因为数据一发对应一收,且有时间限制,在思考时对该部分过于注意,导致思想进入漩涡。
认为数据接收自动完成,但需要时间,且时间一定会在指定时间段内完成,所以系统设计应该是APP在发送数据后,延时一定时间来读取即可。

但很快思考发现问题,如果产品没有按照约定返回怎么办?或产品断线?就永远收不到返回!
所以实际方法应该是,在组件内设置接收完成标志位,并在收发函数内进行状态维护。
APP调用组件接口完成指令发送,之后可以调用接口一直轮训该标志位,而轮训只会有三种结果。
1接收完成,那么读取即可。
2没有接收,那么继续下次轮训。
3轮训超时,说明产品没有回复或者通讯断线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值