IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 第三章 串口通信乱码的问题以及stm32时钟源的设置 -> 正文阅读

[嵌入式]第三章 串口通信乱码的问题以及stm32时钟源的设置

串口通信乱码的问题

继上次调好CAN通信之后,在做蓝牙和232通讯的过程中发现传回来的数始终是乱码,折磨了一段时间,在排除了串口协议设置本身的问题之后,最后得出结论:移植板子的过程中一定要弄清楚单片机时钟的关系

波特率的问题归根到底是时钟的问题

首先考虑到:stm32f407和stm32f427的区别最主要是系统时钟不一样(前者是168Mhz,后者是180MHZ,所以在移植的时候也把重心放到了此处,只是当时仅仅改了一个声明,并没有考虑到硬件

原理图硬件的重要性

32时钟的配置一般在system_stm32f4xx.c文件和stm32f4xx.h文件中表现。

首先在system_stm32f4xx.c的开头导入了stm32f4xx.h,而在stm32f4xx.h文件中定义了满足你芯片型号的晶振变量。对应代码片段为:

①高速外部晶振HSE的选择:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u5G9eyin-1642315023799)(C:\Users\Sherlock\AppData\Roaming\Typora\typora-user-images\image-20220116140559004.png)]

其中画红线部分是你使用单片机的选型,不同的选型对应的是不同的HSE(蓝色划线部分),比如我现在使用的是stm32f427,而在这之前我使用的是正点原子的芯片,从原理图上看,正点原子用的外部晶振是8Mhz。(如下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2XYUjGje-1642314970758)(C:\Users\Sherlock\AppData\Roaming\Typora\typora-user-images\image-20220116141027485.png)]

而我目前用的stm32427芯片原理图上看是12MHZ(如下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sqOyuRQf-1642314970759)(C:\Users\Sherlock\AppData\Roaming\Typora\typora-user-images\image-20220116140958211.png)]

所以此时,我们需要把文件里定义的HSE晶振频率改为你所用单片机原理图OSC_IN和OSC_OUT对应的晶振(单位为MHZ的那个),修改如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wJ4gQDQp-1642314970759)(C:\Users\Sherlock\AppData\Roaming\Typora\typora-user-images\image-20220116141234489.png)]

** 注意

如果你在编译器的环境变量中定义了HSE(HSE_VALUE)值,那么你应该修改环境变量里的那个HSE值,比如我现在用的是IAR编译器:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LLABwakr-1642314970759)(C:\Users\Sherlock\AppData\Roaming\Typora\typora-user-images\image-20220116141512673.png)]

有些定义HSE的代码是直接写在system_stm32f4xx.c文件中的,那么就在.c文件中改。

修改system_stm32f4xx.c对应的系数PLL_M PLL_N PLL_P PLL_Q

回到一开始的问题,407和427的主要区别在于二者系统时钟即SystemCoreClock不一样,你会在.c文件中看到不同型号单片机的系统时钟赋值,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U1EL89AK-1642314970760)(C:\Users\Sherlock\AppData\Roaming\Typora\typora-user-images\image-20220116142041125.png)]

但赋值本质上只是给了一个数而已,单片机是一个硬件,真正的SystemCoreClock是通过硬件上的晶振所决定的(可以使用高速外部时钟源HSE,也可以使用高速内部时钟源HSI),这里我们一直使用的是HSE。

那么由硬件决定的HSE是如何计算得到系统时钟的呢?

在system_stm32f4xx.c文件中给出了以下公式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xAsa5alL-1642314970760)(C:\Users\Sherlock\AppData\Roaming\Typora\typora-user-images\image-20220116142759952.png)]

PLL_VCO input clock = (HSE_VALUE or HSI_VALUE / PLL_M),
 根据手册,这个值被建议在 1~2MHz,间接可以算出M范围
PLL_VCO output clock = (PLL_VCO input clock) * PLL_N
 根据手册,这个值被建议在 192~432MHz,间接可以算出M范围
System Clock = (PLL_VCO output clock)/PLL_P 
 根据手册,系统时钟应小于等于120M,间接可以算出P范围
 OTHER Clock = (PLL_VCO output clock)/PLL_Q ,
这个系数用来配置SD卡读写,USB等功能,应小于等于48M,间接可以算出Q范围

所以具体的赋值是根据以上公式得来的,最终得出的System Clock即为你单片机的系统时钟。而你的目的就是要让System Clock等于你想要的值(比如我的是180MHZ)

以下是不同单片机型号的时钟配置:包括stm32f40_41系列、stm32f42_43系列.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XRjb8wUB-1642314970760)(C:\Users\Sherlock\AppData\Roaming\Typora\typora-user-images\image-20220116143214567.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jLOrdutf-1642314970761)(C:\Users\Sherlock\AppData\Roaming\Typora\typora-user-images\image-20220116143233559.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8RI72wTt-1642314970761)(C:\Users\Sherlock\AppData\Roaming\Typora\typora-user-images\image-20220116143252064.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gysVok5U-1642314970762)(C:\Users\Sherlock\AppData\Roaming\Typora\typora-user-images\image-20220116143303363.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J7WUnTlf-1642314970762)(C:\Users\Sherlock\AppData\Roaming\Typora\typora-user-images\image-20220116143314706.png)]

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:38:55  更:2022-01-17 11:41:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:38:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码