本文主要是介绍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后芯片死机检测不到芯片的解决办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!