通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。
任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。
RX:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。
串口特性:
● 全双工的,异步通信
● NRZ标准格式
● 分数波特率发生器系统
─ 发送和接收共用的可编程波特率,最高达4.5Mbits/s
● 可编程数据字长度(8位或9位)
● 可配置的停止位-支持1 或2个停止位
在本开发板中,提供串口接口有两个,一个是普通串口USART1,一个是低功耗串口LPUART1。LPUART1可以通过32.768 kHz驱动,波特率可达9600bps,我们这以普通串口为例。
根据原理图,USART1_TX和PC4相连,USART1_RX和PC5相连。
3.串口配置3.代码生成 3.1 printf重定向实现int fputc(int c, FILE *stream)
{
huart1.Instance->TDR=c;
while( !(huart1.Instance->ISR&1<<7)){}
return c;
}
3.2 串口中断STM32G431芯片有读数据寄存器RDR和发送数据寄存器TDR。
读数据寄存器RDR:
发送数据寄存器TDR:
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
uint8_t c;
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
c=huart1.Instance->RDR;//接收数据
huart1.Instance->TDR=c;
/* USER CODE END USART1_IRQn 1 */
}
3.3 主函数