[STM32H7]

【STM32H750B-DK试用】+菜鸟笔记:资料下载和出厂Demo固件恢复过程

[复制链接]
1837|1
手机看帖
扫描二维码
随时随地手机跟帖
lihuasoft|  楼主 | 2025-2-18 16:08 | 显示全部楼层 |阅读模式
本帖最后由 lihuasoft 于 2025-2-18 16:09 编辑

也不怕被笑“没见识”了,说实话这是我用过的最高级的MCU,板子到手上电,出厂Demo固件太炫!
(实际操作体验的流畅炫酷感,比图片强太多,我的手机拍不出效果)

001.jpg

002.jpg

003.jpg

004.jpg

把板子翻过来看,就开始有点懵,不知道从哪里入手。于是去ST官网,搜索“STM32H750B-DK”:

005.png

点击进入STM32H750B-DK的主页面,在CAD资源里面,找到原理图、PCB图纸:

006.png

007.png

008.png

009.png

因为我拿到的板子的小版本是B01(见LCD屏右侧的白底丝印,如下图),所以上面列表里最末一个pdf版的原理图,应该是与硬件最相符的。

010.jpg

在Documentation里面,找到板子的用户手册(UM2488):

011.png

MCU的数据手册、参考手册,也同样在ST官网搜索找到:

012.png

013.png

接下来的日子里,得空就看原理图,现在终于把原理图的主要部分搞懂了。
然后就抑制不住点灯的欲望,想试试CubeMX仓库里那么多的例程。
灯点了,的确亮了:

014.png

忽然有些后悔,我的出厂Demo固件就这么没了?
液晶屏一片惨白。虽然也知道那些图片视频资源仍在。
还能恢复出厂效果吗?
开始翻找CubeMX的仓库文件夹:

101.png

在Cube的H7 V1.12下面的文件夹Projects里,找到我的板子对应的文件夹:STM32H750B-DK。
这里面,Templates提供了2个模板;
Examples提供了一些外设的独立Demo;
Demonstrations!这里面应该就是我要找的Demo了吧?

102.png

编译,下载...一顿操作猛如虎,定睛一看二百五。

103.png

下载不成功。
什么?0x90000000?从参考手册上,找到这个地址的定义,是QSPI的地址:

104.png


; *************************************************************

; *** Scatter-Loading Description File generated by uVision ***

; *************************************************************



LR_IROM1 0x90100000 0x1000  {    ; load region size_region

        ER_IROM1 0x90100000 0x1000 {

                *.o (RESET, +First)

}

}

LR_TGFX 0x90101000   {    ; load region size_region

        ER_TGFX 0x90101000  {

                *(.IntThirdPartyHeaderSection, +First)

                *(InRoot$Sections)

                 .ANY (+RO)   

}

        RW_IRAM1 0x24000000 0x80000  {  ; RW data

                .ANY (+RW +ZI)

                *(.sdio_heap)

}

        RW_SDRAM 0xD0000000 UNINIT  0x800000  {  ; RW data

                *(.BmpCacheSection)

                *(.FBSection)

}

}

LR_QSPI_TGFX 0x94000000 0x4000000  {    ; load region size_region

        ER_thp_ext_header 0x94000000 0x40  {        

                *(.ExtThirdPartyHeaderSection)

}

        ER_QSPI_TGFX 0x94000040   {

                *(demo_icon_section)

                *(demo_**_section)

                *(washer_video_section)

                *(receipe_video_section)

                *(ExtFlashSection)

                *(FontFlashSection)

                *(TextFlashSection)

}

}


这怎么下载呀。。。不会呀握草,真的没学过这个,只搞过把程序下载到位于0x08000000的MCU片内FLASH。

看来我菜的程度还不是一般,是很菜啊,没办法,只能慢慢学,慢慢来......
但是,在学会之前,这个Demo固件是找不回来了吗?
只能盯着这惨白惨白的屏幕吗......
心情跌落到极点之际,不抱任何希望地打开了readme.txt......

205.png

啊哈?而且看见了FULL这个词,兴奋。赶紧从官网下载这个压缩包:

206.png

207.png

里面有一个批处理文件,执行它!
(期间因为Stm32cube_programmer路径不符,稍稍修改了一下,不算困难)

208.png

209.png

210.png

就这样,下载完成,板子自动重启,出厂Demo固件恢复了。
这才有心情打开批处理文件,好好研究了一下,感慨:学到了,学到了,这个命令行用法,可真酷!
以后写个批处理给负责生产的同事用,会不会很爽滑呀。
下面把刚刚学到的这个批处理,写成注释,记录在这里,以备自己遗忘症发作后再来看看回忆:

::凡是用双冒号开头的行,都是批处理的注释文本
::命令setlocal的作用是,使以下变量的作用域为过程内私有,直至批处理结束,或者endlocal命令出现
@setlocal
::COLOR 0B

::下面这段,定义了几个字符串名,并用来拼接HEX文件名,然后判断HEX文件是否存在
:: Chip Name
@set CHIP_NAME=STM32H750B
:: Main Board
@set MAIN_BOARD=-DK
:: Demo Name
@set DEMO_NAME=STM32Cube_Demo
:: Demo Version
@SET DEMO_VER=V1.0.0
:: Hex filename
@SET HEX_FILE="%DEMO_NAME%-%CHIP_NAME%%MAIN_BOARD%-%DEMO_VER%.hex"
@IF NOT EXIST "%HEX_FILE%" @SET HEX_FILE=%DEMO_NAME%-%CHIP_NAME%%MAIN_BOARD%-%DEMO_VER%_FULL.hex
@IF NOT EXIST "%HEX_FILE%" @echo %HEX_FILE% Does not exist !! && GOTO goError

:: 这段用来拼接下载算法文件名
:: Board ID
@SET BOARD_ID=0
:: External Loader Name
:: REM是注释命令,以它开头的行被注释掉,不执行
REM @SET EXT_LOADER=MT25TL01G_%CHIP_NAME%%MAIN_BOARD%
::MT25TL01G是板子上使用的QSPI存储芯片。ST早已按这些字符串写好文件名,放在了库文件夹里,所以不能搞错
@SET EXT_LOADER=MT25TL01G_%CHIP_NAME%-DISCO
::关于与板子上的存储芯片不一致,下面会有说明

::下面这段,尝试找到STM32_Programmer的正确安装路径
@SET STM32_PROGRAMMER_PATH="%ProgramFiles(x86)%\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin"
@IF NOT EXIST %STM32_PROGRAMMER_PATH% @SET STM32_PROGRAMMER_PATH="%ProgramW6432%\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin"
@IF NOT EXIST %STM32_PROGRAMMER_PATH% @SET STM32_PROGRAMMER_PATH="%ProgramFiles%\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin"
@IF NOT EXIST %STM32_PROGRAMMER_PATH% @echo STM32CubeProgrammer is not installed !! && GOTO goError
@IF NOT EXIST %STM32_PROGRAMMER_PATH% @echo %STM32_PROGRAMMER_PATH% Does not exist !! && GOTO goError
@SET STM32_EXT_FLASH_LOADER=%STM32_PROGRAMMER_PATH%\ExternalLoader\%EXT_LOADER%.stldr
@IF NOT EXIST %STM32_EXT_FLASH_LOADER% @ECHO %STM32_EXT_FLASH_LOADER% Does not exist !! && GOTO goError

::有了安装路径,也有了下载算法文件名,就可以定位到这个下载算法文件
@SET STM32_EXT_FLASH_LOADER=%STM32_PROGRAMMER_PATH%\ExternalLoader\%EXT_LOADER%.stldr
::到这个路径下,的确可以找到这个下载算法文件,如图

301.png

::查看MT25TL01G的芯片手册,可知它是一个1G大小的FLASH;


302.png


::然而查看实物,板子上是有两个丝印为8ZA15的QSPI-FLASH芯片(图4右下角的2个16脚芯片);
::这在原理图上可以找到答案:

303.png

::设置批处理命令窗口的标题文本
TITLE STM32CubeProgrammer Utility for %CHIP_NAME%%MAIN_BOARD%

:: 把 STM32CubeProgrammer 安装路径放入PATH路径环境变量
@SET PATH=%STM32_PROGRAMMER_PATH%;%PATH%

:: 好了,前面的准备工作(拼接HEX文件名、路径、下载算法文件名等)做完,下面开始执行了
::运行STM32_Programmer_CLI.exe,按下载算法执行擦除、下载,结束后重启板子
STM32_Programmer_CLI.exe -c port=SWD index=%BOARD_ID% reset=HWrst -el %STM32_EXT_FLASH_LOADER% -e all -d %HEX_FILE% -HardRst

::命令行参数的解释:
:: -c 即--connect,是连接到设备
::         port=SWD 用什么连接呢?用SWD
::         index=0 默认就是0,也就是连接第1个SWD设备
::         reset=HWrst 连接前执行硬件复位
:: -el 即--extload,即指定一个下载算法,哪个算法呢?即前面拼接好的STM32_EXT_FLASH_LOADER
:: -e all 即--erase all,擦除所有存储扇区
:: -d 即--download,即指定要下载的Hex文件,哪个文件呢?即前面拼接好的HEX_FILE
:: -HardRst 即下载结束后执行硬件重启,仅-c时使用JTAG/SWD的才支持这个选项

::根据STM32_Programmer_CLI.exe的命令返回值,判断是否执行出错了
@IF NOT ERRORLEVEL 0 (
  @goto goError
)

完整的批处理命令文件(带注释)在贴子附件里,有感兴趣的可以下载:

游客,如果您要查看本帖隐藏内容请回复


#申请原创#   

使用特权

评论回复
yangjiaxu| | 2025-3-6 14:57 | 显示全部楼层
直接用cubemx下载多好啊,而且开发也是从这开发的,就很方便的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

308

帖子

3

粉丝