|
各位好: 最近在研究MCU與感測器結合應用,使用UART進行資料接收,但發現接收端好像來不急接收感測器端吐出來的資料,目前設定的情況是我使用Uart中斷接收的方式,buadrate設定為115200,感測器由0開始計數,但接收端的部份中間固定有幾比資料會遺失,請問能否協助解答? UART DataBuff[0] = 0x2 UART DataBuff[0] = 0x5 UART DataBuff[0] = 0x8 UART DataBuff[0] = 0x11 UART DataBuff[0] = 0x14 UART DataBuff[0] = 0x17 UART DataBuff[0] = 0x20 UART DataBuff[0] = 0x23
|
使用 HAL 库通过串口以 ASCII 形式发送整型数据
串口DMA收发出现ORE错误
STM32F103C8T6 上电后无法通过串口发出数据的问题?
HAL_UART_Transmit_DMA 异常
STM32 增加 WiFi + 以太网的低成本方案
在RS485通信中如何有效避免误码,距离5米,速率115200
UART中IDLE 中断与 RTO 接收超时中断有什么区别
求问诡异的问题,eth网口ping不通
I2C 错误代码含义
在 LwIP_HTTP_Server_Netconn_RTOS 工程中添加 USART3 功能时遇到问题
微信公众号
手机版
这里的判读会发生错误,当RXLINE小于4时,取的值已经超出范围。回调函数尽量只做赋值,数据打印或者查询在外部处理。
針對Rxline<4的情況請問您有比較好的處理方式可以提供參考嗎?
除了printf外,想請問是否有其它可以做修改的部份?
在外部增加一个RXLINE的判断,目前只能是这样。另外,我感觉应该用UartHandle结构体中接收缓冲区的内容进行操作。
个人拙见:你这个回调函数中应该是通过固定的结束符连续四个0xFF来判断数据结束的吧。换个思路可以利用波特率的特性,即每个数据之间的时间间隔是固定的,以这个时间间隔来判定数据是否结束(可以使用定时器进行时间倒数,超时自动认定数据结束)。至于数据的内容正不正确不应在这里进行处理判断,这里只做一件事就是数据的接收。在数据接收完毕的时候可以手动设置一个标志位(表明数据接完了),在其它地方轮询判断该标志位,然后再对缓冲区中的数据进行判断。
最好的办法就是DMA接收。