[STM32H7] [STM32H745I-DISCO试用]串口打印输出

[复制链接]
 楼主| jobszheng 发表于 2025-3-23 12:39 | 显示全部楼层 |阅读模式
<
[STM32H745I-DISCO试用]串口打印输出

在嵌入式项目开发中,我们首先完成的是点灯实验,LED灯按设计规则闪烁则代表了芯片正确配置了时钟,也同步验证了IDE开发环境是兼容与适配的。而在点灯实验之后,便是串口输出实验。串口输出实验旨在验证调试信息的输出功能。虽然JTAG技术要远强于串口打印,但这个从51单片机时代延续下来的调试手段凭借着成本低,易于实现,无硬件依赖等优点继续发光发热。今天,我们就来在STM32H745I-DISCO评估板上实现串口调试输出功能。

uart_01.png

通过查询原理图,我们看到PB10与PB11两个引脚与ST Link的虚拟串口功能外设相连,再查询上述两个引脚所属Usart3外设,所以我们在STM32CubeMX中配置Usart3。这里对于串口的配置参数,我们采用默认的“115200-8-N-1”。

利用STM32CubeMX来初始化串口还是非常方便的,在main函数中,我们也仅需要再调用Hal_uart_transmit()接口函数即可。我们看看串口调试输出实现的效果,如下图所示:

uart_02.png

我对STM32官方的hal库的设计还是有些意见的——抽象与封装的层次有些高,所以在串口驱动实现中,我更愿意采用自己的数据结构,并使用寄存器的方式来进入中断处理函数。所以,我在使用STM32CubeMX生成初始化代码时Usart外设选择了LL库模式。

uart_03.png

在软件设计方面,uart的数据结构设计如下:

  1. typedef struct uart_class
  2. {
  3.     uint8_t *rx_buf;
  4.     uint8_t *tx_buf;
  5.     uint16_t rx_curr;
  6.     uint16_t tx_len;
  7.     uint32_t flag;
  8. }uart_class_t;

利用串口输出的功能并不难实现,在项目中,我们使用串口输出仍然再封装一层调试日志输出,对输出的内容打个tag与date,并支持格式化输出。我在将未来的日子再开帖子详细说明日志输出的实现与应用效果。




yangjiaxu 发表于 2025-4-9 14:48 | 显示全部楼层
还得是cubemx啊,这软件搞ST的高端芯片真的是如虎添翼啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:嵌入式技术专家
简介:热爱开源,乐于分享。在嵌入式技术领域里面,主攻通讯协议,Modbus,TCP/IP以及虚拟化和RTOS

30

主题

740

帖子

23

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