STM32でNUTTXを使ってみる

STM32F103 PillボードへのFirmware書き込み


今回は、STM32F103 BluePill/Black Pillへのファーム書き込みを紹介します。
BluePillやBlackPillにはST-LINKが実装されていません。
そこで、ST-LINKアダプターを使ってファームを書き込みます。
また、USB-OTGポートも無いので、usbnshではなくnshを使います。
$ cd $HOME/nuttxspace/nuttx

$ make distclean

$ ./tools/configure.sh -l stm32f103-minimum/nsh
  Copy files
  Refreshing...

$ make

BluePill/BlackPillとST-LINKアダプターを以下の様に接続します。
BluePillとBlackPillではボードのマーキングが少し違います。
ST-LINKアダプター BluePill BlackPill
SWCLK SWCLK CLK
SWDIO SWIO IO
GND GND G
3.3V 3V3 V3





ST-LINKアダプターをホストのUSBポートに接続し、以下のコマンドでファームウェアをターゲットマイコンに書き込みます。
$ st-flash --connect-under-reset write nuttx.bin 0x8000000
st-flash 1.7.0-352-g8c581c3
2024-01-08T00:12:29 INFO common.c: STM32F1xx_MD: 20 KiB SRAM, 128 KiB flash in at least 1 KiB pages.
file nuttx.bin md5 checksum: edc5f3af83ad4c49a6673240d9a77, stlink checksum: 0x00358ccf
2024-01-08T00:12:29 INFO common_flash.c: Attempting to write 33712 (0x83b0) bytes to stm32 address: 134217728 (0x8000000)
-> Flash page at 0x8008000 erased (size: 0x400)
2024-01-08T00:12:30 INFO flash_loader.c: Starting Flash write for VL/F0/F3/F1_XL
2024-01-08T00:12:30 INFO flash_loader.c: Successfully loaded flash loader in sram
2024-01-08T00:12:30 INFO flash_loader.c: Clear DFSR
 33/33  pages written
2024-01-08T00:12:31 INFO common_flash.c: Starting verification of write complete
2024-01-08T00:12:32 INFO common_flash.c: Flash written and verified! jolly good!

USB-TTLコンバータとPillボードを以下のように接続します。
USB-TTL BluePill/BlackPill
TX PA10
RX PA9
3.3V 未接続
GND GND

USB-TTLコンバータをホストマシンのUSBに接続すると、新しいUSBデバイス(/dev/ttyUSB0)が現れます。
$ dmesg
(略)
[ 2885.014765] usb 1-1.4: new full-speed USB device number 29 using dwc_otg
[ 2885.147893] usb 1-1.4: New USB device found, idVendor=1a86, idProduct=7523
[ 2885.147906] usb 1-1.4: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ 2885.147915] usb 1-1.4: Product: USB2.0-Serial
[ 2885.148809] ch341 1-1.4:1.0: ch341-uart converter detected
[ 2885.150542] usb 1-1.4: ch341-uart converter now attached to ttyUSB0

$ ls /dev/ttyUSB*
/dev/ttyUSB0

接続を確認したらUSBポートにscreenコマンドで接続します。
$ sudo screen /dev/ttyUSB0 115200

Enterキーを何回か押すとnshコンソール画面が表示されます。
組み込まれているコマンドはSTM32F103RB Nucleoと同じです。


STM32F103RBはメモリー(SRAM)が小さいので、Nuttxの全ての機能を実行することはできません。

続く...