串口数据接收问题
时间:10-02
整理:3721RD
点击:
做了个串口传输数据的程序,从机向主机发送数据的时候,20字节自动分包,现在是在串口回调函数中加了延时实现的
static void NpiSerialCallback( uint8 port, uint8 events ) { (void)port; uint8 numBytes = 0; uint8 buf[128]; uint8 send_byte_cnt=0; attHandleValueNoti_t pNoti; int i=0; for(i=20000;i>0;i--) { asm("nop"); } if (events & (HAL_UART_RX_TIMEOUT)) { numBytes = NPI_RxBufLen(); if(numBytes)
现在的问题是修改了波特率,延时时间也要做修改,怎样做可以不用延时。
回调函数能不能做成串口接收数据20个字节以上才能进入。
Hi ethan
不要这样Hold住CPU狂延时,这样其他任务的都得不到执行。
你可以每次到进来回调函数时就将数据读入到一个缓存,下次再进来时继续将数据存入到该缓存,
这样分批分次地将数据接收完成。
HI shaokai,
具体怎样去做呢,怎样判断串口数据有没有接收完成,串口缓冲需要用到队列吗?
Hi ethan
具体要看你的程序设计,我个人比较推荐的方法是使用简单的队列。
建议用中断接收。