STM32学习笔记(二) —— 调试串口

我们在调试程序时,经常会使用串口打印相关的调试信息,但是单片机串口不能直接与 PC 端的 USB 接口通讯,需要用到一个USB转串口的芯片来充当翻译的角色。我们使用的开发板上有这个芯片,所以在打印调试信息的时候直接使用USB线连接开发板与电脑USB口就可以了,这里的电路连接如下,

USB转TTL与一键下载电路图

这里使用串口1作为调试串口,需要使用跳线帽连接P7接口中的 TX与PA10,RX与PA9;

也实现了一键下载功能,可以使用串口下载程序而无需手动配置BOOT;

还可以通过板子上的USB转TLL调试其他设备,只需将P7接口中的 TX连接其他设备TTL电平接口的RX,RX连接其他设备TTL电平接口的TX,GND连接其他设备的GND,另外开发板还需要供电;

还可以使用开发板上的USB转232功能调试其他232接口设备,可以使用跳线帽连接P7接口中的 TX与TX232,RX与RX232。然后找到开发板上的P12接口,连接 TX与其他设备232接口的RX,RX与其他设备232接口的TX,GND与其他设备的GND,另外再给开发板供电;

注:上述调试串口,USB转TTL与USB转232功能同时只能使用一个,通过P7接口进行配置。

USB转232接口电路图

接下来就是配置软件实现调试串口的功能,这里不介绍串口,只是实现调试串口,方便后续程序调试,对于串口的使用在后面会详细介绍

1.配置串口

我们在上节创建的HAL库工程模板的基础上,通过 STM32CubeMX 来增加串口的配置代码。找到上节创建的项目文件,双击打开 STM32CubeMX 工程文件

配置串口1 :异步模式, 波特率 115200,8位数据位,无奇偶校验,1位停止位( 115200-8-N-1 ),收发模式使能。这个波特率配置很常用,另外 9600-8-N-1 也很常用

配置完成后,点击 GENERATE CODE 生成代码

2.printf 函数重定向

printf 函数会调用 fputc 函数打印数据,如果我们让fputc函数打印的数据直接输出到串口,那调用printf函数时打印的数据就会通过串口发送出去。所以我们可以通过在fputc函数中调用串口发送函数来实现printf函数重定向

用 keil 打开刚才生成的代码,首先我们勾选配置选项中的 Use MicroLIB

然后分别在 usart.h 与 usart.c 中添加如下代码

c 复制代码
/* usart.h */
#include <stdio.h>
c 复制代码
/* usart.c */
int fputc(int _char, FILE *_stream)
{
    /* 串口阻塞发送函数 串口1    待发送数据               发送数据个数    发送超时时间*/
    HAL_UART_Transmit(&huart1,   (const uint8_t *)&_char, 1,              1000);
    
    return _char;
}

最后在 main.c 中就可以调用 printf 函数向串口打印调试信息。在 while(1) 循环中添加如下代码,编译后可下载到单片机中测试

c 复制代码
printf("Hello World!\r\n");
HAL_Delay(500);

3.编译项目(Project - Rebuild all target files)并下载验证

使用一键下载功能时,可以在项目文件目录下找到.hex文件通过USB转串口的方式下载到开发板。下载程序的软件可以在HAL库工程模板这一章节的最后找到百度网盘链接分享

下载完之后,可以打开串口调试助手,就能看到开发板打印的数据 "Hello World!"

注:下载时选择 DTR的低电平复位,RTS高电平进BootLoader 选项

我们后续的下载都是使用ST-Link下载,可以直接在keil中下载或者调试,比较方便。可按下图配置并下载(Flash - Download)

下载完之后,打开串口调试助手,就可以查看到打印的数据

上述我们是在开发板中进行实际验证的效果,下面使用软件仿真

首先我们需要配置一下参数

然后再编译一下,没有问题就可以进入仿真界面

按下图点击下拉三角形,选择串口1,就能在右下方看到多出了一个标签页

串口显示区域

点击运行,然后观察上述串口显示区域,就可以看到打印的数据

打印出的 "Hello World!",可以把此标签页从下方拖出来,拉大一点更方便查看

以下是几个常用的工具栏按钮,其他的等用到的时候再介绍

相关推荐
云泽8083 小时前
STM32 USART 详解(四):数据帧及标志位的收发机制与寄存器深度剖析
stm32·单片机·嵌入式硬件
EleganceJiaBao4 小时前
【嵌入式】STM32 状态机设计:枚举、位掩码、结构体、变量与宏定义的合理选择
stm32·单片机·嵌入式硬件·枚举·状态机·位掩码
一条破秋裤4 小时前
STM32F103 UART 第一层复习:USART1 收发、回显与默写测试
stm32·单片机·嵌入式硬件
老当益壮梁奶奶5 小时前
51单片机入门总结(一):基本概念、最小系统、流水灯与按键实验(附完整代码)
笔记·stm32·单片机·嵌入式硬件·51单片机
abc light8 小时前
单片机(2)
stm32·单片机·嵌入式硬件
糖糖单片机设计1 天前
基于 STM32 的小型鸟类宠物繁殖系统
stm32·嵌入式硬件·宠物
单片机仿真设计1 天前
【proteus仿真】基于 STM32 单片机电梯运行状态监控设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus
Run_Teenage1 天前
嵌入式:理解I2C通信基本原理
stm32·单片机·嵌入式硬件
新晨单片机设计1 天前
S012A-基于STM32单片机光强检测系统【Proteus仿真+Keil程序+原理图】
stm32·单片机·嵌入式硬件
辰域电子1 天前
STM32项目开源:电子秤计价系统(代码+原理图+仿真)
stm32·单片机·嵌入式硬件·开源·毕业设计·proteus