串口数据接收问题
时间: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
具体要看你的程序设计,我个人比较推荐的方法是使用简单的队列。
建议用中断接收。
