STM32 串口打印乱码(Cubemx)

STM32 串口打印乱码(Cubemx)

  • 时钟配置错误,CubeMX默认的外部晶振是25MHz,而板载的晶振为8MHz
  • STM32F407修改程序将外部25M晶振修改为8M(标准库、HAL库)

核心问题

  • 芯片型号与晶振配置:使用的STM32F407ZGT6芯片默认的系统时钟配置在标准库中假设为25 MHz的外部晶振。但实际上,硬件板子上使用的是8 MHz的晶振。
  • 影响的范围:系统时钟(包括PLL设置)错误会直接影响到所有依赖系统时钟的外设,包括但不限于UART(串口通信)。由于PLL(相位锁定环)用于倍频处理,晶振的频率直接影响到最终的系统时钟输出,如果晶振设置错误,计算出来的系统时钟频率也将错误。

通信现象解释

  • 接收无误,发送乱码:当串口调试助手发送数据到单片机时,接收部分仍然能够正常工作,可能是因为UART接收部分对时钟不精确度的容忍性相对更高。但在发送数据时,如果系统时钟频率不准确,将导致波特率计算错误,进而使得发送数据时序不正确,从而产生乱码。
  • 调试助手正常工作:由于单片机接收正确的数据并能正确回传到PC,说明PC端的串口调试助手设置是正确的,问题主要出在单片机发送部分的时钟配置。

解决步骤

  1. 时钟配置调整:需要重新配置STM32F407的时钟系统,确保基于实际的8 MHz晶振来设置。这包括调整PLL的参数,以确保系统核心时钟(HCLK)、外设时钟(PCLK1、PCLK2)和其他相关时钟正确设置。
  2. 标准库时钟配置:在使用STM32标准库时,通常需要修改system_stm32f4xx.c文件中的时钟设置部分,具体为修改宏定义HSE_VALUE(定义外部高速晶振的值),从默认的25000000更改为8000000
  3. 重新编译和下载:调整时钟设置后,重新编译程序,并下载到单片机中进行测试。

总结来说,确保单片机的系统时钟配置正确是关键步骤,特别是在使用不同于标准设置的硬件配置时。这将确保所有时钟敏感的外设,如UART,能够在正确的时钟下正常工作。

晶振配置错误后果

晶振配置错误导致的问题主要与单片机内部时钟源的设置密切相关。晶振是微控制器的主要时钟源之一,提供了系统运行的基础频率。这里是详细的解释:

晶振的角色和作用

晶振(Crystal Oscillator)在微控制器系统中充当基础时钟源,提供精确的、稳定的振荡频率。这个频率用作微控制器的主要时钟输入,影响系统的运行速度和各种外设的功能。

如何影响系统时钟

在STM32微控制器中,外部晶振的频率是系统时钟配置的基础。通过使用PLL(相位锁定环),这个频率可以被倍增,生成用于核心处理器(CPU)、存储器和外设的时钟信号。例如,如果晶振配置为8 MHz,但系统设置错误地认为是25 MHz,使用相同的PLL倍频设置将得到完全不同的输出频率。这会导致所有依赖这些时钟的微控制器功能出现问题。

对UART的具体影响

UART(通用异步接收/发送器)是依赖精确时钟来同步数据传输的外设。UART波特率,即每秒传输的位数,需要基于系统时钟精确计算。如果系统时钟不正确,将导致:

  • 发送的每个位的持续时间错误:如果系统时钟过高或过低,实际的波特率将与设置的波特率不匹配,导致接收端无法正确解析发送的数据。
  • 接收时钟容错:虽然UART接收逻辑设计有一定的容错能力,能在一定程度上适应波特率的偏差,但过大的时钟误差仍然会导致接收错误。

示范和验证

如果一个系统设计为使用25 MHz晶振,但实际装配了8 MHz晶振,没有相应调整时钟设置,则系统实际运行的核心频率可能远低于预期,或者PLL无法锁定导致系统不稳定。对于UART,这意味着如果预期的通信速率为115200波特率,实际的波特率可能完全不同,从而导致发送乱码。

结论

正确配置晶振和系统时钟是确保微控制器及其外设正常运行的关键。对于任何依赖精确时钟的应用,如串口通信、USB通信或任何形式的同步数据传输,确保晶振设置正确是至关重要的。这不仅影响系统的稳定性和性能,也是可靠通信的基础。

解决

  • 正确配置如下,注意红框部分

在这里插入图片描述

  • 错误配置如下,注意红框部分

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入探究音视频开源库WebRTC中NetEQ音频抗网络延时与抗丢包的实现机制

目录 1、引言 2、WebRTC简介 3、什么是NetEQ? 4、NetEQ技术详解 4.1、NetEQ概述 4.2、抖动消除技术 4.3、丢包补偿技术 4.4、NetEQ概要设计 4.5、NetEQ的命令机制 4.6、NetEQ的播放机制 4.7、MCU的控制机制 4.8、DSP的算法处理 4.9、DSP算法的模拟测试…

Redis之路系列(5)功夫在诗外

5 拓展篇—功夫在诗外 6.0新特性 相对都比较鸡肋,谨慎在生产环境使用 ACL安全策略 Redis6版本推出了ACL(Access Control List)访问控制权限 的功能,基于此功能,可以设置多个用户,并且给每个用户单独设 置命令权限和数据权限。 …

【Linux高性能服务器编程】两种高性能并发模式剖析——领导者/追随者模式

hello !大家好呀! 欢迎大家来到我的Linux高性能服务器编程系列之两种高性能并发模式介绍,在这篇文章中,你将会学习到高效的创建自己的高性能服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家来理解…

【行为型模式】中介者模式

一、中介者模式概述 中介者模式定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式。(对象行为型模式) 中介者模式…

Web3与物联网:探索区块链如何驱动智能设备的未来

引言 在数字化快速发展的时代,Web3技术和物联网(IoT)都成为了前沿技术的代表。两者的结合正逐渐展现出无限的可能性,尤其是在智能设备和数据安全方面。本文将深入探讨Web3如何与物联网相结合,以及这种结合对未来智能设…

有效三角形的个数 ---- 双指针

题目链接 题目: 分析: 这道题的意思就是将数组的元素, 拿出三个数, 能构成三角形就是有效的判断是否能构成三角形的条件: 两边之和大于第三边, 我们只需找到三个数中最小的两个数之和是否大于第三边, 大于则可以构成三角形解法一: 暴力解法, 即找到所有的三元组, 并挨个判断,…

分布式与一致性协议之CAP(二)

CAP CAP不可能三角 CAP不可能三角是指对于一个分布式系统而言,一致性、可用性、分区容错性指标不可兼得,只能从中选择两个, 如图所示。CAP不可能三角最初是埃里克布鲁尔(Eric Brewer)基于自己的工程实践提出的一个猜想,后被塞斯吉…

【C语言 |预处理指令】预处理指令详解(包括编译与链接)

目录 一、编译与链接 1.翻译环境 -预处理 -编译 -汇编 -链接 2.执行环境 二、预定义符号 三、#define定义常量 四、#define定义宏 五、带有副作用的宏参数 六、宏替换的规则 七、 宏函数的对比 八、#和## 1.#运算符 2.##运算符 九、命名约定 十、#undef 十一、 命…

【03-掌握Scikit-learn:深入机器学习的实用技术】

文章目录 前言数据预处理缺失值处理数据缩放特征选择模型训练参数调整模型评估总结前言 经过了对Python和Scikit-learn的基础安装及简单应用,我们现在将更深入地探究Scikit-learn的实用技术,以进一步提升我们的数据科学技能。在本文中,我们将涵盖数据预处理、特征选择、模型…

【唯美情侣爱情表白纪念HTML单页】

唯美情侣爱情表白纪念HTML单页 效果图部分代码领取代码下期更新预报 效果图 整图 背景图 部分代码 index.html <!DOCTYPE html> <html lang"en"><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"…

YOLOv8 实现车牌检测,生成可视化检测视频(20240424)

原项目源码地址&#xff1a;GitHub 我的源码地址&#xff1a;Gitee 环境搭建请参考&#xff1a;Win10 搭建 YOLOv8 运行环境&#xff08;20240423&#xff09;-CSDN博客 环境测试请参考&#xff1a;本地运行测试 YOLOv8&#xff08;20240423&#xff09;-CSDN博客 训练数据…

《系统架构设计师教程(第2版)》第15章-面向服务架构设计理论与实践-05-SOA设计模式

文章目录 1. 服务注册表模式1.1 服务注册表1.2 SOA治理功能1.3 注册表中的配置文件 2. 企业服务总线&#xff08;ESB&#xff09;模式3. Synchro ESB3. 微服务模式3.1 概述3.2 微服务架构模式方案3.2.1 聚合器微服务1&#xff09;概述2&#xff09;几种特殊的聚合微服务 3.2.2 …

RTT学习 cortex-m移植

Cortex-M移植 PRIMASK寄存器 PRIMASK寄存器为1位宽的中断屏蔽寄存器。在置位时&#xff0c;它会阻止不可屏蔽中断&#xff08;NMI&#xff09;和HardFault异常之外的所有异常&#xff08;包括中断&#xff09;。实际上&#xff0c;它是将当前异常优先级提升为0&#xff0c;这也…

Jenkins CI/CD 持续集成专题四 Jenkins服务器IP更换

一、查看brew 的 services brew services list 二、编辑 homebrew.mxcl.jenkins-lts.plist 将下面的httpListenAddress值修改为自己的ip 服务器&#xff0c;这里我是用的本机的ip 三 、重新启动 jenkins-lts brew services restart jenkins-lts 四 、浏览器访问 http://10.…

golang学习笔记(defer基础知识)

什么是defer defer语句用于golang程序中延迟函数的调用&#xff0c; 每次defer都会把一个函数压入栈中&#xff0c; 函数返回前再把延迟的函数取出并执行。 为了方便描述&#xff0c; 我们把创建defer的函数称为主函数&#xff0c; defer语句后面的函数称为延迟函数。延迟函数…

【Burpsuite靶场】XSS专题精讲

【个人】&#xff1a;NEUQ大一学生 【专业】&#xff1a;通信工程 (Communication Engineering) 【个人方向】&#xff1a;网安、开发双管齐下 【座右铭】&#xff1a;真正的英雄主义,就是看清生活的真相后依然热爱生活 -- 罗曼.罗兰 一、认识XSS&#xff08;跨站脚本攻击&…

fatal: unable to access ‘https://github.com/alibaba/flutter_boost.git/

Git error. Command: git fetch stdout: stderr: fatal: unable to access ‘https://github.com/alibaba/flutter_boost.git/’: Failed to connect to github.com port 443 after 75005 ms: Couldn’t connect to server exit code: 128 GitHub (国际型)代码 分发平台/托管平…

梯度下降法总是在同一点收敛吗?

梯度下降法总是在同一点收敛吗&#xff1f; 梯度下降法并不总是在同一点收敛。梯度下降法的收敛取决于多个因素&#xff0c;包括初始参数的选择、学习率的设置、损失函数的形状等。 以下是一些影响梯度下降法收敛行为的关键因素&#xff1a; 1.初始参数&#xff1a; 初始参数…

Json-server 模拟后端接口

json-server&#xff0c;模拟rest接口&#xff0c;自动生成增删改查接口。(官网地址&#xff1a;json-server - npm) 使用方法&#xff1a; 1. 安装json-server&#xff0c;npm i json-server -g 2. 创建json文件&#xff0c;文件中存储list数据&#xff0c;db.json {"…

图像超分辨率技术在AI去衣中的应用探索

在数字图像处理领域&#xff0c;图像超分辨率&#xff08;Super-Resolution, SR&#xff09;技术一直是研究的热点之一。该技术旨在从低分辨率的图像中恢复出高分辨率的图像&#xff0c;以提供更清晰、更丰富的细节信息。近年来&#xff0c;随着人工智能&#xff08;AI&#xf…
最新文章