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

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

在 MCU name 中输入STM32C552CET6/STM32C552CEU6,选择对应的 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设置为开发板的串口。










5. 在工程属性中选择 Resource
6. Text file encoding 选择 Other
7. 编码格式输入 GBK
8. 点击 Apply and Close 保存设置

在 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);


while (1) {
HAL_GPIO_TogglePin(HAL_GPIOB, HAL_GPIO_PIN_14);
HAL_GPIO_TogglePin(HAL_GPIOB, HAL_GPIO_PIN_15);
HAL_GPIO_TogglePin(HAL_GPIOA, HAL_GPIO_PIN_8);
HAL_Delay(500);
HAL_GPIO_TogglePin(HAL_GPIOB, HAL_GPIO_PIN_14);
HAL_GPIO_TogglePin(HAL_GPIOB, HAL_GPIO_PIN_15);
HAL_GPIO_TogglePin(HAL_GPIOA, HAL_GPIO_PIN_8);
HAL_Delay(500);
HAL_GPIO_WritePin(LED1_PORT, LED1_PIN, HAL_GPIO_PIN_SET);
HAL_GPIO_WritePin(LED2_PORT, LED2_PIN, HAL_GPIO_PIN_SET);
HAL_GPIO_WritePin(LED3_PORT, LED3_PIN, HAL_GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(LED1_PORT, LED1_PIN, HAL_GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED2_PORT, LED2_PIN, HAL_GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED3_PORT, LED3_PIN, HAL_GPIO_PIN_RESET);
HAL_Delay(500);
}
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !