UART串口收发协议以及时序分析/**************************************************************************
.......IDLE.Start................................UART DATA..................................End...IDLE...
________ ______________
|____< D0 >< D1 >< D2 >< D3 >< D4 >< D5 >< D6 >< D7 >
Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 Bit08 Bit9
**************************************************************************/
1. 任意分频实现精确波特率详见:http://blog.chinaaet.com/detail/21535.html
\发送&接收数据时序图
2. 串口数据接收时序分析:
(1)状态机:R_IDLE; R_START; R_SAMPLE; R_STOP
+ 查看代码
(2)数据采样在smp_cnt==7即数据中点!
+ 查看代码
(3)接收完停止标志位后:rxd_flag有效,以及rxd_data更新!
+ 查看代码
3. 串口数据发送时序分析:
(1)状态机:R_IDLE; R_SEND(R_SEND发送起始位,数据位,结束位)
+ 查看代码
(2)数据与rxd_cnt:0-9完全对齐,因此采用了组合逻辑输出,如下:
+ 查看代码
(3)在发送完停止位后:txd_flag有效!
+ 查看代码
4. 其他(1)串口收发海量测试:
(2)收发同步时序绝对对齐,即第二个数据接受完毕的同时,第一个数据发送完毕,保持完全的滞后同步!
(3)串口软件问题:
在发送字符串或者HEX长度太长的时候会出现错误,尤其是自动发送10ms,10ms时候的错误很明显,纯属软件问题!
后期可以通过自行设计软件来完善,目前手动发送调试即可!
(4)很神奇的是115200的波特率但是9600竟然可以发送成功!
分享到:[url=]
[/url][url=]
[/url][url=]
[/url][url=]
[/url]
|