STM32 串口打印乱码(Cubemx)

devtools/2024/10/18 16:41:19/

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.ppmy.cn/devtools/14572.html

相关文章

用C#写一个读取pdf文档内容的库

安装这两个库,第二个库一定要安装否则有些pdf文件读取会出现异常 读取 using iText.Kernel.Pdf; using iText.Kernel.Pdf.Canvas.Parser; using iText.Kernel.Pdf.Canvas.Parser.Listener;namespace TestReadPdf {public static class PdfHelper{public static IE…

如何通过cURL库实现远程控制插座

如何通过cURL库实现远程控制插座呢? 本文描述了使用cURL库调用HTTP接口,实现控制插座,即插即用,先插入插座,再接电器,实现远程控制。 可选用产品:可根据实际场景需求,选择对应的规格…

Java中toString()方法的理解与使用

Java中toString()方法的理解与使用 在Java编程中,toString()方法是一个非常重要的方法,它属于Object类,因此所有的Java对象都继承了这个方法。toString()方法的主要作用是将对象转换为其字符串表示形式,这对于调试、日志记录和用…

pnpm的安装与配置(Windows/macOS)

📦 PNPM的安装与配置(Windows与macOS) 🪟 Windows系统下安装与配置PNPM 步骤一:安装Node.js 首先,访问 Node.js官方网站 获取适用于Windows操作系统的最新稳定版安装程序。在安装过程中,请确…

春秋云镜 CVE-2023-51048

靶标介绍: S-CMS v5.0 被发现存在SQLI。 开启靶场 根据题目查找S-CMS v5.0漏洞,百度没有查询到,使用必应搜索S-CMS v5.0 查找到githubCVE-2023-51052的描述 S-CMS v5.0 was discovered to contain a SQL injection... CVE-2023-51052 Git…

为AI电脑生态注入强悍动力,安耐美PlatiGemini 1200W高性能电源

在DIY攒机的过程中,电源是非常重要的一环,现在高性能的硬件功耗往往很高,因此一款优秀的电源整个系统稳定运行的基石。最近,我发现一款由安耐美(Enermax)推出的PlatiGemini 1200W电源,它不仅满足…

玄子Share-磁盘管理与文件系统

玄子Share-磁盘管理与文件系统 磁盘介绍 磁盘又称为硬盘,是计算机中的外部存储设备,负责存储计算机数据,并且断电后保持数据不丢失 文件系统分类 基于Windows操作系统 NTFS Windows server 2003/2008/2022/2016服务器默认的文件系统FAT1…

本地wsl的Ubuntu安装docker,不使用docker桌面版

第一步:安装docker引擎 建议大家去docker官网那边看 Install Docker Engine on Ubuntu | Docker Docs 第二步:使用以下命令 sudo update-alternatives --config iptables 选1就对了 第三步:启动docker service docker start