
FIFO即队列,先入先出,使用队列方式处理串口数据很方便。 在处理串口数据时,常常会碰到一些问题。比如上位机发来一串指令,指令格式不是固定的,可长可短,有时候不好判断指令是否完整。一般是靠帧头和振尾处理,还有一种办法,不知道有没有人使用过,就是判断发送字符之间的时间间隔,比如发送一个字节最多需要11位(1个起始位,8个数据位,最多两个停止位),假设波特率为9600,那么发送一个字节最多使用时间为T = 11 / 9600 = 1.146ms ,0 b+ k, u' W+ Y! R/ V, G 那么我们就可以这个判断,在3ms之内,如果接受字节没有增加,那么该字节就接收完毕,我就是这个判断的,没出现过什么问题 ![]() 程序如下:如果串口接受队列接受个数不变,则接受完成,无需判断帧尾,当然,这里最好使用CRC校验,以防误读。# d. F2 T) H' d+ E 如果有人要咨询modbus协议,可以留言,我这个程序处理这种协议非常方便的。/ U( h2 C* P0 ]( c' B4 J 首先得创建队列。 //********************************************************** //***********************************************************6 K6 X' O h* _0 H9 p# y 以上是接受,下面讲讲发送。0 x$ x% P( x' ^9 k' g 发送就是入列,然后使用“USART_ITConfig(USART2, USART_IT_TXE, ENABLE) ; ”进入串口中断进而发送数据 下面来讲讲串口中断如果配置的。大致意思就是接受字节入队,发送出队。 不知大家对这个写法有什么看法,欢迎各位留言指教 ![]() 附件为队列的程序,感兴趣的话可以下载看看。, x- D" }$ M9 A. X 9 d% X( R/ v0 s& b0 C- p |
Fifo4Serial.zip
下载1.03 KB, 下载次数: 1667
回复:【MCU实战经验】STM32串口收发之FIFO
RE:【MCU实战经验】STM32串口收发之FIFO
RE:【MCU实战经验】STM32串口收发之FIFO
回复:【MCU实战经验】STM32串口收发之FIFO
回复:【MCU实战经验】STM32串口收发之FIFO
回复:【MCU实战经验】STM32串口收发之FIFO
RE:【MCU实战经验】STM32串口收发之FIFO
RE:【MCU实战经验】STM32串口收发之FIFO
回复:【MCU实战经验】STM32串口收发之FIFO
回复:【MCU实战经验】STM32串口收发之FIFO
回复:【MCU实战经验】STM32串口收发之FIFO
mov R7,#10
DJNZ R7,$
#pragma endasm
回复:【MCU实战经验】STM32串口收发之FIFO
学习学习
回复:【MCU实战经验】STM32串口收发之FIFO
回复:【MCU实战经验】STM32串口收发之FIFO