STM32 HAL库 程序在HAL_RCC_OscConfig中的READ_BIT(RCC->CR, RCC_CR_HSERDY卡住进入Error_Handler()

项目场景:

使用的开发板:STM32G431RB(蓝桥杯嵌入式比赛版)

开发环境:KeilV5,CUBEMX6.4(5)


问题描述

在做往年练习的时候发现下载程序后板子一点反应都没有。DEBUG调试发现程序先是跑到了

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

然后跑到了

while (READ_BIT(RCC->CR, RCC_CR_HSERDY) == 0U)
        {
          if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
          {
            return HAL_TIMEOUT;
          }

之后查看RCC->CR发现好像RCC寄存器坏了一样,寄存器的值一直为空。

而且这个时候再去下其他程序也会出现这样的问题。但是程序能下载证明芯片其实并没有坏,即使是芯片坏了也不会单单只坏RCC一个寄存器。

一般这样的和时钟有关的损坏,要么是晶振坏了,要么是外围电路坏了,要么就是和基础配置有关。晶振可以用示波器测(也可以用万用表调到电容档测),一边接地一边接晶振的某个引脚即可。外围电路测起来麻烦只能用手摸摸烫不烫来判断。如果排除了这两个问题。

那么就是基础配置的问题了。在阅读完https://blog.t123yh.xyz:2/index.php/archives/922icon-default.png?t=M4ADhttps://blog.t123yh.xyz:2/index.php/archives/922

这篇文章后,在初始化HAL_Init();前加上下面两行代码就可以正常运行了

原因在于在之前的程序中配置了以HSE加PLL为主时钟源,但是配置中有错误,如果用下面这两行程序确实是能解决问题,之后的时钟配置理应会切换回HSE,但是实测下来板子的运行速度确实是以HSI为时钟源的速度,而且如果有RTC的初始化还是会卡住。问题也不出在这上面(当然如果加了这两行就正常运行的兄弟就可以不用往下看了),考虑到RTC用的时钟源是HSE所以返回去检查和HSE有关的地方。

	__HAL_RCC_HSI_ENABLE();
  __HAL_RCC_SYSCLK_CONFIG(RCC_SYSCLKSOURCE_HSI);

 细细检测了代码和CUBEMX之后发现

发现HSE设置成了旁路时钟源,噢,这才是问题的根源所在,如果板子上接的是晶振,如果将时钟源设成旁路时钟源则板子将无法正常工作。算是吃一堑长一智了。 

 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值