本帖最后由 梅工 于 2025-2-16 17:53 编辑

一.原理图

image.png


二.代码:

重定向

putc 函数是 C 标准 I/O 库中的一个函数,它负责将单个字符输出到指定的流中。函数直接将字符发送到 UART3 的 FIFO(先进先出队列)中

int fputc(int ch, FILE *stream)
{
    while(__UART_IS_TxFIFO_FULL(UART3));
    __UART_WRITE_FIFO(UART3, ch);
     
    return ch;
}


初始化:

    /* sop uart interrupt */
    uart_transmit_IT_stop(huart);
    uart_receive_IT_stop(huart);
     
    /* Config Data Length */
    huart->UARTx->LCR.Bits.DLS  = huart->Init.DataLength;
    /* Config Stop Bits*/
    huart->UARTx->LCR.Bits.STOP = huart->Init.StopBits;
    /* Config Auto Flow */
    if(huart->Init.AUTO_FLOW)
    {
        __UART_AUTO_FLOW_CONTROL_ENABLE( huart->UARTx);
    }
    /* Config Parity */
    if (huart->Init.Parity != UART_PARITY_NONE)  
    {
        huart->UARTx->LCR.Bits.PEN = 1;

        switch (huart->Init.Parity)
        {
            case UART_PARITY_ODD:  huart->UARTx->LCR.Bits.SP = 0; huart->UARTx->LCR.Bits.EPS = 0; break;
            case UART_PARITY_EVEN: huart->UARTx->LCR.Bits.SP = 0; huart->UARTx->LCR.Bits.EPS = 1; break;
            case UART_PARITY_0:    huart->UARTx->LCR.Bits.SP = 1; huart->UARTx->LCR.Bits.EPS = 1; break;
            case UART_PARITY_1:    huart->UARTx->LCR.Bits.SP = 1; huart->UARTx->LCR.Bits.EPS = 0; break;

            default: break;
        }
    }
    else  
    {
        huart->UARTx->LCR.Bits.PEN = 0;
    }

    /* Config FIFO, DMA, RxFIF/TxFIFO threshold */
    huart->FCR_Shadow = huart->Init.FIFO_Mode | (huart->Init.FIFO_Mode << FCR_DMAM);

    huart->UARTx->FCR_IID.FCR = huart->FCR_Shadow;

    /* Config BaudRate */
    if(uart_config_baudRate(huart) != true)
    {
         return false;
    }
    else
    {
         return true;         
    }


   printf(" freqchip \r\n");   
   printf(" 666 \r\n");



  • __UART_IS_TxFIFO_FULL(UART3) 是一个宏或函数,用于检测 UART3 的发送 FIFO 是否已满。
  • __UART_WRITE_FIFO(UART3, ch) 是一个宏或函数,用于将字符 ch 写入 UART3 的 FIFO。


三.连接开发板

1739699609588.png


四.输出结果

image.png