当前位置: 首页 > news >正文

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 也很常用

配置UART1

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

2.printf 函数重定向

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

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

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

/* usart.h */
#include <stdio.h>
/* 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) 循环中添加如下代码,编译后可下载到单片机中测试

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!”,可以把此标签页从下方拖出来,拉大一点更方便查看

在这里插入图片描述

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

在这里插入图片描述

相关文章:

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

我们在调试程序时&#xff0c;经常会使用串口打印相关的调试信息&#xff0c;但是单片机串口不能直接与 PC 端的 USB 接口通讯&#xff0c;需要用到一个USB转串口的芯片来充当翻译的角色。我们使用的开发板上有这个芯片&#xff0c;所以在打印调试信息的时候直接使用USB线连接开…...

Ubuntu20.0.4下设置frpc开机自启动

目录 一、下载frp 二、解压 三、服务端部署 1.配置 2.运行 三、客户端部署 1、配置 2、后台运行 四、开机启动 1、拷贝frpc.service 2、修改配置 3、启用服务 五、ubuntu20.04使用 rc-local.service设置开机启动 1、建立开机服务添加 [Install] 段 2、授权rc-local.service 3、…...

05 Redis之Benchmark+简单动态字符串SDS+集合的底层实现

3.8 Benchmark Redis安装完毕后会自动安装一个redis-benchmark测试工具&#xff0c;其是一个压力测试工具&#xff0c;用于测试 Redis 的性能。 src目录下可找到该工具 通过 redis-benchmark –help 命令可以查看到其用法 3.8.1 测试1 3.9 简单动态字符串SDS 无论是 Redis …...

【C++】priority_queue优先队列

头文件#include <queue> 优先队列具有队列的所有特性&#xff0c;本质是一个堆实现的&#xff0c;和队列基本操作相同: top 访问队头元素 empty 队列是否为空 size 返回队列内元素个数 push 插入元素到队尾 (并排序) emplace 原地构造一个元素并插入队列 pop 弹出队头元素…...

蓝桥杯---三国游戏

问题描述 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X, Y, Z (一开始可以认为都为 0 )。游戏有 n 个可能会发生的事件&#xff0c;每个事件之 间相互独立且最多只会发生一次&#xff0c;当第 i 个事件发生时会分别让 X, Y, Z 增加 Ai , Bi ,Ci 。…...

设计一个分布式ID

为了保证全局唯一性可以用时间作为区分点一部分&#xff0c;时间尽可能细化&#xff0c;可以精确到毫秒&#xff0c;甚至是微秒和纳秒。如果是分布式系统有多态机器&#xff0c;可以根据机器ID再进行以下区分。如哦机器运行的特别快&#xff0c;1毫秒有大量ID生成&#xff0c;可…...

259:vue+openlayers: 显示海量多边形数据,10ms加载完成

第259个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers项目中通过WebGLVectorLayerRenderer方式加载海量多边形数据。这里相当于将海量的数据放在同一个层的source中,然后通过webglTile的方式渲染出这一层。 本示例数据为5000个多边形,加载速度超级快。 直接…...

Go Zero微服务个人探究之路(十)实战走通微服务前台请求调用的一套流程model->rpc微服务->apiHTTP调用

前言 Go语言凭借低占用&#xff0c;高并发等优秀特性成为后台编程语言的新星&#xff0c;GoZero框架由七牛云技术副总裁团队编写&#xff0c;目前已经成为Go微服务框架里star数量最多的框架 本文记录讲述笔者一步步走通前台向后台发出请求&#xff0c;后台api调用rpc服务的相…...

K8s 安装部署-Master和Minion(Node)

K8s 安装部署-Master和Minion(Node) 操作系统版本&#xff1a;CentOS 7.4 Master &#xff1a;172.20.26.167 Minion-1&#xff1a;172.20.26.198 Minion-2&#xff1a;172.20.26.210&#xff08;后增加节点&#xff09; ETCD&#xff1a;172.20.27.218 先安装部署ETCD y…...

从零学习Linux操作系统 第二十部分 mariadb数据库的管理

一、对于数据库的基本介绍 1.什么是数据库 数据库就是个高级的表格软件 2.常见数据库 Mysql Oracle mongodb db2 sqlite sqlserver … 3.Mysql (SUN -----> Oracle) 4.mariadb (Mysql的一种&#xff09; 数据库中的常用名词 1.字段 &#xff1a;表格中的表头 2.表 &…...

数据脱敏和数据加密有什么区别

数据脱敏&#xff1a;主要是为了兼顾数据安全与数据使用&#xff0c;采用专业的数据脱敏算法。 数据加密:通过对数据进行编码来保护数据&#xff0c;获取实际值的唯一方法是使用解密密钥解码数据。 数据加密是可逆的&#xff0c;数据脱敏是不可逆的。 处理方法不同 保护内容…...

主流排序算法

冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a; 基本思想&#xff1a;通过比较相邻元素的大小&#xff0c;不断交换相邻元素的位置&#xff0c;使得较大的元素逐渐“浮”到数组的最后。时间复杂度&#xff1a;O(n^2)。 选择排序&#xff08;Selection Sort&#xf…...

MySql的使用方法

一.什么是MySql MySql是一种数据库管理系统&#xff0c;是用来存储数据的&#xff0c;可以有效的管理数据&#xff0c;数据库的存储介质为硬盘和内存。 和文件相比&#xff0c;它具有以下优点&#xff1a; 文件存储数据是不安全的&#xff0c;且不方便数据的查找和管理&#xf…...

C#,数据检索算法之三元搜索(Ternary Search)的源代码

数据检索算法是指从数据集合&#xff08;数组、表、哈希表等&#xff09;中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 本文发布 三元搜索&#xff08;Ternary Search&#xff09;的源代码。 1 文本格式 using System; namespace Legalsoft.Truffer.Algo…...

windbg:常用指令

windbg 调试 参考文档 1、viewing-and-editing-global-variables-in-windbg WinDBG 常用调试命令 加载符号 .sympath // 查看当前符号查找路径 .sympath c:\symbols // 将符号查找路径设为&#xff1a;c:\symbols .sympath c:\symbols // 将c:\symbols添加…...

23. 集合类

集合 1. 概述2. 分类2.1 单列集合&#xff08;Collection&#xff09;2.2 双列集合&#xff08;Map&#xff09; 单列集合 Collection、List、Set、ArrayList、LinkedList’、Vector、HashSet、TreeSet、LinkedHashSet双列集合 Map、HashTable、HashMap、TreeMap、Properties、…...

OpenAI平台:引领人工智能的创新与应用

在当今迅速发展的技术世界中&#xff0c;OpenAI已成为人工智能&#xff08;AI&#xff09;研究和应用的先驱。作为一个致力于确保人工智能的安全和广泛受益的组织&#xff0c;OpenAI通过其平台提供了一系列强大的工具和API&#xff0c;这些工具和API正在重塑我们与技术的互动方…...

redis原理(五)Lua语言

一、介绍&#xff1a; 1、背景&#xff1a; 在 Redis 的 2.6 以上版本中&#xff0c;除了可以使用命令外&#xff0c;还可以使用 Lua 语言操作 Redis。 Redis 命令的计算能力并不算很强大&#xff0c;而使用 Lua 语言则在很大程度上弥补了 Redis 的这个不足。 2、特点&#…...

SOHO外贸怎么建网站?做海洋建站的步骤?

SOHO外贸如何做跨境独立站&#xff1f;搭建外贸自建站的策略&#xff1f; 一位成功的SOHO外贸从业者不仅需要精湛的贸易技能&#xff0c;还需要一个优质的网站来展示产品、与客户互动&#xff0c;并建立强大的在线品牌形象。海洋建站将探讨在SOHO外贸领域如何建立一个成功的网…...

[论文阅读] |RAG评估_Retrieval-Augmented Generation Benchmark

写在前面 检索增强能够有效缓解大模型存在幻觉和知识时效性不足的问题&#xff0c;RAG通常包括文本切分、向量化入库、检索召回和答案生成等基本步骤。近期组里正在探索如何对RAG完整链路进行评估&#xff0c;辅助阶段性优化工作。上周先对评估综述进行了初步的扫描&#xff0…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

HTTPS证书一年多少钱?

HTTPS证书作为保障网站数据传输安全的重要工具&#xff0c;成为众多网站运营者的必备选择。然而&#xff0c;面对市场上种类繁多的HTTPS证书&#xff0c;其一年费用究竟是多少&#xff0c;又受哪些因素影响呢&#xff1f; 首先&#xff0c;HTTPS证书通常在PinTrust这样的专业平…...

学习 Hooks【Plan - June - Week 2】

一、React API React 提供了丰富的核心 API&#xff0c;用于创建组件、管理状态、处理副作用、优化性能等。本文档总结 React 常用的 API 方法和组件。 1. React 核心 API React.createElement(type, props, …children) 用于创建 React 元素&#xff0c;JSX 会被编译成该函数…...

本地部署drawDB结合内网穿透技术实现数据库远程管控方案

文章目录 前言1. Windows本地部署DrawDB2. 安装Cpolar内网穿透3. 实现公网访问DrawDB4. 固定DrawDB公网地址 前言 在数字化浪潮席卷全球的背景下&#xff0c;数据治理能力正日益成为构建现代企业核心竞争力的关键因素。无论是全球500强企业的数据中枢系统&#xff0c;还是初创…...