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