|
FIFO即队列,先入先出,使用队列方式处理串口数据很方便。* i) z5 d2 S8 E. d4 n' M 在处理串口数据时,常常会碰到一些问题。比如上位机发来一串指令,指令格式不是固定的,可长可短,有时候不好判断指令是否完整。一般是靠帧头和振尾处理,还有一种办法,不知道有没有人使用过,就是判断发送字符之间的时间间隔,比如发送一个字节最多需要11位(1个起始位,8个数据位,最多两个停止位),假设波特率为9600,那么发送一个字节最多使用时间为T = 11 / 9600 = 1.146ms , 那么我们就可以这个判断,在3ms之内,如果接受字节没有增加,那么该字节就接收完毕,我就是这个判断的,没出现过什么问题 。6 l' [3 l6 X' K2 c6 `0 T程序如下:如果串口接受队列接受个数不变,则接受完成,无需判断帧尾,当然,这里最好使用CRC校验,以防误读。$ A) i( W! k4 w2 n& s0 Z 如果有人要咨询modbus协议,可以留言,我这个程序处理这种协议非常方便的。9 Q6 ]0 P3 |* Z! ~ 首先得创建队列。 //**********************************************************3 [) R' h: \. y, ] //***********************************************************" [- f8 }) e9 r; m 以上是接受,下面讲讲发送。 发送就是入列,然后使用“USART_ITConfig(USART2, USART_IT_TXE, ENABLE) ; ”进入串口中断进而发送数据 下面来讲讲串口中断如果配置的。大致意思就是接受字节入队,发送出队。) `: O1 _7 p- V 不知大家对这个写法有什么看法,欢迎各位留言指教 & U0 H; \5 B" u9 G% m附件为队列的程序,感兴趣的话可以下载看看。/ N, ^% {6 H+ s+ ]! \' e, S, N' S0 y % E; c9 y: M1 \2 r" g; d8 T+ t3 @ |
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,$( X: e# T/ x3 V z& f3 `- ?9 P
#pragma endasm
回复:【MCU实战经验】STM32串口收发之FIFO
学习学习
回复:【MCU实战经验】STM32串口收发之FIFO
回复:【MCU实战经验】STM32串口收发之FIFO