一.原理图
二.代码:
重定向
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。
三.连接开发板
四.输出结果