[STM32U3] 【STM32U385RG 测评】2、实现板载调试串口通讯

[复制链接]
 楼主| sujingliang 发表于 2025-7-14 15:05 | 显示全部楼层 |阅读模式
本帖最后由 sujingliang 于 2025-7-14 15:11 编辑

本文实现UART串口通讯

一、UART配置

1、STM32CuteMX中新建工程
在选择bsp时将VCOM取消勾选

5.png
VCOM使用了USART1,这里要自己配置USART1串口收发,因此要取消VCOM 板级驱动

2、USART1配置

6.png
mode:异步



3、中断设置
勾选中断

7.png

NVIC中设置USART1中断优先级为12

8.png

4、DMA使能
增加一个DMA用于USART RX接收
外设到内存,外设地址不变,内存递增
10.png

生成工程

二、软件部分
1、printf重定向
勾选微库
9.png

#include <stdio.h>
增加
  1. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

  1. PUTCHAR_PROTOTYPE
  2. {
  3.   HAL_UART_Transmit(&huart1, (uint8_t *) &ch, 1, HAL_MAX_DELAY);
  4.   return ch;
  5. }


2、全局变量定义

//发送标志,是否允许每1秒中发送1次缺省信息。
uint8_t tx_info_flag=1;

//接收缓存区,接收标志,接收长度
#define RX_BUF_SIZE 256
uint8_t rx_buf[RX_BUF_SIZE];
volatile uint8_t rx_flag = 0;
uint16_t rx_len = 0;



3、接收中断使能
USART1(static void MX_USART1_UART_Init(void))初始化中增加
  1.   /* USER CODE BEGIN USART1_Init 2 */

  2.     __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
  3.     HAL_UARTEx_ReceiveToIdle_DMA(&huart1, rx_buf, RX_BUF_SIZE);
  4.   /* USER CODE END USART1_Init 2 */
增加idle中断

4、中断处理函数
  1. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
  2. {
  3.     if(huart->Instance == USART1)
  4.     {
  5.         rx_len = Size;
  6.         rx_flag = 1;
  7.         
  8.         // 需要重新启动接收
  9.         HAL_UARTEx_ReceiveToIdle_DMA(huart, rx_buf, RX_BUF_SIZE);
  10.     }
  11. }


5、main函数while(1)中

  1.   while (1)
  2.   {
  3.                 if(tx_info_flag)
  4.                 {
  5.                         printf("Hello 21ic, Hello NUCLEO-U385RG-Q!\r\n");
  6.                         printf("CMD: txstop:stop tx ; txstart:start tx\r\n");
  7.                 }
  8.                
  9.                 if(rx_flag)
  10.     {
  11.         rx_flag = 0;
  12.         HAL_UART_Transmit(&huart1, rx_buf, rx_len, HAL_MAX_DELAY);
  13.                                 if(strstr((char*)rx_buf,"txstop")) tx_info_flag=0;
  14.                                 if(strstr((char*)rx_buf,"txstart")) tx_info_flag=1;
  15.                         
  16.         memset(rx_buf, 0, RX_BUF_SIZE);
  17.         rx_len = 0;
  18.     }
  19.                
  20.                 HAL_Delay(1000);
每隔1秒打印“Hello 21ic, Hello NUCLEO-U385RG-Q!\r\n”和提示信息
如果接收到txstop,则停止打印默认信息,如果接收到txstart,则继续打印默认信息

三、运行
tutieshi_640x565_9s.gif


源码已上传:https://gitee.com/sujingliang/stm32u385


小小蚂蚁举千斤 发表于 2025-7-28 23:27 | 显示全部楼层
UART配置关键
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

146

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部