开启你的编程学习之旅

云课堂提供高质量的编程课程,从入门到精通,助你成为技术大牛

立即开始学习

stm32开发板教程

作者: 孙老师 更新: 2025-10-28 阅读: 32 难度: 初级
学习工具

5. STM32 串口通信

UART(通用异步收发传输器)是 STM32 与外部设备进行串行通信的重要接口。

串口通信基础

  • 波特率:通信速度,如 9600、115200
  • 数据位:5-9 位,通常使用 8 位
  • 停止位:1、1.5、2 位
  • 校验位:无校验、奇校验、偶校验

串口初始化

UART 配置
UART_HandleTypeDef huart1; // 配置串口1参数 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.Mode = UART_MODE_TX_RX; // 收发模式 huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 硬件流控制 huart1.Init.OverSampling = UART_OVERSAMPLING_16; // 初始化串口 if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); }

串口发送数据

数据发送
// 发送字符串 char message[] = "Hello STM32!\r\n"; HAL_UART_Transmit(&huart1, (uint8_t*)message, strlen(message), HAL_MAX_DELAY); // 发送格式化数据 char buffer[50]; int value = 123; sprintf(buffer, "Value: %d\r\n", value); HAL_UART_Transmit(&huart1, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY); // 发送单个字符 HAL_UART_Transmit(&huart1, (uint8_t*)"A", 1, HAL_MAX_DELAY);

串口接收数据

数据接收
// 轮询方式接收 uint8_t rx_data; if (HAL_UART_Receive(&huart1, &rx_data, 1, 100) == HAL_OK) { // 处理接收到的数据 if (rx_data == 'A') { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); } } // 中断方式接收 uint8_t rx_buffer[10]; HAL_UART_Receive_IT(&huart1, rx_buffer, 10); // 接收完成回调函数 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart->Instance == USART1) { // 处理接收完成的数据 // 重新启动接收 HAL_UART_Receive_IT(&huart1, rx_buffer, 10); } }

串口重定向 printf

printf 重定向
#include // 重写 _write 函数 int _write(int file, char *ptr, int len) { HAL_UART_Transmit(&huart1, (uint8_t*)ptr, len, HAL_MAX_DELAY); return len; } // 使用示例 printf("System started!\r\n"); printf("Temperature: %.2f°C\r\n", 25.5); printf("ADC Value: %d\r\n", adc_value);

常用串口函数

  • HAL_UART_Transmit() - 阻塞式发送
  • HAL_UART_Receive() - 阻塞式接收
  • HAL_UART_Transmit_IT() - 中断发送
  • HAL_UART_Receive_IT() - 中断接收
  • HAL_UART_Transmit_DMA() - DMA 发送
  • HAL_UART_Receive_DMA() - DMA 接收
提示: 这是一个重要的概念,需要特别注意理解和掌握。
注意: 这是一个常见的错误点,请避免犯同样的错误。