学习目标
- 熟悉STM32CubeMX配置流程
- 掌握串口发送和接收
- 掌握串口DMA发送和DMA接收
- 掌握printf配置
学习内容
开发流程
- 配置芯片串口功能
- 编写串口代码
- 调试
串口功能配置
串口功能开启

发送功能测试
/* USER CODE BEGIN WHILE */uint8_t cnt = 0;while (1){ HAL_UART_Transmit(&huart1, &cnt, 1, HAL_MAX_DELAY); cnt++; HAL_Delay(1000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */}
通过HAL_UART_Transmit函数发送数据。
中断接收功能测试
/* USER CODE BEGIN WHILE */HAL_UART_Receive_IT(&huart1, usart1_buffer, USART1_BUFFER_LEN);while (1){ /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */}/* USER CODE END 3 */
/* USER CODE BEGIN 0 */#define USART1_BUFFER_LEN 1uint8_t usart1_buffer[USART1_BUFFER_LEN];void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { HAL_UART_Transmit(&huart1, (const uint8_t *)usart1_buffer, USART1_BUFFER_LEN, HAL_MAX_DELAY); // 开启中断接收 HAL_UART_Receive_IT(&huart1, usart1_buffer, USART1_BUFFER_LEN);}/* USER CODE END 0 */
printf配置
#include <stdio.h>int fputc(int ch, FILE* f) { HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1, 0xFFFF); return ch;}
DMA收发
配置

DMA发送
/* USER CODE BEGIN WHILE */uint8_t cnt = 0;while (1){ HAL_UART_Transmit_DMA(&huart1, &cnt, 1); cnt++; HAL_Delay(1000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */}
DMA接收
#define USART1_BUFFER_LEN 8uint8_t usart1_buffer[USART1_BUFFER_LEN];void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { HAL_UART_Transmit_DMA(&huart1, (const uint8_t *)usart1_buffer, USART1_BUFFER_LEN); // 开启中断接收 HAL_UART_Receive_DMA(&huart1, usart1_buffer, USART1_BUFFER_LEN);}
练习
- 使用CubeMX配置串口的收发