WCH沁恒单片机
直播中

叹久

9年用户 712经验值
擅长:可编程逻辑 光电显示 接口/总线/驱动
私信 关注
[问答]

CH583八位数据收发没问题的,超过八位就丢了怎么解决?


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


回帖(1)

马知一

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

是否在串口接收中断里加了打印信息,如果打印过多,会造成接收数据丢包。

不使用缓存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;

}

}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分