完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用的CH573串口1接收数据,每接收一字节数据要调用void uart_receive_input(unsigned char value)函数将输入放入缓存区处理,字节数少的话处理起来没问题,但是如果接收的是一个256字节的数据包,接受的数据好像不完整,校验会不通过,请问要接收256字节的数据包,甚至512字节,每个字节还要调用函数放入缓存区,串口终端应该怎样写才能接收完整。
第一个函数是单字节暂存,第二个函数是多字节暂存,附上我的串口中断函数,请指出不足,谢谢。 void uart_receive_input(unsigned char value)//单字节暂存 { if(1 == rx_buf_out - rx_buf_in) { //串口接收缓存已满 }else if((rx_buf_in > rx_buf_out) && ((rx_buf_in - rx_buf_out) >= sizeof(wifi_uart_rx_buf))) { //串口接收缓存已满 }else { //串口接收缓存未满 if(rx_buf_in >= (unsigned char *)(wifi_uart_rx_buf + sizeof(wifi_uart_rx_buf))) { rx_buf_in = (unsigned char *)(wifi_uart_rx_buf); } *rx_buf_in ++ = value; } } void uart_receive_buff_input(unsigned char value[], unsigned short data_len)//多字节暂存 { unsigned short i = 0; for(i = 0; i < data_len; i++) { uart_receive_input(value[i]); } } __attribute__((interrupt("WCH-Interrupt-fast"))) __attribute__((section(".highcode"))) void UART1_IRQHandler( void ) // UART1 中断 { UINT8V i = 0; UINT8V Recv; switch ( UART1_GetITFlag() ) { case UART_II_LINE_STAT : // 线路状态错误 { UART1_GetLinSTA(); break; } case UART_II_RECV_RDY : // 数据达到设置触发点 for ( i = 0 ; i != trigB_UART_Wifi; i++ ) { Recv = R8_UART1_RBR; uart_receive_input(Recv); } break; case UART_II_RECV_TOUT : // 接收超时,暂时一帧数据接收完成 i = UART1_RecvString( Wifi_RxBuff ); uart_receive_buff_input(Wifi_RxBuff,i); memset(Wifi_RxBuff,0,i); break; case UART_II_THR_EMPTY : // 发送缓存区空,可继续发送 break; case UART_II_MODEM_CHG : // 只支持串口0 break; default : break; } } |
|
相关推荐
1个回答
|
|
先按如下优化:
|
|
|
|
只有小组成员才能发言,加入小组>>
522 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2904 浏览 2 评论
2400 浏览 1 评论
870浏览 2评论
688浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
418浏览 1评论
525浏览 1评论
请教一下,Mounriver 编译不成功:找不到库文件,怎么整
814浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 01:27 , Processed in 0.938709 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号