GD32错误调试篇:串口通讯乱码/stm32移植到GD32后串口通讯乱码等问题

news2025/1/21 0:49:58

 本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发

       向上代码兼容GD32F450ZGT6中使用

       后续项目主要在下面该专栏中发布:

https://blog.csdn.net/qq_62316532/category_12608431.html?spm=1001.2014.3001.5482

       感兴趣的点个关注收藏一下吧!

       电机驱动开发可以跳转:

GD32F103RCT6/GD32F303RCT6-实战项目-无刷电机驱动(1)_gd32f103rct6例程-CSDN博客

       BMS电源系统开发可以跳转:暂未放链接

介绍

今天我们又来对一期问题进行解答,太久没更新了,因为一直在忙着公司的出差,本次对串口通讯中出现的发送乱码问题进行解释。

首先需要排除的问题:

本篇文章,是针对于在串口常规配置都正确的情况下,依旧出现乱码的时候的教程

常规配置中可能导致串口发送出现乱码的问题:
 

1.检查波特率是否一致

2.检查串口数据格式是否正确

3.检查串口配置是否正确(引脚配置+串口配置+初始化)

4.检查是否在Main中对串口/延时函数/GPIO初始化

5.检查printf是否重定向

在排除以上常规问题后出现的串口乱码问题或者是从stm32移植到GD32中出现的乱码问题例如:

解决办法

1.乱码肯定是波特率出现问题

既然出现了乱码问题,在常规配置没有问题的情况下,我们就要去考虑,出现乱码问题的本质原因是什么呢?肯定是波特率始终对不上,但是明明我们设置的波特率比如9600,我们配置的时候写的就是9600呀?

这里就会有一个设计到串口时钟怎么去分频得到波特率的问题了

在STM32微控制器中,串行通信接口(如USART)的波特率是由串口时钟(USART_CLK)和USART_BRR寄存器中的设置共同决定的。USART_CLK通常来自于APB2或APB1总线时钟,这取决于USART的具体实例。例如,USART1通常连接到APB2总线上,而USART2至USART6则连接到APB1总线上。

stm32HAL库中配置例如:

// 设置USART时钟为84 MHz
__HAL_RCC_USARTx_CLK_ENABLE();

// 初始化USART配置结构体
huartx.Instance = USARTx;
huartx.Init.BaudRate = 115200;
huartx.Init.WordLength = UART_WORDLENGTH_8B;
huartx.Init.StopBits = UART_STOPBITS_1;
huartx.Init.Parity = UART_PARITY_NONE;
huartx.Init.Mode = UART_MODE_TX_RX;
huartx.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huartx.Init.OverSampling = UART_OVERSAMPLING_16;

// 初始化USART
HAL_UART_Init(&huartx);

2.如果是从stm32移植到GD32

在GD32系列微控制器中,串行通信接口(如USART)的波特率计算原理与STM32非常相似。GD32的USART模块同样通过分频其时钟源来产生所需的波特率。时钟源可以是APB2总线时钟,具体取决于所使用的USART模块。

但是GD32的主频拿标准的F1或者F303来说是108MHZ,比起stm32的主频72MHZ想比快上不少,那么可能一个配置不当就会产生波特率的问题。

那么说了这么多,我们该怎么去解决问题呢?

前面我们已经找到了问题是出现在波特率上面,那么自然而然,我们就需要去更改时钟晶振相关的配置了:
 

在GD32F450或者GD32F407中,我们能够找到外部晶振的宏定义,决定了外部输入晶振的大小,我之前出现乱码的原因是因为:之前这里内部是写的是25MHZ的晶振,但是我实际上焊接在板子外面的外部晶振却是8MHZ的晶振,那么我们就需要去修改宏定义的值了,如下图:

修改完毕以后就可以发现,串口发送到电脑端的数据又恢复正常了。

除了这里以外,在总时钟168MHZ的选取上,GD32内部也是提供了不同的选择:
 

该图是通过内部的16MHZ晶振以达到我们需要的200MHZ:

该图是启用外部时钟的8MHZ以达到我们需要的168MHZ的晶振:

注意事项

这里需要注意一个关联问题:在上图中我们能发现:同样是外部晶振输入,GD32预留了8MHZ、16MHZ、25MHZ的输入接口,那么我们在修改完宏定义后,记得在这里也进行相应的修改,不然就得不偿失了

上面讲的这些宏定义存在于:

这两个文件中!

王炸解决办法

如果对于精度不那么重要的场合,可以选择内部自带的芯片晶振去启动芯片,这样就可以解决绝大多数的乱码问题啦!

最后成果:

多串口正常发送数据

单串口正常发送数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1837828.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenFeign服务调用与负载均衡

目录 介绍使用高级特性超时控制重试机制默认HttpClient修改请求/响应报文压缩日志打印功能 相关文献 介绍 官网说明: Feign 是一个声明式 Web 服务客户端。它使编写 Web 服务客户端变得更加容易。要使用 Feign,请创建一个接口并对其进行注释。它具有可…

《OKR工作法》读书笔记

花了两个晚上的时间看完了《OKR工作法》这本书,谈不上有什么感想,因为工作后,其实就一直在用这种方法,所谓当局者迷嘛,习以为常也就谈不上多少新的启发。所以,这篇文章纯粹是一篇读书笔记,把我认…

Android网络性能监控方案 android线上性能监测

1 Handler消息机制 这里我不会完整的从Handler源码来分析Android的消息体系,而是从Handler自身的特性引申出线上卡顿监控的策略方案。 1.1 方案确认 首先当我们启动一个App的时候,是由AMS通知zygote进程fork出主进程,其中主进程的入口就是Ac…

PEI是聚醚酰亚胺(Polyetherimide)在粘接使用时使用UV胶水的优势有哪些?要注意哪些事项?

PEI是聚醚酰亚胺(Polyetherimide)在粘接使用时使用UV胶水的优势有哪些?要注意哪些事项? 在使用UV胶水进行聚醚酰亚胺(Polyetherimide,PEI)粘接时,有一些优势和注意事项: …

数据库物理计划执行指南

一、背景介绍 伴随信息技术地迅猛发展和应用范围地逐步扩大,数据库已成为企业存储与管理数据的重要工具。但数据量激增以及用户访问需求的与日剧增,数据库性能也将面临巨大挑战。 好在数据库物理计划执行是解决数据库性能问题的重要手段之一&#xff0…

【2024最新精简版】Kafka面试篇

文章目录 Kafka和RabbitMQ什么区别讲一讲Kafka架构你们项目中哪里用到了Kafka?为什么会选择使用Kafka? 有什么好处 ?使用Kafka如何保证消息不丢失 ?消息的重复消费问题如何解决的 ?Kafka如何保证消费的顺序性 ?Kafka的高可用机制有了解过嘛 ?Kafka实现高性能的设计有了解…

ARM32开发——GD32F4定时器查询

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录

C++设计模式——Proxy代理模式

一,代理模式简介 代理模式是一种 结构型设计模式,该模式通过引入一个新的代理对象Proxy,来间接访问原始对象,从而使访问方式变得灵活和可控。 代理对象的设定减少了客户端与真实对象之间的直接交互。 通过引入代理对象来间接访问原…

【CVPR2024】面向StableDiffusion的编辑算法FreePromptEditing,提升图像编辑效果

近日,阿里云人工智能平台PAI与华南理工大学贾奎教授团队合作在深度学习顶级会议 CVPR2024 上发表 FPE(Free-Prompt-Editing) 算法,这是一种面向StableDiffusion的图像编辑算法。在这篇论文中,StableDiffusion可用于实现图像编辑的本质被挖掘&…

贪心算法——赶作业(C++)

慢慢来,沉稳一点。 2024年6月18日 题目描述 A同学有n份作业要做,每份作业有一个最后期限,如果在最后期限后交作业就会扣分,现在假设完成每份作业都需要一天。A同学想安排作业顺序,把扣分降到最低,请帮他实…

华为OD机试 - 聚餐地点 - 广度优先搜索BFS(Java 2024 D卷 200分)

华为OD机试 2024D卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(D卷C卷A卷B卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测…

美联储的秘密议程 Fed's Hidden Agenda

编译 | 刘教链 教链按:本文是来自“米塞斯学院”Ryan McMaken的稿子,原标题是「美联储“软着陆”叙事背后的真实故事(The Real Story Behind the Fed’s “Soft Landing” Narrative)」。昨{2024.6.17内参:战报会骗人&…

实验1_配置标准IPv4 ACL

1、实验目的 通过本实验可以掌握: IPv4 ACL工作方式和工作过程定义编号和命名的标准IPv4 ACL的方法接口和VTY下应用标准IPv4 ACL的方法 2、实验拓扑 配置IPv4 ACL的实验拓扑如图9-2所示 配置 ACL 实验拓扑如下图所示。本实验中,通过配置标准 ACL 实现…

无痛接入图像生成风格迁移能力:GAN生成对抗网络

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享,包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

QT基础 - 布局管理器间隔控件

目录 一. QVBoxLayout 二. QHBoxLayout 三. QGridLayout 四. QFormLayout 五. Spacers 六.总结 一. QVBoxLayout QVBoxLayout 主要用于将控件在垂直方向上进行排列。 它具有以下特点: 可以方便地管理和组织控件,使其按照垂直顺序依次排列。能够自动…

视频批量剪辑利器:轻松掌握尺寸修改技巧,支持自定义及预设尺寸,提升剪辑效率!

在数字化时代,视频已经成为我们生活中不可或缺的一部分。无论是社交媒体上的短视频,还是公司宣传的长视频,都离不开精心剪辑与处理。然而,对于很多小伙伴来说,视频剪辑仍然是一项既耗时又耗力的任务。尤其是当需要处理…

算法训练营第六十天(延长12天添加图论) | LeetCode 647 回文子串、LeetCode 516 最长回文子序列

LeetCode 67 回文子串 思路很简单&#xff0c;每一个dp[i]等于dp[i-1]加上当前字符向前直到0各个长度字符串回文串个数即可 代码如下&#xff1a; class Solution {public boolean isValid(String s) {int l 0, r s.length() - 1;while (l < r) {if (s.charAt(l) ! s.ch…

钡铼技术BL104在环境监测站多协议采集保障数据全面准确

随着工业化和城市化进程的加快&#xff0c;环境污染问题日益严重&#xff0c;环境监测站在保护生态环境、保障公众健康中的作用变得越来越重要。钡铼技术PLC物联网关BL104&#xff0c;为环境监测站提供了一种高效、可靠的多协议数据采集解决方案&#xff0c;保障了监测数据的全…

Multisim软件仿真之频谱分析仪

网络上有很多Multisim文件&#xff0c;有些是不能复现的&#xff0c;比如频谱仪&#xff0c;按照下面链接去操作&#xff0c;怎么也测试不出来波形&#xff0c;multisim频谱仪使用_multisim输入输出端口-CSDN博客。 原因分析&#xff1a; 1、博主设置参数未讲全&#xff0c;按…

sprintboot依赖管理和自动配置

springboot依赖管理和自动配置 依赖管理和自动配置依赖管理什么是依赖管理修改自动仲裁/默认版本号 starter场景启动器starter场景启动器基本介绍官方提供的starter第三方starter 自动配置自动配置基本介绍SpringBoot自动配置了哪些?如何修改默认配置如何修改默认扫描包结构re…