學習如何建立一個 stm32 的 bare-metal 專案,完整專案可見 cm4bm
sudo apt-get install git make cmake libusb-1.0-0-dev
sudo apt-get install gcc build-essential
cd ~
git clone https://github.com/stlink-org/stlink
cd stlink
cmake .
make
cmake
成功可以看到以下結果
make
成功可以看到以下結果 (擷取部份)
使用命令 lsusb
查看裝置,可以看到已經有連到 ST-LINK/v2.1
參考 How To Install gcc-arm-none-eabi on Ubuntu 20.04 更新 apt-get 及下載 arm toolchain
下載完後新增環境變數
測試是否成功加到環境變數,可以輸入命令 arm-none-eabi-gcc --version
首先輸入以下命令安裝 openOCD
sudo apt install openocd
接著測試有無安裝成功,輸入命令 openocd -v
測試,有成功可以看到以下訊息
都安裝好後可以開始測試啦,首先安裝 putty
sudo apt-get install putty
安裝完畢後輸入命令 sudo putty
並選擇 serial 的選項,可以看到以下的樣子
接著輸入命令 sudo dmesg | grep tty
可以看到 serial 連接了哪些裝置
經測試,測試的開發板使用 ttyACM0
,因此需要在 serial line 上輸入 /dev/ttyACM0
並給出正確的鮑率,最後就會成功開啟並列印出訊息
首先需要安裝 OpenOCD 以及 VS code 的模組 Cortex_Debug
目前 Cortex-Debug 的版本使用 1.6.3
而 OpenOCD 比較特別,需要使用版本 0.11.0 以後才可以 (用 0.10.0 會失敗) ,這裡就使用 ST 給的 STMicroelectronics/OpenOCD
首先先 clone 該專案
git clone https://github.com/STMicroelectronics/OpenOCD.git
cd OpenOCD
接著先安裝需要的函式庫
sudo apt-get install make
sudo apt-get install libtool
sudo apt-get install pkg-config
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install texinfo
sudo apt-get install libusb-1.0
可以開始建構專案了
./bootstrap
./configure
sudo make install
成功完成後可以確認 openocd 版本,使用命令 openocd -v
兩者都安裝完後即可開啟 debugger ,開啟結果如下所示
要可以追蹤 source file 的話,記得要在編譯時新增 -g
選項
st_nucleo_f3.cfg
開啟 openOCD ,成功可以看到以下訊息arm-none-eabi-gdb.exe
接著連到 openocd 上
target remote localhost:3333
接著列出比較常用的指令 (記得前面要加 monitor)
Reset
Halt: 暫停目前的執行
monitor halt
Resume: 結束 halt 並開始執行程式
monitor resume
燒入程式
monitor flash write_image erase Debug/main.elf
sudo apt-get install putty
st_nucleo_f3.cfg
開啟 openOCD ,成功可以看到以下訊息接著列出比較常用的指令
Reset
Halt: 暫停目前的執行
halt
Resume: 結束 halt 並開始執行程式
resume
燒入程式
flash write_image erase Debug/main.elf
使用命令 sudo apt-get -y install gcc-arm-none-eabi
所下載的編譯器並不含有 arm-none-eabi-gdb
,因此需要額外加入,可從 Arm GNU Toolchain Downloads 下載
下載後將 arm-none-eabi-gdb
加入到 Linux 的輸入命令的預測路徑 /usr/bin
接著執行 arm-none-eabi-gdb
,如果發生以下錯誤
解法: 安裝對應的函式庫
接著如果出現以下的問題
問題就是該版本的 GDB 使用了 python3.8 的函式庫,而我的 Ubuntu 版本為 22.04 ,其 Python 的預設版本為 3.10.6 ,對應的函式庫不同,而導致這樣的錯誤。因此解法就是直接安裝 python3.8 的版本,命令如下