单片机串口
接受标志跟发送不是一定相关的
就是说接收标志为1,只能说收到一个字节,不代表发送已经完成
发送标志为1的时候,表示发送已经完成,可以发下一个
你说的自发自收,我理解是一个测试程序,收到一个字节就返回一个字节,或者就是单片内部调试的自发自收
但无论如何,发送标志为1,才表示一个字节发送完毕
发送和接收都有一个标志位,指示数据是否已经发送或接收完成,只要完成就可以进行下一个发送
一般来说,可以做成中断,发送或接收完成都可以产生中断,然后发下一个字节
如果想节省CPU开销或数据较多,可以使用DMA方式,前提是你的CPU支持这些操作,例如STM32的就可以用DAM
等到其接收标志位置1后就可以进行第二次发送?我的是让单片机自发自收的
那确实是一个测试单片机的程序,我发现其中一段在发送完一次后不久就发送第二次,结果发送失败,我原先是怀疑这可能是单片机设计者的失误,不过现在发现这个设计者是知道的,所以就不理会了。不过还是得感谢你俄解答
发送或接收完一帧数据就会申请中断,看看教材吧
如果自发自收,理论上,发送完成和接收都完成才能发下一个,但这个时间很短,看上去就像同时完成一样
任何时候,无论自发自收还是对外通信,发送标志完成之后,再发下一个才是可靠的;接收标志完成并且被复位之后,才会接收下一个,否则后面的数据可能丢掉了
如果是外部设备给单片机发送数据,一般使用中断接收,一旦收到数据,进入中断,将数据立即拷入内存,以免影响下一个字节,一般来说这个过程很快。如果使用查询,那么代码量很大的时候,可能会影响下一个字节,这种情况一般较少
一些单片机的发送和接收有影子寄存器,例如程序将数据写到发送寄存器,单片机自动将发送寄存器写入影子寄存器,这时候发送就已经完成,标志变1,但实际数据可能还没发出去