不用OS时,可用正常485收发:<br />向485发一帧数据(15字节),设一个全局变量Txln,发前置15。<br />在发送中断服务中发一个字节Txln递减,Txln为0时485方向位置反。<br /><br />基于UCOS时:<br />串口中间件收发时,单纯串口收发很可靠,基于485时。<br />采用上面同样方式,因为中间是缓冲队列发送,不能确定何时发送结束,不能用上面的方法将485反向。<br /><br />void UART1_Exception(void)<br />{<br /> uint8 IIR, temp, i;<br /> OS_ENTER_CRITICAL();<br /> while(((IIR = U1IIR) & 0x01) == 0)<br /> {<br /> switch (IIR & 0x0e)<br /> {<br /> case 0x02: // THRE中断<br /> for (i = 0; i < 16; i++) // 向发送FIFO填充数据<br /> {<br /> if(QueueRead(&temp, UART1SendBuf) == QUEUE_OK)<br /> {<br /> U1THR = temp;<br /> utxn--;<br /> if(utxn <= 1)<br /> {<br /> IO0SET |= IO_485_DIR; // 485收<br /> } <br /><br /><br /><br />请问有何好的方法解决。 |
|