安裝編譯器
如果還沒安裝編譯器的,先安裝:
sudo apt install gcc-arm-none-eabi
sudo apt install gdb-arm-none-eabi
sudo apt install
安裝 cmake 和 libusb
- CMake(版本大于 v2.8.7)
- Libusb 1.0(版本大于 v1.0.9)
sudo apt update
sudo apt install cmake
sudo apt install
安裝 stlink
下載下傳開源的 STLink 驅動代碼
git
編譯、安裝
cd stlink/
make
make install
預設安裝路徑為
/usr/local/
,可以根據需要指定安裝路徑,例如
make install DESTDIR=$HOME
安裝成功後,系統增加了如下幾個工具:
工具 | 功能 |
| 将二進制檔案固化到 STM32 裝置 |
| 查詢已連接配接 STLink 的 STM32 裝置資訊 |
| 運作 GDB 服務與 STM32 裝置進行互動 |
| STlink 圖形化工具,如下所示 |
連接配接測試
剛好我手上有一塊 STM32 NUCLEO-F411R,下面我們将利用它來做個簡單的實驗。
使用 USB 線連接配接開發闆和電腦,執行
lsusb
可以看到已經識别到 ST-LINK/v2.1 裝置。
執行
st-info --probe
檢視 STLink 裝置資訊。
編譯 bsp 工程
前面我們已經下載下傳好的 rt-thread-4.0.1 源碼,進入 stm32f411-st-nucleo 的 BSP 目錄,直接編譯一下看看。
cd /bsp/stm32/stm32f411-st-nucleo/
source
編譯不了,原因是交叉編譯工具沒有配置好。打開 rtconfig.py 檔案,找到對應編譯器選項中的
EXEC_PATH
變量,将其修改為本地編譯器所在的目錄,我這裡是
/usr/bin
。
執行
scons
建構工程,出現如下錯誤:
......
/home/rudy/workspace_hd/Draft/RTTB/rt-thread-4.0.1/bsp/stm32/libraries/HAL_Drivers/drv_usart.c: In function 'rt_hw_usart_init':
/home/rudy/workspace_hd/Draft/RTTB/rt-thread-4.0.1/bsp/stm32/libraries/HAL_Drivers/drv_usart.c:662:5: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
for (int i = 0; i < obj_num; i++)
^
/home/rudy/workspace_hd/Draft/RTTB/rt-thread-4.0.1/bsp/stm32/libraries/HAL_Drivers/drv_usart.c:662:5: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
scons: *** [/home/rudy/workspace_hd/Draft/RTTB/rt-thread-4.0.1/bsp/stm32/libraries/HAL_Drivers/drv_usart.o] Error 1
很明顯,因為代碼中變量定義的風格是 C99 以上标準才支援的,是以需要為編譯器指定 C99 或 C11 模式。打開 rtconfig.py 檔案,在對應編譯器選項中的
CFLAGS
變量末尾添加
-std=c99
參數。
重新執行
scons
指令,稍等片刻出現
scons: done building targets.
提示,表示編譯成功。可以看到目前目錄下多了 rtthread.elf 和 rtthread.bin 兩個二進制檔案。
下載下傳測試
打開 applications/main.c 檔案,在 main 函數中添加一行列印:
int main(void)
{
int count = 1;
/* set LED0 pin mode to output */
rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
rt_kprintf("\nI am running RT-Thread in STM32 NUCLEO-F411RE.\n\n");
while (count++)
{
rt_pin_write(LED0_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED0_PIN, PIN_LOW);
rt_thread_mdelay(500);
}
return RT_EOK;
}
重新建構工程
接下來執行
sudo st-flash write rtthread.bin 0x8000000
,将 rtthread.bin 檔案燒寫到闆子的 0x8000000 位址。
看來燒寫成功了!
minicom 連接配接虛拟序列槽
我們還需要連接配接 STLink 虛拟序列槽,看看有沒有列印出我們想要的資訊。首先要确定裝置節點,這裡是
/dev/ttyACM0
,然後執行如下指令進行設定:
sudo
選擇 “Serial port setup”,設定序列槽裝置為 /dev/ttyACM0,波特率 115200。
選擇 “Save setup as…” 将配置命名為 stlink,該配置檔案儲存在 /etc/minicom/minirc.stlink。
退出,重新輸入
minicom stlink
指令,即可打開 ST-LINK 虛拟調試序列槽。