TI中文支持网
TI专业的中文技术问题搜集分享网站

UART 发送数据时有时会接收到数据

TM4C1294 使用 UART2 口, 接485 芯片, 使用直接写寄存器方式send 数据, 有时在 send 完数据后,会导致  UART 寄存器 RXFE 被置为 0 , 也即是接收到了数据,请问这是什么问题?

如果单步执行,还没有发现 RXFE 被置为0 ,如果全速运行,30% 的可能性。

代码里 send 第一步是设置 485 为发送模式。

void _UARTSend(uint8_t index,const uint8_t *pui8Data, uint32_t ui32Size)
{
 

    HWREG(uart_normal_setting[index].UART_GPIO_Port + (GPIO_O_DATA + (uart_normal_setting[index].UART_GPIO_SR_PIN << 2))) = uart_normal_setting[index].UART_GPIO_SR_PIN;
    while(ui32Size–)
    {
        //
        // Make sure that the transmit FIFO is not full.
        //
        while((HWREG(uart_udma_setting[index].UART_BASE + UART_O_FR) & UART_FR_TXFF))
        {
        }

        //
        // Send out the next byte.
        //
        HWREG(uart_udma_setting[index].UART_BASE + UART_O_DR) = *pui8Data++;
    }
    //
    // Wait until the UART is done transmitting.
    //
    _UARTFlush(index);
   
}
void _UARTFlush(uint8_t index)
{
    //
    // Wait for the UART FIFO to empty and then wait for the shifter to get the
    // bytes out the port.
    //
    while(!(HWREG(uart_udma_setting[index].UART_BASE + UART_O_FR) & UART_FR_TXFE))
    {
    }

    //
    // Wait for the FIFO to not be busy so that the shifter completes.
    //
    while((HWREG(uart_udma_setting[index].UART_BASE + UART_O_FR) & UART_FR_BUSY))
    {
    }
}
user5228509:

回复 Susan Yang:

使用了 FIFO 模式

但是我的现象和链接里的现象不一样,链接里是收到了数据,RXFE应该 = 0,但是 RXFE = 1 , 我的现象是我往外发数据, RXFE 应该 = 1, 但是实际 = 0

链接里的结论好像是 IDE 的问题,我再试试

谢谢你! 

赞(0)
未经允许不得转载:TI中文支持网 » UART 发送数据时有时会接收到数据
分享到: 更多 (0)