android 串口 一次 读不完_如何写一个健壮的MCU串口程序?

本文介绍了在没有SDK的情况下,如何从零开始编写MCU串口驱动。针对半双工和全双工串口通信,提出了解决方案,包括如何判断串口空闲、驱动层与应用层分离、应用层循环队列处理机制以及重发机制。同时,提到了在处理数据帧时的协议格式和帧结构检查。
摘要由CSDN通过智能技术生成

f730bec89ed49438da99dc5b0d1d30d3.png

这里说的MCU是没有带SDK的那种,完完全全就是裸的,所有驱动得自己开发。串口驱动得自己从0开始写。下面总结几条写MCU串口程序需要注意的。

1、  全双工与半双工

首先要考虑的最基本的问题就是,这款芯片串口是全双工还是半双工的?

如果是半双工,收和发不能同时进行,收的时候不能发,发的时候不能收,因为发送器和接收器是同一个,只能单向用,一般收数据是中断触发在中断里1byte 1byte地收。

那么怎么判断当前能不能发数据呢?当收到数据过一定时间(可以用timer实现)还没有再收到数据认为串口空闲没有数据要收了,此时可以发数据。

半双工相当于是用户自己去实现产生了串口空闲中断。

如果是全双工,想发就发想收就收,是不是省事多了?

发数据是由用户先把某个发送中断寄存器置1,接着会自动产生写中断,用户在中断服务函数里把要发的数据装到数据寄存器并把中断寄存器清零,等刚刚装载的那1byte数据发送成功,硬件又会自动产生发送中断,用户再次把数据装载进去并把中断寄存器清零。

如此循环,当某次产生中断,用户不再装载数据,只是把中断寄存器清零那么不再有发送中断产生,发送数据过程就结束了。

全双工

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值