串口USART UART 接收结束标志是怎么回事 这是一种自己定义的协议 没有通用协议

原文链接:http://www.openedv.com/posts/list/53847.htm

f(USART_RX_STA&0x40)
                {
                    if(Res!=0x0a)
                    {
                        USART_RX_STA=0;//
                    }
                    else 
                    {
                        USART_RX_STA|=0x80;
                    }
                }
=======================================
关于原子历程里面的这段函数  如果数据包里含有0x01 0x02 0x03  0x0d 0x03 0x05 0x0d 0x0a 这种数据是不是就接收不到我想要的数据了啊  有点疑问

最佳答案




毫无疑问是的, 

0D 0A这是自行定义的一种数据帧结束标志,不定义这个不没法判断你这一帧数据什么时候结束了, 
0D 0A是什么东西咧,它就是我们的回车键的ASCII码, 0D回车,0A换行 
像在windows超级终端里一条数据输入完按回车正好来了个0D 0A,表示数据发完了 

串口如何检测数据接收完毕或串口接收超时,这个问题是个老大难问题,没有好的协议支持,就要浪费单片机大量的资源去解决这个问题。 

比如浪费一个定时器,每次在中断里接到一个字节就开启定时器去记时,9600大概1MS一个字节,定时器到3MS中断检查有没收到数据了就表示数据帧结束了, 

又比如串口绑在DMA通道上,通过串口的空闲中断来判断接收完成 

问题在于现在有大量的工业通讯协议如MODBUS等没有帧结束标志,实在令人发指
当然,我可以给你举例说明这四种通信协议。 1. USART(Universal Synchronous/Asynchronous Receiver/Transmitter)是一种通用的串行通信协议,可以同时支持同步和异步传输。它常用于单片机与外设之间的通信,如串口通信。例如,Arduino开发板上的RX和TX引脚就是通过USART协议与计算机进行通信。 2. UART(Universal Asynchronous Receiver/Transmitter)是一种异步串行通信协议,常用于简单的点对点通信。UART只支持异步传输,数据以字节为单位进行传输,并且没有时钟线。它常用于串口通信,例如用于调试和配置嵌入式系统。 3. I2C(Inter-Integrated Circuit)是一种串行通信协议,用于连接微控制器和外部设备,如传感器、存储器和其他集成电路。I2C使用两根线(SDA和SCL)进行通信,其中SDA是数据线,SCL是时钟线。它支持多主机和多从机的通信,并具有地址分配和数据传输的能力。 4. SPI(Serial Peripheral Interface)是一种高速串行通信协议,常用于连接微控制器和外部设备,如存储器、显示屏和传感器。SPI使用四根线(MISO、MOSI、SCK和SS)进行通信,其中MISO是主设备输入从设备输出,MOSI是主设备输出从设备输入,SCK是时钟线,SS是片选线。SPI支持全双工通信,并且具有多主机和多从机的能力。 这些通信协议在不同的应用场景中具有各自的特点和优势,可以根据具体需求选择适合的协议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值