文章目录

  • 问题
  • 问题分析
  • 解决办法
  • 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后芯片死机检测不到芯片的解决办法相关推荐

  1. STM32 F103 外部晶振8M改为12M

    stm32 实现外部晶振变换有2种方法: 第一种修改系统库函数: 第一步,打开stm32f10x.h,将  #define HSE_VALUE    ((uint32_t)8000000)  修改为: ...

  2. STM32F10x 更改外部晶振后,修改时钟频率的方法

    转载自:https://blog.csdn.net/qq_26039331/article/details/78751047 此文章为引用 正点原子详细讲解 刚刚接触STM32的时候,用的都是8M晶振 ...

  3. stm32f105使用12M外部晶振

    cl:互联型产品,stm32f105/107系列 vl:超值型产品,stm32f100系列 xl:超高密度产品,stm32f101/103系列 ld:低密度产品,FLASH小于64K md:中等密度产 ...

  4. stm32不使用外部晶振管脚怎么处理_stm32103如果不用32k晶振,那引脚是悬空还是接地?...

    如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空. 2)对于少于100脚的产品,有2种接法: 2.1)OSC_I ...

  5. 让Atmega8A-PU 支持外部晶振的熔丝设置

    这段时间搞了个arduino玩,感觉买的板子不过瘾,照着网上的教程折腾Arduino最小系统,过程非常曲折,现将部分内容总结记录下来,以备日后查阅. 参考文章:Arduino 1.0--让最小系统更简 ...

  6. 单片机外部晶振-XTAL和EXTAL引脚

    文章目录 1 单片机外部晶振-XTAL和EXTAL引脚 1.1 有源晶振 1.2 无源晶振 1.3 问答时间 - 传送门 ==>> AutoSAR实战系列300讲「糖果Autosar」总目 ...

  7. stm32启用内部晶振(stm32设置外部晶振)

    STM32中的晶振电路有什么作用 stm32  有两个可接入的外部晶振,自己内部也有低俗的晶振.举个例子,手册也有说明低速主要给RTC使用了,高速是给一些外设及内核提供时钟元,内部的主要是给看门狗用或 ...

  8. 怎样辨别内部晶振与外部晶振

    一.单片机晶振简单介绍 单片机晶振是单片机内部电路产生单片机所需的时钟频率的部件,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率.晶振 ...

  9. 关于STM32 RTC时钟使用内部/外部晶振的切换方法

    对于使用STM32单片开发项目的同志,经常会使用到STM32的RTC功能,而在配置RTC的功能时需要配置晶振的使用,可以使用内部晶振或外部晶振,配置流程参考官方的示例代码即可. 但在之前的项目中遇到一 ...

  10. STM32 USB虚拟串口调试总结(内部晶振、外部晶振配置、硬件电路说明、测试方法)

    目录 1.参考链接: 2.虚拟串口硬件说明 2.1.程序中无需配置硬件的设计:D+直接接了3.3V的上拉电阻. 2.2.需要程序中配置D+上拉电阻使能的设计:可以软件模拟USB插拔,便于固件更新后自动 ...

最新文章

  1. oracle个性化,Oracle:个性化营销成功的五细则
  2. linux-squirrel
  3. linux备份目录命令tar,Tar命令备份还原Linux系统
  4. 学会用core dump调试程序错误
  5. BestCoder Round #4 前两题 hdu 4931 4932
  6. opacity用法:
  7. CSS选择器学习笔记
  8. (11)css常用样式—display显示模式
  9. table 的 id 属性不被 document.getElementById支持
  10. 【Git/Github学习笔记】Github的使用介绍
  11. zookeeper 限制本机ip访问_解Bug之路-dubbo应用无法重连zookeeper
  12. 读书笔记2014第12本:《创新者的窘境》
  13. node2vec python_论文笔记 | node2vec
  14. iOS股票K线图、分时图绘制
  15. vs2015 linux开发 界面设计,Microsoft Office开发工具 Visual Studio 2015
  16. win10/win7文件夹或文件查看方式怎么统一设置
  17. 随机算法 之随机数的产生
  18. mysql 6安装当前密码_windows安装mysql数据库并修改密码
  19. token代替session使用
  20. Linux sudo命令报错:用户不在sudoers文件中

热门文章

  1. matlab实验报告老师评语,实验报告评语4篇
  2. 《多传感器融合定位》惯性导航基础(一)
  3. 5-10 天梯赛团队总分分数
  4. 组蛋白研究丨Worthington小牛胸腺组蛋白的特征及文献参考
  5. codeforces 1060E Sergey and Subway 树形dp
  6. Adobe Premiere Pro 和 After Effects 安装出错的解决路径
  7. 有了小程序,海外旅行太舒服了!
  8. PHP函数库(other)
  9. 发明了计算机体层成像 ct 的科学家是,发明了计算机体层成像(CT)的科学家是...
  10. 前端vue项目打包;如何让俩个项目共用一个端口(iis发布)