通讯是RS485,之前代码在115200波特率下能正常工作,后来改成9600居然异常。实测数据,是发送不完整,甚至只发送了一个字节的错误数据。
分析原因,是RS485发送接收硬件切换脚的使能,没有等到发送完成就切换了。原来由于速度快等待时间短。
串口收发用的是中断,这里只描述发送。
发送函数: P0_1 = 1;
HalUARTWrite(0,buf,len);
1、 _hal_uart_isr.c 中,
if (isrCfg.txHead == isrCfg.txTail)
{
IEN2 &= ~UTXxIE;
isrCfg.txMT = 1;
},保持不变,原来的115200时,在中断函数里加了延时和RS485脚的切换,但9600时间长了,不合适加在中断里。
2、MT_UART.C中,串口初始化的回调函数里,增加:
if(event &HAL_UART_TX_EMPTY){
event &=