硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5113|回复: 14
收起左侧

[STM32H7] 关于STM32H745IIT电源配置的问题

[复制链接]

2

主题

17

回帖

23

积分

新手上路

积分
23
发表于 2021-3-10 14:00:11 | 显示全部楼层 |阅读模式
大家有没有用过STM32H745系列的,
我用H745IIT这块双核芯片,配置电源寄存器的时候,使用的是以下的配置方式,可是会出现运行正常,但是无法复位成功。需要重新上电,把这个HAL_PWREx_ConfigSupply()函数注释掉就正常了。



我之前公司有用过STM32H745ZIT的双核芯片,一样的配置,能跑起来,也能复位,还跑了很多外设,网口,ADC,等等一起跑都成功。

难道IIT和ZIT配置会不一样吗,


回复

使用道具 举报

2

主题

17

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2021-3-10 14:03:02 | 显示全部楼层
H745双核的电源比H743单核多了一个SMPS电源模块,还不是很懂,我之前这样配置能跑,所以直接拿过来用了,结果不行,有大佬研究过吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2021-3-10 14:48:55 | 显示全部楼层
H7有个硬件设置手册的,里面有特别讲解这个电源问题,你可以看下,在ST官网可下载。
回复

使用道具 举报

2

主题

17

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2021-3-10 14:57:51 | 显示全部楼层
eric2013 发表于 2021-3-10 14:48
H7有个硬件设置手册的,里面有特别讲解这个电源问题,你可以看下,在ST官网可下载。

有文档代号吗,
回复

使用道具 举报

2

主题

17

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2021-3-10 15:20:28 | 显示全部楼层
eric2013 发表于 2021-3-10 14:48
H7有个硬件设置手册的,里面有特别讲解这个电源问题,你可以看下,在ST官网可下载。

找不到,请问有手册代码吗,我去搜
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2021-3-10 15:45:55 | 显示全部楼层
dm00337873-getting-started-with-stm32h74xig-and-stm32h75xig-hardware-development.pdf (1.06 MB, 下载次数: 41)
回复

使用道具 举报

2

主题

17

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2021-3-10 17:53:33 | 显示全部楼层
回复

使用道具 举报

2

主题

17

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2021-3-10 18:04:19 | 显示全部楼层

很奇怪的是,我的芯片复位之后,
VDD_LDO电位变为0伏了,这个电压是芯片内部的SMPS根据进去的3.3V发出来的

我不配置HAL_PWREx_ConfigSupply()函数,就正常,复位能输出1.2V.
回复

使用道具 举报

2

主题

17

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2021-3-10 18:04:42 | 显示全部楼层
附上代码
u8  SystemClock_Config(u8 xx)
{
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_OscInitTypeDef RCC_OscInitStruct;
  HAL_StatusTypeDef ret = HAL_OK;

  /*!< Supply configuration update enable */
  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)) {}

  /* Enable HSE Oscillator and activate PLL with HSE as source */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
  RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
  RCC_OscInitStruct.CSIState = RCC_CSI_OFF;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

  RCC_OscInitStruct.PLL.PLLM = 5;                        //4
  RCC_OscInitStruct.PLL.PLLN = 160;                //400
  RCC_OscInitStruct.PLL.PLLFRACN = 0;        //0
  RCC_OscInitStruct.PLL.PLLP = 2;                        //2
  RCC_OscInitStruct.PLL.PLLR = 2;                        //2
  RCC_OscInitStruct.PLL.PLLQ = 4;                        //4

//        RCC_OscInitStruct.PLL.PLLM = 5;                        //4
//  RCC_OscInitStruct.PLL.PLLN = 192;                //400
//  RCC_OscInitStruct.PLL.PLLFRACN = 0;        //0
//  RCC_OscInitStruct.PLL.PLLP = 2;                        //2
//  RCC_OscInitStruct.PLL.PLLR = 2;                        //2
//  RCC_OscInitStruct.PLL.PLLQ = 2;                        //4
                 
  RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
  RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
  ret = HAL_RCC_OscConfig(&RCC_OscInitStruct);
  if(ret != HAL_OK)
  {
    Error_Handler();
  }

/* Select PLL as system clock source and configure  bus clocks dividers */
  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | \
                                 RCC_CLOCKTYPE_PCLK2  | RCC_CLOCKTYPE_D3PCLK1);

        //配合DXCFGR寄存器
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;//得到sys_d1cpre_ck的时钟
  RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;//
  RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
  RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
  ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
  if(ret != HAL_OK)
  {
    Error_Handler();
  }

  /*activate CSI clock mondatory for I/O Compensation Cell*/
//  __HAL_RCC_CSI_ENABLE() ;

//  /* Enable SYSCFG clock mondatory for I/O Compensation Cell */
//  __HAL_RCC_SYSCFG_CLK_ENABLE() ;

//  /* Enables the I/O Compensation Cell */
//  HAL_EnableCompensationCell();
  return xx;
}
回复

使用道具 举报

2

主题

17

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2021-3-10 18:05:08 | 显示全部楼层
这个配置电源寄存器的代码
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;
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2021-3-11 09:08:10 | 显示全部楼层
你的电路跟这个匹配吧

回复

使用道具 举报

2

主题

17

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2021-3-11 15:43:08 | 显示全部楼层
eric2013 发表于 2021-3-11 09:08
你的电路跟这个匹配吧

好了。。可以了。

我也是按照那个电路图来的。

用的是Direct SMPS Supply

是SMPS模式外面的要接一个电感连接到VDD_LDO,
然后电感焊错了,可能是型号不对。导致复位之后SMPS无法输出一个1.2V给VDDLDO引脚。,气死了。



回复

使用道具 举报

2

主题

17

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2021-3-11 15:46:05 | 显示全部楼层
C:\Users\dell\Desktop\微信截图_20210311153905
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-1-18 14:40:00 | 显示全部楼层
我用的是STM32H745ZIT6,连接ST-Link下载程序之后可以运行,但是断电重新上电之后,程序不运行,ST-Link也识别不到芯片,找了几天还是这个方法有效,把HAL_PWREx_ConfigSupply(PWR_DIRECT_SMPS_SUPPLY);注释了就没问题了。看来下去得好好看看电源这块了,H7好复杂
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-1-18 14:41:13 | 显示全部楼层
啃瓜子的猫 发表于 2021-3-11 15:43
好了。。可以了。

我也是按照那个电路图来的。

我试了用焊锡丝代替电感不行,必须得用电感
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 02:45 , Processed in 0.283098 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表