STM32C542开发(3)----配置串口打印 在传统 STM32 开发中,我们通常会通过 STM32CubeMX 配置 USART,并重定向 printf() 到串口,用于输出调试信息。STM32C5 使用新的 STM32CubeMX2 和 HAL2 驱动体系,工程结构和部分 API 命名相比传统 HAL 有所变化,因此串口配置和代码编写也需要稍作适配。
需要样片的可以加群申请:925643491 / 615061293 。
[https://www.bilibili.com/video/BV1JmVZ6YE6R/]
[https://www.wjx.top/vm/OhcKxJk.aspx#]
[https://download.csdn.net/download/qq_24312945/92952814]
首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为STM32C542CCT6

https://github.com/CoreMaker-lab/STM32C542_SENSOR
https://gitee.com/CoreMaker/STM32C542_SENSOR
用STM32CUBEMX2生成例程,这里使用MCU为STM32C542CCT6。

在 MCU name 中输入 STM32C542CCT6,选择对应的 STM32C5 芯片型号后,点击 Continue 进入下一步工程配置。

填写工程名称和保存路径后,点击 “Automatically Download, Install & Create Project”,STM32CubeMX2 会自动下载所需软件包并创建工程。

STM32CubeMX2 提示 Project Successfully Created 后,点击右下角 “Launch Project” 进入工程配置界面。



在 Peripherals 中选择 Cortex → DEBUG,将 Mode 配置为 Single-wire trace asynchronous,用于后续程序下载、在线调试和 Trace 调试功能。

查看原理图,PA9和PA10设置为开发板的串口。











在 main.c 中添加头文件
#include "mx_usart1.h"
#include < stdio.h >
#include < string.h >
为了让 printf() 输出到 USART1,需要重写 _write() 函数。GCC 工程中,printf() 底层会调用 _write() 输出字符,因此只需要在 _write() 中调用 HAL_UART_Transmit(),就可以把 printf() 的内容通过串口发送出去。
int _write(int file, char *ptr, int len)
{
hal_uart_handle_t *huart1 = mx_usart1_uart_gethandle();
if (huart1 != NULL)
{
HAL_UART_Transmit(huart1, ptr, len, 1000);
}
return len;
}
在 mx_system_init() 初始化完成后,可以直接调用 printf() 进行串口打印测试
hal_uart_handle_t *huart1 = mx_usart1_uart_gethandle();
printf("Hello STM32C5 UART printfrn");
printf("STM32C5 串口打印测试rn");
char msg[] = "Hello STM32C5 UARTrn";
HAL_UART_Transmit(huart1, msg, strlen(msg), 1000);

审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !