STM32F407外部晶体改为25M后检测不到芯片的解决办法

简介: STM32F407外部晶体改为25M后检测不到芯片的解决办法

640.jpg

问题描述

分享一个之前遇到的STM32F4晶体频率问题,导致单片机死机的解决办法。使用一款新的F4开发板,直接使用的正点原子STM32F407工程模板代码,管脚配置正确,下载到外部晶体为25MHz的开发板之后,LED不闪烁,串口无输出,单片机直接死机,调试器检测不到芯片。


问题分析

之前写过一篇文章:STM32串口打印输出乱码的解决办法,那个F103乱码是因为外部晶体频率12M,而程序中8M对应不上,导致的串口乱码和定时器定时不准确,但是单片机并没有死机,程序还可以正常下载,解决办法也很简单,只需要修改程序中的外部高速时钟频率(HSE_VALUE)和倍频系数(RCC_CFGR_PLLMULL6)即可,而现在F407的这个情况貌似和之前F103的那个问题一样,也是晶体频率配置的问题,但是这个是直接死机了,单片机并没有工作。现在的开发板晶体频率是25M,而正点原子开发板的晶体频率是8M,应该就是这个问题导致的。在《正点原子F407开发指南》中新建工程模板章节,官方固件库中默认的晶体频率是25MHz,为了适配板子的8M晶体,修改了如下两个参数:


stm32f4xx.h文件

#if !defined  (HSE_VALUE)
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */


system_stm32f4xx.c文件

#if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx)
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M      8


所以解决办法很简单,只需要修改程序中的晶体频率倍频系数即可。


解决办法

知道了问题的来源,解决就非常简单了,只需要修改以上两个宏定义的值就可以。

这里涉及到STM32F4主时钟的计算,主 PLL 时钟的时钟源要先经过一个分频系数为 M 的分频器,然后经过倍频系数为 N 的倍频器出来之后的时候还需要经过一个分频系数为 P(第一个输出 PLL_P)或者 Q(第二个输出 PLL_Q)的分频器分频之后,最后才生成最终的主 PLL 时钟。计算公式:

PLL = HSE_VALUE * N / (M*P)


8M晶体计算:

PLL = HSE_VALUE * N / (M*P) = 8M* 336 /(8*2) = 168MHz


25M晶体计算:

PLL = HSE_VALUE * N / (M*P) = 25M* 336 /(25*2) = 168MHz


所以25M晶体对应的HSE_VALUE=25000000,PLL_M=25,修改程序中的

stm32f4xx.h文件122行:

#if !defined  (HSE_VALUE)
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz *


system_stm32f4xx.c文件316行:

#if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx)
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M      25


修改完成后,重新编译工程,正常的话,应该还是调试器检测不到芯片,无法进行程序下载,所以为了挽救死机的芯片重新下载程序。我们需要在下载程序之前,先按住复位键不松开,然后点击下载按钮,等1秒钟,再松开复位按键,这样就可以下载进去了,程序正常运行,Amazing!



目录
相关文章
|
6月前
|
传感器 编解码 数据处理
毕业设计|基于STM32单片机的水位浑浊度检测设计
毕业设计|基于STM32单片机的水位浑浊度检测设计
802 0
|
6月前
|
传感器 物联网 芯片
毕业设计 基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测
毕业设计 基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测
126 0
|
24天前
|
传感器 数据采集 监控
基于STM32的温室大棚环境检测及自动浇灌系统设计
基于STM32的温室大棚环境检测及自动浇灌系统设计
213 0
STM32速成笔记(三)—按键检测
本文介绍了如何利用STM32进行按键检测,先介绍了原理,后面给出了配置步骤和应用例程。此外,本文还叙述了如何利用一个按键单独控制一个LED亮灭,以及如何检测按键长短按。
634 0
STM32速成笔记(三)—按键检测
|
6月前
|
传感器 存储 编解码
毕业设计|基于STM32的酒精酒驾检测设计
毕业设计|基于STM32的酒精酒驾检测设计
289 0
|
6月前
|
数据安全/隐私保护 芯片
【STM32基础 CubeMX】按键的检测
【STM32基础 CubeMX】按键的检测
163 0
|
传感器 机器人
STM32 E18-D80NK红外检测
E18-D8ONK 这是一种 集发射与接收于一体 的光电传感器,发射光经过调制后发出,接收头对反射光进行解调输出。有效的避免了可见光的干扰。透镜的使用,也使得这款传感器最远可以检测80厘米距离的问题(由于红外光的特性,不同颜色的物体,能探测的最大距离也有不同;白色物体最远,黑色物体最近)。
410 0
|
传感器 C语言 芯片
【STM32】I2C协议完成温湿度检测
I2C总线是英国的菲利普公司在八十年代初期退出来的一种串行的、半双工的总线,主要是用于一些近距离、低速的芯片之间的通信;I2C总线有两根双向的信号线,一根SDA用于收发数据、一根时钟线SCL用于通信双方时钟的同步。
【STM32】I2C协议完成温湿度检测
|
JavaScript 芯片
[踩坑]STM32外部8M晶体不起振会有什么现象?
[踩坑]STM32外部8M晶体不起振会有什么现象?
413 0
[踩坑]STM32外部8M晶体不起振会有什么现象?
|
传感器 数据采集 编解码
基于STM32设计的环境检测设备
设计以STM32微控制器为平台,采用DHT11温湿度传感器、烟雾传感器MQ-2、易燃气体传感器MQ-4、空气质量检测传感器MQ-135对室内温湿度和危险气体进行采集。通过wifi无线网络将数据传送给微控制器,STM32微控制器处理数据后,由自带oled液晶屏显示。当室内温度达到预警值或有危险气体时,系统将会自动警报并将警报信息通过wifi网络传输给客户手机。且每隔一段时间会通过wifi自动发送监测信息到手机,从而实现对室内环境的监测及报警功能。
793 0