关于STM32H745xI双核芯片的SMPS和LDO配置,导致芯片无法复位,无法下载程序

关于STM32H745xI双核芯片的SMPS和LDO配置

最近在项目中遇到程序上电能跑,然后软件复位,或者按键复位的时候会跑不起来,无法复位,而且不能下载程序。

一开始怀疑是Boot0(双核的只有BOOT0,没有BOOT1)引脚虚焊,后来做了一个按钮,用来上拉下拉,由于不能下载程序,那么只能上拉BOOT0,跳到默认的地址,这个是ST自带的程序,是可以下载的。
上拉是可以下载了,下拉跑自己的程序的时候还是会不能复位。

后来又怀疑是代码配置的问题,因为程序是H745ZIT6的代码,引脚是144的,H745IIT是176引脚。

这里是电源配置的代码

 xx = HAL_PWREx_ConfigSupply(PWR_DIRECT_SMPS_SUPPLY);

  /* The voltage scaling allows optimizing the power consumption when the device is
     clocked below the maximum system frequency, to update the voltage scaling value
     regarding system frequency refer to product datasheet.  */
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
HAL_StatusTypeDef HAL_PWREx_ConfigSupply(uint32_t SupplySource)
{
  uint32_t tickstart;

  /* Check the parameters */
  assert_param(IS_PWR_SUPPLY(SupplySource));

  if((PWR->CR3 & (PWR_CR3_SMPSEN | PWR_CR3_LDOEN | PWR_CR3_BYPASS)) != (PWR_CR3_SMPSEN | PWR_CR3_LDOEN))
  {
    if((PWR->CR3 & PWR_SUPPLY_CONFIG_MASK) != SupplySource)
    {
      /* Supply configuration update locked, can't apply a new regulator config */
      return HAL_ERROR;
    }
  }

  /* Set the power supply configuration */
  MODIFY_REG(PWR->CR3, PWR_SUPPLY_CONFIG_MASK, SupplySource);

  /* Get tick */
  tickstart = HAL_GetTick();

  /* Wait till voltage level flag is set */
  while(!__HAL_PWR_GET_FLAG(PWR_FLAG_ACTVOSRDY))
  {
    if((HAL_GetTick() - tickstart ) > PWR_FLAG_SETTING_DELAY_US)
    {
      return HAL_TIMEOUT;
    }
  }

  /* When the SMPS supplies external circuits verify that SDEXTRDY flag is set */
  if((SupplySource == PWR_SMPS_1V8_SUPPLIES_EXT_AND_LDO) ||
     (SupplySource == PWR_SMPS_2V5_SUPPLIES_EXT_AND_LDO) ||
     (SupplySource == PWR_SMPS_1V8_SUPPLIES_EXT) ||
     (SupplySource == PWR_SMPS_2V5_SUPPLIES_EXT))
  {
    /* Get tick */
    tickstart = HAL_GetTick();

    /* Wait till SMPS external supply ready flag is set */
    while(!__HAL_PWR_GET_FLAG(PWR_FLAG_SMPSEXTRDY))
    {
      if((HAL_GetTick() - tickstart ) > PWR_FLAG_SETTING_DELAY_US)
      {
        return HAL_TIMEOUT;
      }
    }
  }

  return HAL_OK;
}

这里配置的是双核特有的SMPS模式,这个是降压转换器,
双核有两种供电模式,SMPS和LDO,它比LDO稳压器功耗更低,适合用来做低功耗。

我们板子是抄ST官网的H745XI的板子,所以用的是Direct SMPS模式,然后代码的配置是需要配合外围电路的设计。
在这里插入图片描述

用的是直接SMPS模式 ,VDDLDO直接由SMPS转换器输出来提供。

所以在代码中LDOEN位是清零了,不使能,SDEN位置1,使能,即开启SMPS转换器。
在这里插入图片描述
在这里插入图片描述

这个MODIFY_REG的作用是清空CR3寄存器的PWR_SUPPLY_CONFIG_MASK的所有位,然后把PWR_CR3_SMPSEN置1,
在这里插入图片描述
也符合了Direct SMPS模式的位
注意:从这句话就可以说明BPASS没有置1.
在这里插入图片描述

在这里插入图片描述

所以代码是没有问题的。也符合上电启动逻辑
在这里插入图片描述
这是翻译:

系统供应启动
在不同电源配置下从上电启动的系统启动顺序为
以下内容(有关LDO电源和直接SMPS电源的信息,请参见图23和图24,
分别):
1.系统上电后,POR监视VDD电源。一旦VDD高于POR阈值电平,就启用SMPS降压转换器和稳压器
在默认电源配置中:
– SMPS降压转换器的输出电平设置为1.2V。
–根据PWR D3域控制寄存器(PWR_D3CR)中配置的VOS3电平,将稳压器输出电平设置为1.0V。
2.只要VCORE不正常,系统就会保持在复位模式。
3. VCORE正常后,将使系统退出复位状态并启用HSI振荡器。
4.振荡器稳定后,系统将初始化:闪存和选项字节加载并且CPU在受限运行模式(Run *)下启动。
5.然后,软件应初始化系统,包括在PWR控制寄存器3(PWR_CR3)中进行电源配置编程。一旦配置了电源配置,就应检查PWR控制状态寄存器1(PWR_CSR1)中的ACTVOSRDY位,以确保有效的电压电平:
a)只要ACTVOSRDY指示电压电平无效,系统就处于运行*模式,不允许对RAM的写访问,并且不应允许VOS改变了。
b)一旦ACTVOSRDY指示电压电平有效,则系统处于正常状态
在运行模式下,允许对RAM的写访问,并且可以更改VOS。 

这里说下VOS1-3,这是配合低功耗使用的,我们用的是VOS1,高性能

一上电默认是VOS3,
这里VOS和SMSP输出电压有关系,还有性能也是,需要认真的捋一捋关系。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

说明代码没问题,奇了怪了。。。
后来找来能运行的板子,对比了一下发现:

我们用的是这个,可以看到VLXSPMS引脚外面有一个电感,
下面是芯片手册的说明,2.2微亨,
在这里插入图片描述
在这里插入图片描述

再对比现在板子发现,,电感不对。。。焊错了型号。。。

把好的板子的电感拉过来,立马好了。。乖乖!!

折腾了快一个星期了。。检查了代码,检查了复位芯片(百度网上说无法复位是因为复位芯片导致,后来验证不是,因为我焊了一个按钮,直接把NRST引脚接到地,还是不能复位成功。),怀疑了NRST引脚的对地电容(也是百度的,说电容太大了,复位时不能放电,但是电容是104的,很小。)

甚至怀疑Vbat引脚,(之前的板子因为没有把Vat接到VDD,饮片发热,现在的板子是多加了一个Bat电池,),害得我把Bat电池的原件都拿走了

至于这个1.2V的输出电压要串联一个电感然后才到VCAP,我是没想明白为什么,为了防止电压突变???

VCAP电压是直接给Vcore供电的,Vcap没电压,那肯定是不能复位,不能启动的。

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值