H7的核心电压为1.2~1.4V,而为了使用内置usb外设,VDD需要3.3v。核心电压由内部ldo供电,480MHz高负荷时发热明显。
ST对于L4系列有使用外部开关电源给核心供电的例子(AN4978),H7有提到外部供电的要求,但没有开发板或参考设计。
而且其外部供电时,对电源的精度和稳定性要求变态(1.37~1.4v,电源波动任意情况下不能超过1.4V)。
做了个板试了一下,电源选用了SGM6033 4.6MHz, 1A 同步降压芯片。通过电阻将空载输出电压调整到了1.39V,参考Nucleo L4的设计,在1.4v电源和Vcap之间加了模拟开关。
然而调试时发现了很蛋疼的问题:
虽然手册上PWR_CR3这个寄存器,有个写保护位SCUEN标明的是rw,可读写,但我咋都改写不了。改不了SCUEN,就改不了下面两位,关不掉内部LDO。
后来从en.STM32H7-System-Power_control_PWR 这个文档中发现这样一句话:
并且从st官方论坛上了解到,此寄存器只有在上电时才会被初始化,不断电重启都不会被初始化。
我觉得H750可能设计时认为用户不会特别在意它的功耗,所以这部分的设计没有L4或者双核H7那么完备。
通过几个变量保存各状态下PWR_CR3的值发现:
1、上电时为0x46,经过HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);初始化后,无论如何后3位都不能修改了,不断电重启也不行。
2、将HAL_PWREx_ConfigSupply的参数改为PWR_EXTERNAL_SOURCE_SUPPLY后,重新上电,寄存器低8位成功变成了0x41,切换到了外部供电模式。
3、利用PWR_CR3只能上电改一次的特性,把HAL_PWREx_ConfigSupply(PWR_EXTERNAL_SOURCE_SUPPLY);
添加到SystemClock_Config();之前的用户代码段,这样就算cube重新生成代码,也不需要再次修改。
另外虽然手册上对外部供电的电压范围要求很严格,但以st的尿性,在常温下,实际电压在较大范围内应该都没问题。但如果要在产品中这么用,还是得严格设计或测试