问题描述

分享一个之前遇到的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!

推荐阅读:

  • 详解串行通信协议及其FPGA实现
  • 玄铁910是个啥?是芯片吗?
  • 国产处理器的逆袭机会——RISC-V
  • 真正的RISC-V开发板——VEGA织女星开发板开箱评测
  • 【2019北京国际消费电子博览会】参观总结
  • Qt实现软件自动更新的一种简单方法

我的博客:www.wangchaochao.top

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

转载于:https://www.cnblogs.com/whik/p/11407678.html

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

  1. 联想V470 装ubuntu11 后 检测不到无线网之解决办法

    1.打开终端 sudo gedit /etc/modprobe.d/blacklist.conf 新开一行,输入如下内容: blacklist acer_wmi 2. 重启

  2. 断网后parsec无法检测发现台式机设备的解决办法

    描述:断网后parsec无法检测发现台式机设备的解决办法 步骤: 重新插拔网线

  3. Windows 下 Quartus 检测不到 USB-Blaster 终极解决办法

    Windows 下 Quartus 检测不到 USB-Blaster 终极解决办法 转自https://blog.csdn.net/acang301/article/details/50471067? ...

  4. 重装系统后网速变慢的解决办法

    重装系统后网速变慢的解决办法 2011-07-27 18:40 来源:http://www.ijinshan.com/zt/ws_zbqdxz.shtml 摘要:在系统遇到难以修复的问题或运行缓慢时, ...

  5. apache 安装后默认主页无法打开_CAD教程:CAD软件打开图纸后钢筋符号无法读取的解决办法...

    设计师在日常绘图工作中经常会用CAD软件打开其他人发送过来的结构图纸,图纸打开后有些时候会出现钢筋符号显示为问号的情况.那么作为一名CAD遇到这种状况该如何解决呢?小编仔细研究了一下发现大致情况分为两 ...

  6. # vmware异常关机后,虚拟系统无法启动的解决办法

    # vmware异常关机后,虚拟系统无法启动的解决办法 参考文章: (1)# vmware异常关机后,虚拟系统无法启动的解决办法 (2)https://www.cnblogs.com/sstealer ...

  7. vm虚拟机安装系统后出现operating system not found解决办法(VM装ghost 不能进系统的解决方法)

    vm虚拟机安装系统后出现operating system not found解决办法不知你使用那种软件分的区?   用DIANGEN的话,它本来就清楚列明了激活分区选项的. 如果用PQ分区的话,还必须 ...

  8. Win7休眠后唤醒出现黑屏的解决办法

    进入睡眠状态可很好地节约电源和延长硬件的使用寿命,很多用户的电脑进入睡眠状态后,唤醒无法正常进入屏幕,而是变成黑屏的故障,怎么回事?其实出现这种情况并非什么系统故障问题,下面小编给大家分享Win7休眠 ...

  9. HTML页面加载异常,按F12调试后居然又好了的解决办法!

    HTML页面加载异常,按F12调试后居然又好了的解决办法! 参考文章: (1)HTML页面加载异常,按F12调试后居然又好了的解决办法! (2)https://www.cnblogs.com/Jaco ...

  10. 双击打开Excel2016文件后无法直接显示文件内容的解决办法

    双击打开Excel2016文件后无法直接显示文件内容的解决办法 1.打开Excel2016文件,选择 文件–>选项–>高级–>常规,不勾选"忽略使用动态数据交换(DDE)的 ...

最新文章

  1. 基于特征点匹配的自适应目标跟踪算法
  2. [bzoj 5332][SDOI2018]旧试题
  3. ABAP help document F1
  4. 双11,2分钟狂挣20亿的神秘大厂,急招.NET!
  5. redis java 监听_从零手写实现redis(四)添加监听器
  6. 车机没有carlife可以自己下载吗_路咖评:新宝骏的车机系统 革了百度Carlife的命?...
  7. CSDN用户服务条款
  8. iis 6 7 8预加载,提升web访速
  9. 解决vcard乱码批量导入outlook
  10. 芒果TV广告投放的展现样式!芒果TV广告投放如何收费?
  11. css border实现渐变
  12. Java 冻结或解除冻结Excel中的行和列的方法
  13. Spring Boot对Ajax跨域访问的支持实现
  14. 来自H3C的降维打击:H3C BX54鲸路由评测体验
  15. 系统架构设计方法论——TOGAF
  16. 专用微处理器电源监控和看门狗芯片--MAX708
  17. IE主页被恶意修改处理办法
  18. python-如何爬取天猫店铺的商品信息
  19. 中学学籍管理系统数据库课程设计,限于篇幅只能采取截图方式上传,原文件在我资源中有所展示。
  20. 函数prev_permutation和next_permutation的用法分辨

热门文章

  1. KVM图形管理界面打不开(virt-manager 报错)
  2. DelegatingFilterProxy详解
  3. XVII Open Cup named after E.V. Pankratiev. GP of Siberia, Division 1
  4. 逻辑运算符 用法解释
  5. JavaScript学习笔记——运算符和表达式
  6. 转:linux下挂载移动硬盘
  7. msysgit中文问题
  8. Bash shell中的位置参数$#,$*,$@,$0,$1,$2...及特殊参数$?,$-等的含义 1
  9. Mapx中的图元移动
  10. python pcl_windows 10 环境pcl-python 安装