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

本文主要是介绍STM32F407外部晶振改为25M后芯片死机检测不到芯片的解决办法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 问题
    • 问题分析
    • 解决办法
    • STM32F4主时钟的计算公式
      • 推荐阅读:

问题

使用正点原子的STM32F407代码,下载到外部晶体为25MHz的开发板上,LED不闪烁,串口无输出,单片机直接死机,调试器检测不到芯片。

问题分析

正点原子的STM32F407探索者开发板,焊接的是8M的晶体,而官方固件库里默认为25M的晶体,所以在正点原子的开发教程和示例代码中都把官方库做了一定的修改,即:

官方固件,适用于外部25M晶体:

  • 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

正点原子修改,适用于外部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

按理说,频率错误,应该只是串口乱码和定时器不准确,不知道为什么会导致程序直接没跑起来,死机了,连芯片都检测不到。

解决办法

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

  • 1.使用官方固件库默认文件,即直接把官方固件库的中的stm32f4xx.h文件和system_stm32f4xx.c文件替换工程下的文件。
  • 2.修改正点原子工程里的文件。

以上两种方法都一样,都是修改晶体频率HSE_VALUE和倍频系数PLL_M。

  • 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秒钟,再松开复位按键,这样就可以下载进去了,程序正常运行,Perfect!

STM32F4主时钟的计算公式

8M晶体计算:

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

25M晶体计算:

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

推荐阅读:

  • 阿里平头哥首次交货——玄铁910是个啥?是芯片吗?
  • Qt平台下使用QJson解析和构建JSON字符串
  • 国产处理器的逆袭机会——RISC-V
  • 真正的RISC-V开发板——VEGA织女星开发板开箱评测
  • 【2019北京国际消费电子博览会】参观总结
  • Qt实现软件自动更新的一种简单方法

  • 我的博客:www.wangchaochao.top
  • 我的公众号:mcu149

这篇关于STM32F407外部晶振改为25M后芯片死机检测不到芯片的解决办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/382484

相关文章

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

电脑死机无反应怎么强制重启? 一文读懂方法及注意事项

《电脑死机无反应怎么强制重启?一文读懂方法及注意事项》在日常使用电脑的过程中,我们难免会遇到电脑无法正常启动的情况,本文将详细介绍几种常见的电脑强制开机方法,并探讨在强制开机后应注意的事项,以及如何... 在日常生活和工作中,我们经常会遇到电脑突然无反应的情况,这时候强制重启就成了解决问题的“救命稻草”。那

SQL server配置管理器找不到如何打开它

《SQLserver配置管理器找不到如何打开它》最近遇到了SQLserver配置管理器打不开的问题,尝试在开始菜单栏搜SQLServerManager无果,于是将自己找到的方法总结分享给大家,对SQ... 目录方法一:桌面图标进入方法二:运行窗口进入方法三:查找文件路径方法四:检查 SQL Server 安

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

MySQL错误代码2058和2059的解决办法

《MySQL错误代码2058和2059的解决办法》:本文主要介绍MySQL错误代码2058和2059的解决办法,2058和2059的错误码核心都是你用的客户端工具和mysql版本的密码插件不匹配,... 目录1. 前置理解2.报错现象3.解决办法(敲重点!!!)1. php前置理解2058和2059的错误

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

电脑提示找不到openal32.dll文件怎么办? openal32.dll丢失完美修复方法

《电脑提示找不到openal32.dll文件怎么办?openal32.dll丢失完美修复方法》openal32.dll是一种重要的系统文件,当它丢失时,会给我们的电脑带来很大的困扰,很多人都曾经遇到... 在使用电脑过程中,我们常常会遇到一些.dll文件丢失的问题,而openal32.dll的丢失是其中比较

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于