• STM32H743XX/STM32H563XX芯片烧录一次后,再次上电无法烧录


    近期在使用STM32H563ZIT6这款芯片在开发板上使用正常,烧录到自己打的板子就遇到了芯片烧录一次后,再次上电无法烧录的问题。

    遇到问题需要从以下5点进行分析。

    首先看下开发板的原理图

    1.BOOT0需要拉高。

     2.NRST脚在开发板上是悬空的。这里我建议大家搞个3.3V上拉10k电阻。防止出现烧录问题。

    3.注意VCAP脚也是悬空的。VCAP是为核心供电的滤波电容引脚,当ldo关闭时候核心电压直接从Vcap引脚进入。或者也可以打开内部LDO,从VDDLDO引脚接入,采用混合模式供电,dcdc+ldo的模式。

     4.要使用正版ST-LINK进行烧录。

    判断ST-LINK是否是正版的方法如下:

    打开STM32CubeProgrammer识别ST-LINK。

    注意ST-LINK的Serial number,如果是一串很长的序列号则是正版ST-LINK。否则是盗版 ST-LINK。正版如下图所示。

    5.代码配置,注意代码中配置芯片核心区域使用供电方式。手册中重要部分如下。

     从上图可知,芯片核心区域默认是使用SMPS供电的,当PWR_SCCR寄存器的BYPASS 置1时使用的是LDO供电。

    注意SDK的代码的SystemClock_Config函数,没有进行供电配置。说明使用SMPS供电,正常烧录开发板是没有问题的。

    1. void SystemClock_Config(void)
    2. {
    3. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    4. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    5. /** Configure the main internal regulator output voltage
    6. */
    7. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);
    8. while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
    9. /** Initializes the RCC Oscillators according to the specified parameters
    10. * in the RCC_OscInitTypeDef structure.
    11. */
    12. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    13. RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS_DIGITAL;
    14. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    15. RCC_OscInitStruct.PLL.PLLSource = RCC_PLL1_SOURCE_HSE;
    16. RCC_OscInitStruct.PLL.PLLM = 4;
    17. RCC_OscInitStruct.PLL.PLLN = 250;
    18. RCC_OscInitStruct.PLL.PLLP = 2;
    19. RCC_OscInitStruct.PLL.PLLQ = 2;
    20. RCC_OscInitStruct.PLL.PLLR = 2;
    21. RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1_VCIRANGE_1;
    22. RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1_VCORANGE_WIDE;
    23. RCC_OscInitStruct.PLL.PLLFRACN = 0;
    24. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    25. {
    26. Error_Handler();
    27. }
    28. /** Initializes the CPU, AHB and APB buses clocks
    29. */
    30. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    31. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
    32. |RCC_CLOCKTYPE_PCLK3;
    33. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    34. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    35. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    36. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    37. RCC_ClkInitStruct.APB3CLKDivider = RCC_HCLK_DIV1;
    38. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
    39. {
    40. Error_Handler();
    41. }
    42. }

    但如果加入以下一句

    HAL_PWREx_ConfigSupply(PWR_EXTERNAL_SOURCE_SUPPLY);

    那么开发板就不能正常运行了,也不能进行烧写了。

    这条语句是将芯片核心区域设置为LDO进行供电。

    解决方法如下:

    如下图所示,将芯片的VCAP脚直连3.3V,就可以正常进行烧写程序了。

     

    上图是我打的测试板,将VCAP与VDD相连,STM32CubeProgrammer就可以连接到芯片了。

     

  • 相关阅读:
    UE5 在骨骼动画模型上绘制贴图
    Js逆向教程-02浏览器调试工具-Network面板
    动态代理与静态代理
    Observability:使用 OpenTelemetry 手动检测 .NET 应用程序
    基于Java毕业设计高校共享机房管理系统的设计与实现源码+系统+mysql+lw文档+部署软件
    生成式AI结合3D、XR怎么玩?NVIDIA、Niantic等公司已入局
    内存的读写过程、现实模型及指针
    限制IP到全流程防控,讲解网络爬虫与技术反爬的动态攻防
    Image Tag Parameter
    Mysql.索引详解
  • 原文地址:https://blog.csdn.net/dailin2012/article/details/134337199