串口数据求解决

https://www.wch.cn/bbs/thread-83618-1.html即与此贴问题相同,求解决。

image.png八位数据收发没问题的,超过八位就丢了


您好,问题可以描述全面一些吗,是否有涉及到操作flash,操作flash缓冲区时有4字节对齐吗。

是否在串口接收中断里加了打印信息,如果打印过多,会造成接收数据丢包。
希望提供更多信息,可以发送程序至zhaiyw@wch.cn

不使用缓存Buff,可以在启用uart中断后,参考下面的接收中断代码。

__INTERRUPT

__HIGH_CODE

void UART1_IRQHandler(void)

{

? ? volatile uint8_t i;


? ? switch(UART1_GetITFlag())

? ? {

? ? ? ? case UART_II_LINE_STAT: // 线路状态错误

? ? ? ? {

? ? ? ? ? ? UART1_GetLinSTA();

? ? ? ? ? ? break;

? ? ? ? }


? ? ? ? case UART_II_RECV_RDY: // 数据达到设置触发点

? ? ? ? ? ? for(i = 0; i != trigB-1; i++)//适用于trigB大于1的情况

? ? ? ? ? ? {

? ? ? ? ? ? ? ? uint8_t Rdata = UART1_RecvByte();

? ? ? ? ? ? ? ? UART1_SendByte(Rdata);

? ? ? ? ? ? }

? ? ? ? ? ? break;


? ? ? ? case UART_II_RECV_TOUT: // 接收超时,暂时一帧数据接收完成

? ? ? ? ? ? while(R8_UART1_RFC)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? uint8_t Rdata = UART1_RecvByte();

? ? ? ? ? ? ? ? UART1_SendByte(Rdata);

? ? ? ? ? ? }

? ? ? ? ? ? break;


? ? ? ? case UART_II_THR_EMPTY: // 发送缓存区空,可继续发送

? ? ? ? ? ? break;


? ? ? ? case UART_II_MODEM_CHG: // 只支持串口0

? ? ? ? ? ? break;


? ? ? ? default:

? ? ? ? ? ? break;

? ? }

}



邮箱发你啦,求解决j_0017.gif


修改后的代码已发送,请查收。


我知道原因   接收超时中断  不是没没有收到数据就会中断  感觉这里就是个坑哦;

接收超时中断 :是指数据小于缓存区才会触发超时中断 ,但是有三个点需要注意 1.缓冲器满==接收数据且相等就不会进超时中断。


程序也发我一份谢谢。

个人信息保护,已隐藏




222ec8493db28c36afa0c37dfdb4c40.png

您可以参考EVT包中的UART例程,在中断服务函数中作适当修改,for循环中的trigB改为trigB-1,trigB默认例程中使用7。如下图。客户的代码要保密,不能发哦。

9c13cb1a54c25e3ad55f05015d3c62f.png


只有登录才能回复,可以选择微信账号登录