在我发送任何数据之前是否有办法清除 UART 发送缓冲区(以确保它确实为空)? 我正在使用禁用 FIFO 的 UART0。
此致、
Ksawery
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在我发送任何数据之前是否有办法清除 UART 发送缓冲区(以确保它确实为空)? 我正在使用禁用 FIFO 的 UART0。
此致、
Ksawery
不可以、该函数在写入字符之前检查 FIFO 满标志是否未置位。 当 FIFO 模式被禁用时、FIFO 满标志代表保存寄存器的状态。 该函数的源文件为"C:\ti\TivaWare_C_Series-2.1.4.178\driverlib\UART.c"。 我已包含以下函数的副本。
这是 TivaWare 库不支持您所要执行的操作的极少数情况之一。 您可以编写自己的函数来执行 HWREG 写入、而无需检查 FIFO 满标志。
// // //! 向指定端口发送字符。 //! //! \param ui32Base 是 UART 端口的基址。 //! \parucam Data 是要传输的字符。 //! //! 此函数将字符\e ucData 写入// 的发送 FIFO 中! 指定的端口。 此函数不会阻止、因此如果没有空格 //! 可用、然后返回一个\b false、应用程序必须重试 //! 函数。 //! //! 如果字符成功放置在 //! 发送 FIFO;如果发送中没有可用空间、则为\b false //! FIFO。 //// ***************** bool UARTCharPutNonBlocking (uint32_t ui32Base、unsigned char ucData) { // //检查参数。 // assert (_UARTBaseValid (ui32Base)); // //查看发送 FIFO 中是否有空间。 // if (!(HWREG (ui32Base + UART_O_FR)& UART_FR_TXFF)) { // //将此字符写入发送 FIFO。 // HWREG (ui32Base + UART_O_DR)= ucData; // //成功。 // return (true); } 其他 { // //发送 FIFO 中没有空间,因此返回失败。 // return (false); } }