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

 本文章基于兆易创新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电源系统开发可以跳转:暂未放链接

GD32调试篇,帮助大家解决在GD32使用中的驱动以及出现的各自报错问题,大家有遇到的问题可以和我反馈,我会针对出教程

介绍

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

首先需要排除的问题:

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

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

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.rhkb.cn/news/355830.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL源码分析——initdb

数据库初始化 在安装完数据库后,需要进行初始化数据库操作,对应PostgreSQL数据库中就是需要进行initdb后,才能对数据库进行启动。initdb的过程,其实就是创建数据库实例的过程,生成模板数据库和相应的目录、文件信息&a…

PCB设计中的via孔和pad孔

原文出自微信公众号【小小的电子之路】 在PCB设计过程中,经常会提到via孔和pad孔,下面就简单介绍一下二者的区别。 via称为过孔,主要起到电气连接的作用,用于网络在不同层的导线之间的连接。PCB设计中一般做盖油处理。 via孔 vi…

变电站智能巡检机器人解决方案

我国拥有庞大的电网体系,变电站数量众多,且近年来快速增长。然而目前我国变电站巡检方式仍以人工为主,存在效率低下、监控不全面等问题。变电站通常是一个封闭的系统空间,设备种类繁多、占地面积广阔,这对巡检人员实时…

react 自定义鼠标右键点击事件

功能:鼠标右键点击节点时,出现“复制”功能,点击其他部位,隐藏“复制”;鼠标右键事件的文案,始终在鼠标点击位置的右下方;点击复制,提示复制成功 效果图: 代码&#xff1…

DGit介绍

参考地址:http://githubengineering.com/introducing-dgit/ DGit是“Distributed Git”的简写,即分布式Git。 众所周知,Git本身就是分布式的,任何的Git仓库备份都是包含该项目所有历史版本的所有的文件,分支&#xff…

MySQL之优化服务器设置(五)

优化服务器设置 高级InnoDB设置 innodb_old_blocks_time InnoDB有两段缓冲池LRU(最近最少使用)链表,设计目的是防止换出长期很多次的页面。像mysqldump产生的这种一次性的(大)查询,通常会读取页面到缓冲池的LRU列表,从中读取需要的行&…

【对抗去偏】BiasAdv: Bias-Adversarial Augmentation for Model Debiasing

原文标题: BiasAdv: Bias-Adversarial Augmentation for Model Debiasing 原文代码: 暂无 发布年度: 2023 发布期刊: CVPR 摘要 Neural networks are often prone to bias toward spurious correlations inherent in a dataset, …

苹果手机短信删除了怎么恢复?有那些方法?

IPhone短信删除怎么恢复?现在大多数人都会使用社交软件沟通交流,短信的用武之地已经没以前那么多,但是它的重要性一点都不能忽视,有些重要的短信内容值得我们保留,如果不小心删除了这些短信内容该怎么恢复?…

摊牌了,我不装了~各种Amazon Bedrock小样儿、试用装,今天免费!

探索世界顶级的大模型、智能体、文生图、对话机器人……新手?还是专家?加入我们,解锁精彩内容: l 初体验:在 Amazon Bedrock Playground 直接调用强大的大模型,点亮生成式AI技能树。 l 文生图&#xff1a…

Android系统 抓trace方法(手机及车机)

1、先说说什么是trace trace是一种以perfetto.trace结尾的文件。一般用来分析卡顿、启动时间慢等问题,还可以用来分析方法耗时,android系统的性能、功耗等等问题。所需要使用到的网站是: Perfetto UI 他的前身是Systrace,不过Pe…

探索图神经网络(GNN):使用Python实现你的GNN模型

一、引言 图神经网络(Graph Neural Network, GNN)作为近年来机器学习和深度学习领域的热门话题,正逐渐吸引越来越多的研究者和开发者的关注。GNN能够处理图结构数据,在社交网络分析、推荐系统、化学分子结构预测等领域有着广泛的…

二本(三本)毕业、4年职场牛马----分享给计科专业男女孩或被迷茫、焦虑困扰的大学生们的一些感悟

背景 我不是一个贩卖焦虑的博主,博主二本(三本升上来)毕业,当年正逢2020疫情,一战考研失败,家里蹲到没有实习。靠关系进第一家公司做Python后端,然后第一家公司因为疫情黄了。二战考研又失败&a…

eNSP学习——OSPF在帧中继网络中的配置

目录 主要命令 原理概述 实验目的 实验场景 实验拓扑 实验编址 实验步骤 1、基本配置 2、在帧中继上搭建OSPF网络 主要命令 //检查帧中继的虚电路状态 display fr pvc-info//检查帧中继的映射表 display fr map-info//手工指定OSPF邻居,采用单播方式发送报文 [R1]os…

课程管理系统

摘 要 在大学里,课程管理是一件非常重要的工作,教学工作人员每天都要与海量的数据和信息打交道。确保数据的精确度和完整程度,影响着每一位同学的学习、生活和各种活动的正常展开,更合理的信息管理也为高校工作的正规化运行和规范…

QThread 与QObject::moveToThread在UI中的应用

1. QThread的两种用法 第一种用法就是继承QThread,然后覆写 virtual void run(), 这种用法的缺点是不能利用信号槽机制。 第二种用法就是创建一个线程,创建一个对象,再将对象moveToThread, 这种可以充分利用信号槽机制&#xff…

Docker:Harbor

目录 一、Harbor介绍 二、安装 Harbor 2.1 环境准备 2.2下载 Harbor 3.3 修改配置(可选) 3.4 启动 Harbor 3.5访问 Harbor 三、使用 Harbor 3.1 管理Harbor 一、Harbor介绍 Docker Harbor 是由 VMware 公司开源的一款企业级的 Docker Registry …

基于JSP技术的个性化影片推荐系统

开头语:你好呀,我是计算机学长猫哥!如果有相关需求,文末可以找到我的联系方式。 开发语言:Java 数据库:MySQL 技术:JSPServlet 工具:MyEclipse、Tomcat、MySQL 系统展示 首页 …

kafka的基本模型

kafka官网 线程和线程之间的数据交互 在jvm里不同的线程有自己的栈内存,但彼此之间交互可以在共享的内存中进行,即堆内存,堆内存会将这些消息放到队列中,具体实现jvm见,栈内存各自维护,堆内存大家共享 进…

DLS平台:美联储松绑预期升温,金价飙升至2365美元

摘要 美联储鹰派官员古尔斯比对降息态度有所松动,导致金价一度升至2365美元。市场对美联储未来的货币政策预期有所改变,黄金作为避险资产的吸引力增强。本文将详细分析美联储官员态度变化对金价的影响、当前市场对黄金的预期及其未来走势。 美联储官员态…

Pyqt QCustomPlot 简介、安装与实用代码示例(二)

目录 前言实用代码示例彩色图演示散点像素图演示实时数据演示多轴演示对数轴演示 结语 所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 nixgnauhcuy’s blog! 如需转载,请标明出处! 完整代码我已经上传到…