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电源系统开发可以跳转:暂未放链接

介绍

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

首先需要排除的问题:

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

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

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.mzph.cn/news/855425.shtml

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

相关文章

小程序分页新写法

// pages/query/query.js import {request } from ../../utils/request; Page({/*** 页面的初始数据*/data: {tabClickIndex: ,page: 1,limit: 10,listData: []},/*** 生命周期函数--监听页面加载*/onLoad(options) {this.getList()},/*** 生命周期函数--监听页面初次渲染完成*…

【JS】上传文件显示文件的为空,显示的文件参数内容只有uid

上传的文件参数file里面只包含uid,没有其他信息 例子解决办法 例子 例如使用elment ui的el-upload组件上传文件,会导致上传的文件参数file里面只包含uid,没有其他信息,如图: 正确应为如下图: 解决办法 …

云上战场:ToDesk云电脑、青椒云、顺网云全面对决

前言 记得端午放假期间,我已经在旅游的路上了,老板突然发短信,让我给他画个图,我手上的战斗机已经是十年前的老古董了(平常一直用的公司电脑,也没想过要换),压根满足不了老板的任务要求,不得已&…

WPF 程序 分布式 自动更新 登录 打包

服务器server端 core api 客户端WPF // 检查应用更新 //1、获取最新文件列表 // var files fileService.GetUpgradeFiles(); // 2、文件判断,新增的直接下载;更新的直接下载;删除的直接删除 // 客户端本地需要一个记录…

SpringMVC系列三: Postman(接口测试工具)

接口测试工具 💞Postman(接口测试工具)Postman介绍Postman是什么Postman相关资源Postman安装Postman快速入门Postman完成Controller层测试其它说明 💞课后作业 上一讲, 我们学习的是SpringMVC系列二: 请求方式介绍 现在打开springmvc项目 &#x1f49e…

2024年十大数据集成工具和软件应用场景解析

详细阐述了十大数据集成工具及其优缺点: 数据集成的挑战 在当今的商业环境中,企业常常面临着数据分散、系统孤立的难题。传统的数据集成方式,就像一张复杂的蜘蛛网,难以理顺,令人头痛不已。 数据孤岛: 各个业务系统独立…

【博士每天一篇文献-算法】Memory aware synapses_ Learning what (not) to forget

阅读时间:2023-12-13 1 介绍 年份:2018 作者:Rahaf Aljundi,丰田汽车欧洲公司研究员;阿卜杜拉国王科技大学(KAUST)助理教授;Marcus Rohrbach德国达姆施塔特工业大学多模式可靠人工智能教授 会议: Proceedings of the European c…

系统学习PLC

1.OB组织块 程序循环 PC ob1执行一次 ob123也执行一次 是 statup是程序启动的是第一个周期先执行starup(0b100)然后在执行ob1和0b123.这二个循环,周期执行这二个循环。1000是1s 2.DB块 建立指定数据块可以直接建立自己喜欢的类型 3.FB与…

【八股系列】介绍React高阶组件,适用于什么场景?

文章目录 1. HOC的工作原理2. 返回的新组件3. 适用场景4. 注意事项5. 示例代码 React高阶组件( Higher-Order Components,简称HOC)是 React中一种高级的 复用组件逻辑的技术。 HOC自身不是 React API的一部分,而是基于 Reac…

为何云原生是未来?企业IT架构的颠覆与重构(上)

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是云原生 2、云原生的背景和起源 背景 起源 关…

Android 查询及获取应用程序 Package 及 Acticity 名称的方法

一、通过命令查询和获取应用的Package及Acticity (一)通过命令查询应用包名及安装信息 以下是常用命令: 命令形式作用adb shell pm list packages查询系统中所有应用的包名adb shell pm list packages -s查询系统应用包名adb shell pm lis…

MySQL 函数

1、CURDATE():返回当前的日期。 2、查询当前年月 SELECT DATE_FORMAT(CURDATE(),%Y-%m) AS year_month 3、当前日期添加 1 个月 INTERVAL 1 MONTH 4、查询近6个月的月份 SELECT DATE_FORMAT(CURDATE(),%Y-%m)AS year_month UNION SELECT DATE_FORMAT((CURDAT…

【网络安全学习】使用Kali做信息收集 -03- <综合侦察>

综合侦察涉及从多个来源收集和分析目标的信息,以了解其背景、特征、潜在漏洞和风险。 下面介绍一些在Kali中常用的综合侦察工具。 1.Dmitry 它是一个命令行工具,可以使用不同的选项来收集目标的各种信息。 Dmitry可以与whois服务和Netcraft服务结合使…

【启明智显产品介绍】Model4 工业级HMI芯片详解系列专题(一):芯片性能

Model4 工业级HMI芯片详解系列专题(一)【芯片性能】 Model4系列工业级MPU是国产自主面向工业应用的RISC-V架构的应用级芯片,内置玄铁64bit RISC-V CPU C906,主频高达600MHz,算力约1380DMIPS。 Model4系列工业级MPU具…

BizDevOps全局建设思路:横向串联,纵向深化

本文来自腾讯蓝鲸智云社区用户:CanWay BizDevOps概述 IT技术交付实践方法在不断迭代中持续优化。在工业化时代,Biz(业务)、Dev(开发)、Ops(运维)三者往往相对分离,甚至有…

Transformer预测 | 基于Transformer+LSTM股票价格预测时间序列预测(Pytorch)

效果一览 基本介绍 股票行情是引导交易市场变化的一大重要因素,若能够掌握股票行情的走势,则对于个人和企业的投资都有巨大的帮助。然而,股票走势会受到多方因素的影响,因此难以从影响因素入手定量地进行衡量。但如今,借助于机器学习,可以通过搭建网络,学习一定规模的股…

API-操作元素内容

学习目标: 掌握操作元素内容 学习内容: 操作元素内容元素innerText属性元素innerHTML属性案例 操作元素内容: DOM对象都是根据标签生成的,所以操作标签,本质上就是操作DOM对象。就是操作对象使用的点语法。如果想要修…

Table 宽度超出页面宽度时,出现滚动条,单元格内容不换行实

修改前 方法 <div styleoverflow:auto><table stylewhite-space: nowrap></table> </div>修改后

@pytest.fixture与@pytest.mark.parametrize结合实现参数化

背景&#xff1a;测试数据既要在fixture方法中使用&#xff0c;同时也在测试用例中使用 使用方法&#xff1a;在使用parametrize的时候添加"indirectTrue"参数。pytest可以实现将参数传到fixture方法中&#xff0c;也可以在当前测试用例中使用。 原理&#xff1a;参…

Harbor本地仓库搭建003_Harbor常见错误解决_以及各功能使用介绍_镜像推送和拉取---分布式云原生部署架构搭建003

首先我们去登录一下harbor,但是可以看到,用户名密码没有错,但是登录不上去 是因为,我们用了负债均衡,nginx会把,负载均衡进行,随机分配,访问的 是harbora,还是harborb机器. loadbalancer中 解决方案,去loadbalance那个机器中,然后 这里就是25机器,我们登录25机器 然后去配置…