https://www.wch.cn/bbs/thread-83618-1.html即与此贴问题相同,求解决。
八位数据收发没问题的,超过八位就丢了
您好,问题可以描述全面一些吗,是否有涉及到操作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;
? ? }
}
邮箱发你啦,求解决
修改后的代码已发送,请查收。
我知道原因 接收超时中断 不是没没有收到数据就会中断 感觉这里就是个坑哦;
接收超时中断 :是指数据小于缓存区才会触发超时中断 ,但是有三个点需要注意 1.缓冲器满==接收数据且相等就不会进超时中断。
程序也发我一份谢谢。
个人信息保护,已隐藏
您可以参考EVT包中的UART例程,在中断服务函数中作适当修改,for循环中的trigB改为trigB-1,trigB默认例程中使用7。如下图。客户的代码要保密,不能发哦。