在MacOS下編譯燒錄ART-Pi
一、前言
ART-Pi是RT-Thread設(shè)計的一款搭載STM32H750XBH6 主控的開發(fā)板,由于STM32宣稱 STM32H750XBH6 僅有128KB片內(nèi)flash(實際上并不是),所以ART-Pi SDK使用128KB片內(nèi)flash當作bootloader,將app程序放到8MB的片外QSPI flash上面運行。
ART-Pi SDK可以在RT-Thread Studio、MDK 等IDE上完美使用,但是這一切都是基于Windows。但是當我看到這篇文章的時候,我就知道ART-Pi 跨平臺開發(fā)的機會來了。
二、環(huán)境要求
- 裝有MacOS的電腦或虛擬機
- 裝有Windows的電腦或虛擬機
需要用到的資源如下:
三、開搞
3.1 將板載ST-Link刷成J-Link
ART-Pi板載了一個ST-Link ,但是經(jīng)過測試ST-Link 在非Windows系統(tǒng)上使用并不友好,所以需要將其重置為J-Link 以便燒錄程序。
這一步需要在Windows上完成,因為ST-Link Reflash工具目前只有Windows版本。
具體操作步驟如下:
- 下載安裝ST-Link Reflash。
- 連接
ART-Pi,啟動STLinkReflash.exe。 - 如下圖所示,
輸入a回車、輸入a回車、輸入1回車,第三步千萬不要選擇2.Update J-LINK firmware,否則無法通過USB刷回ST-Link。

正常情況下,板子上的ST-Link已經(jīng)變成J-Link 了,我的ART-Pi已經(jīng)刷過J-Link了所以提示找不到ST-LINK 。不要問為什么不刷回ST-Link 重刷截圖,問就是懶。
3.2 編譯下載Bootloader
接下來配置SDK和編譯環(huán)境,進行Bootloader的編譯和燒錄。
使用
brew install scons,安裝scons編譯工具。下載SEGGER J-Link software,用于燒錄調(diào)試。
使用
git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32h750-realthread-artpi克隆ART-Pi SDK到本地目錄。下載解壓Arm GUN 工具鏈。
(可選)克隆RT-Thread Env到本地目錄,主要用于開發(fā)階段pkgs管理等操作。
-
設(shè)置環(huán)境變量,建議添加到
.zshrc或.bashrcexport RTT_CC=gcc export RTT_EXEC_PATH=<ARM GUN工具鏈地址,包含bin目錄> 使用命令行進入
ART-Pi SDK的projects/art_pi_bootloader目錄,這里是ART-Pi的Bootloader項目,輸入scons -c清除編譯文件之后輸入scons命令編譯Bootloader。編譯成功后使用<工具鏈路徑>/arm-none-eabi-objcopy -O ihex rt-thread.elf rt-thread.hex得到hex文件。打開JFlashLite,選擇驅(qū)動為
STM32H750XB,剛剛編譯的hex文件燒錄到0x08000000。

3.3 編譯APP
使用命令行進入ART-Pi SDK的projects/art_pi_blink_led 目錄,同樣使用scons 編譯項目,編譯后使用同樣的方法得到hex文件。這個目錄是作為demo的點燈app,開發(fā)時可以替換成自己的項目。
值得一提的是app是燒錄到片外flash的,所以ROM的起始地址是0x90000000 。并且app代碼內(nèi)需要加入調(diào)轉(zhuǎn)到該地址的向量表(這里只是作為講解,main.c中已有無需再添加),代碼如下非常簡單:
#include "stm32h7xx.h"
static int vtor_config(void)
{
/* Vector Table Relocation in Internal QSPI_FLASH */
SCB->VTOR = QSPI_BASE;
return 0;
}
INIT_BOARD_EXPORT(vtor_config);
3.4 新增J-Link Device
- 找到J-Link Software的主文件夾,參考方法如下:
? ~ which JLinkExe
/usr/local/bin/JLinkExe
? ~ ll /usr/local/bin/JLinkExe
lrwxr-xr-x 1 root wheel 41B Mar 7 2020 /usr/local/bin/JLinkExe -> /Applications/SEGGER/JLink_V660e/JLinkExe
? ~ cd /Applications/SEGGER/JLink_V660e
- 在
ART-Pi SDK中找到ART-Pi_W25Q64.FLM文件,復(fù)制到Jlink下的Devices/ST/STM32H7文件夾,并改名為ART-Pi_W25Q64.elf。
? cd Devices/ST/STM32H7
? mdfind ART-Pi_W25Q64.FLM
/Users/jiy/work/sdk-bsp-stm32h750-realthread-artpi/debug/flm/ART-Pi_W25Q64.FLM
/Users/jiy/work/sdk-bsp-stm32h750-realthread-artpi/libraries/touchgfx_lib/readme.md
? sudo cp /Users/jiy/work/sdk-bsp-stm32h750-realthread-artpi/debug/flm/ART-Pi_W25Q64.FLM ART-Pi_W25Q64.elf
? ll
total 2176
-rwxr-xr-x 1 root wheel 1.0M Feb 8 14:20 ART-Pi_W25Q64.elf
-rw-r--r-- 1 root wheel 36K Dec 16 2019 ST_STM32H745I_Disco_QSPI.elf
-rw-r--r-- 1 root wheel 36K Dec 16 2019 ST_STM32H753_Eval_QSPI.elf
-rw-r--r-- 1 root wheel 1.1K Dec 16 2019 ST_STM32H7xx.pex
- 找到
JLinkDevices.xml文件,備份,然后使用sudo權(quán)限編輯。
? mdfind JLinkDevices.xml
/Applications/SEGGER/JLink_V660e/JLinkDevices.xml
? cd /Applications/SEGGER/JLink_V660e
? sudo cp JLinkDevices.xml JLinkDevices.xml.bak
? sudo vim JLinkDevices.xml
- 然后加入
ART-Pi的Device。
<Device>
<ChipInfo Vendor="ST" Name="ART-PI" Core="JLINK_CORE_CORTEX_M7" WorkRAMAddr="0x20000000" WorkRAMSize="0x10000" JLinkScriptFile="Devices/ST/STM32H7/ST_STM32H7xx.pex"/>
<FlashBankInfo Name="QSPI Flash" BaseAddr="0x90000000" MaxSize="0x00800000" Loader="Devices/ST/STM32H7/ART-Pi_W25Q64.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" />
</Device>
3.5 使用JFlashLite燒錄程序
這時候關(guān)閉JFlashLite ,然后重新打開,在驅(qū)動里面找到剛剛添加的ART-Pi 。
燒錄剛剛編譯的app,然后重啟ART-Pi。

發(fā)現(xiàn)板子上的燈閃了,最后把板子拔下來裝到盒子里,放到一個不容易落灰的地方吧。