问题描述

分享一个之前遇到的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(第一个输出 PLLP)或者 Q(第二个输出 PLLQ)的分频器分频之后,最后才生成最终的主 PLL 时钟。计算公式:

PLL = HSE_VALUE * N / (M*P)

8M晶体计算:

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

25M晶体计算:

PLL = HSE_VALUE * N / (MP) = 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!

推荐阅读:


我的博客:www.wangchaochao.top

或微信扫码关注我的公众号

最新文章

  1. HTTP学习二:Web应用中的HTTP
  2. 如何使用Dubbo服务和集成Spring
  3. CA 证书
  4. Mac下生成RSA密钥
  5. Laravel Eloquent 的条件不等于
  6. JAVA设计模式-工厂模式(代码示例)
  7. SQL SERVER中如何格式化日期(转)
  8. MVC快速分页
  9. Javascript正则表达式(上)
  10. 详解EBS接口开发之库存事务处理-物料批次导入
  11. Java数据结构和算法 - 什么是2-3-4树
  12. db2 常见错误以及解决方案[ErrorCode SQLState]
  13. TCP的概念
  14. swift 关于FDFullscreenPopGesture的右滑返回
  15. AX_CreateAndPostInventJournal
  16. oracle expdp自动备份脚本
  17. 【BZOJ3456】轩辕朗的城市规划 无向连通图计数 CDQ分治 FFT 多项式求逆 多项式ln
  18. JS设计模式(13)状态模式
  19. 广播多路访问链路上的OSPF
  20. [工具] 将Sublime Text 3配置为C++代码编辑器

热门文章

  1. bs4-爬取小说
  2. Multi-Camera Coordination and Control in Surveillance Systems: A Survey 阅读笔记
  3. 你的SpringBoot应用真的部署更新成功了吗
  4. js中innerHTML和outerHTML的相同与不同
  5. 什么是渐进式框架 (vue.js)
  6. iOS Core Animation 简明系列教程
  7. &#128293;&#128293;&#128293;Spring Cloud进阶篇之Eureka原理分析
  8. HTML语言和CSS开发商业站点 错题
  9. BZOJ 1191: [HNOI2006]超级英雄Hero(二分图匹配)
  10. 浅谈C++虚函数机制