STM32でNUTTXを使ってみる

STM32F103 NucleoへのFirmware書き込み


今回は、STM32F103RB Nucleoへのファーム書き込みを紹介します。
F103用には「$HOME/nuttxspace/nuttx/boards/arm/stm32/stm32f103-minimum /configs」ディレクトリに色々なひ な形があら かじめ用意さ れています。
$ ls ~/nuttxspace/nuttx/boards/arm/stm32/stm32f103-minimum/configs
adb         buttons    lcd1602  nsh         rgbled   userled
apds9960    hello      mcp2515  pwm         sensors  veml6070
audio_tone  jlx12864g  nrf24    rfid-rc522  usbnsh

F103 NucleoにはUSB-OTGポートがないので、F3 Discoveryと同様にUSB-TTL経由でnshを使うことになります。
$ cd $HOME/nuttxspace/nuttx
$ make distclean
$ ./tools/configure.sh -l stm32f103-minimum/nsh
  Copy files
  Refreshing...

カレントディレクトリに[.config]ができます。
menuconfig(=kconfig frontend)で[.config]ファイルに色々と機能を追加していきます
今回は特に何も変更せずにそのままExitで抜けます。
$ make menuconfig

デフォルトの[.config]を使ってファームウェアをビルドします。
Nucleoもボード上にST-LINKが実装されていますので、ファームの書き込みは今までと同様にST-LINK を使います。
ホストマシンとNucleoをUSBで接続します。
接続を確認したら以下のコマンドでファームウェアをターゲットマイコンに書き込みます。
$ make

$ st-flash --connect-under-reset write nuttx.bin 0x8000000
st-flash 1.7.0-352-g8c581c3
2024-01-07T22:18:22 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-07T22:18:22 INFO common_flash.c: Attempting to write 33712 (0x83b0) bytes to stm32 address: 134217728 (0x8000000)
-> Flash page at 0x8008000 erased (size: 0x400)
2024-01-07T22:18:23 INFO flash_loader.c: Starting Flash write for VL/F0/F3/F1_XL
2024-01-07T22:18:23 INFO flash_loader.c: Successfully loaded flash loader in sram
2024-01-07T22:18:23 INFO flash_loader.c: Clear DFSR
 33/33  pages written
2024-01-07T22:18:25 INFO common_flash.c: Starting verification of write complete
2024-01-07T22:18:25 INFO common_flash.c: Flash written and verified! jolly good!

USB-TTLコンバータとF103 Nucleoを以下のように接続します。
PA9 PA10の位置はこ ちらで確認 することができます。
USB-TTL F103 Nucleo
TX PA10
RX PA9
3.3V 未接続
GND GND
   
USB-TTLコンバータをホストマシンのUSBに接続すると、新しいUSBデバイス(/dev/ttyUSB0)が現れます。
$ sudo 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コンソール画面が表示されますが、helpが組み込まれていません。


メニューを使ってhelpを組み込みます。






さらにostestを組み込みます。






新しい.configでファームをビルドし、Nucleoボードに書き込みます。
nshを起動してostestを実行します。


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


続く...