在MacOS下編譯燒錄ART-Pi

在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)境要求

  1. 裝有MacOS的電腦或虛擬機
  2. 裝有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
Untitled.png

正常情況下,板子上的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.bashrc

    export RTT_CC=gcc
    export RTT_EXEC_PATH=<ARM GUN工具鏈地址,包含bin目錄>
    
  • 使用命令行進入ART-Pi SDKprojects/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 。

Untitled1.png

3.3 編譯APP

使用命令行進入ART-Pi SDKprojects/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。

Untitled2.png

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

四、參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容