您好,问题可以描述全面一些吗,是否有涉及到操作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;
}
}
您好,问题可以描述全面一些吗,是否有涉及到操作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;
}
}
举报