串口配置步骤:
使能 GPIO 和 USART 时钟
配置 GPIO 为复用功能 (PA9-TX, PA10-RX)
配置 USART 参数 (波特率、数据位、停止位、校验)
使能 USART
串口发送:
HAL_UART_Transmit():阻塞方式发送数据
HAL_UART_Transmit_IT():中断方式发送
HAL_UART_Transmit_DMA():DMA 方式发送 (高效)
串口接收:
HAL_UART_Receive():阻塞方式接收
HAL_UART_Receive_IT():中断方式接收
HAL_UART_Receive_DMA():DMA 方式接收 (高效)
串口通信实例:(发送 "Hello World!" 并接收回显)
// 串口初始化(115200bps, 8位数据, 1位停止, 无校验)
UART_HandleTypeDef huart1;
void USART1_Init(void){
GPIO_InitTypeDef GPIO_InitStruct;
// 使能GPIOA和USART1时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_USART1_CLK_ENABLE();
// 配置PA9(USART1_TX)为复用推挽输出
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF1_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 配置PA10(USART1_RX)为复用浮空输入
GPIO_InitStruct.Pin = GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 配置USART参数
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
HAL_UART_Init(&huart1);
// 使能USART1
HAL_UART_Start(&huart1);
// 发送欢迎信息
uint8_t str[] = "Hello World!\r\n";
HAL_UART_Transmit(&huart1, str, sizeof(str), 1000);
}
// 主函数(回显功能)
int main(){
USART1_Init();
uint8_t data;
while(1){
HAL_UART_Receive(&huart1, &data, 1, 1000); // 接收一个字节
HAL_UART_Transmit(&huart1, &data, 1, 1000); // 发送回显
}
}