STM32でNUTTXを使ってみる

STM32F3 DiscoveryへのFirmware書き込み


前回、STM32F4 Discoveryへのファーム書き込みを紹介しました。
今回は、STM32F3 Discoveryへのファーム書き込みを紹介します。
F3 Discovery用には以下のディレクトリに2つのひな形が用意されています。
$ ls ~/nuttxspace/nuttx/boards/arm/stm32/stm32f3discovery/configs
nsh  usbnsh

F4 DiscoveryにはUSB-OTGポートがあるので、USB経由でnshを使うことができますが、
F3 DiscoveryにはUSB-OTGポートが有りません。
そこで、F3の場合は、USB-TTL経由でnshを使うことになります。
$ cd $HOME/nuttxspace/nuttx
$ make distclean
$ ./tools/configure.sh -l stm32f3discovery/nsh
  Copy files
  Refreshing...

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

デフォルトの[.config]を使ってファームウェアをビルドします。
F3 Discoveryもボード上にST-LINKが実装されていますので、ファームの書き込みはF4 Discoveryと同様にST-LINK を使います。
ホストマシンとF3 DiscoveryをUSBで接続します。
F3 Discoveryにはオンボード上に2つのミニUSBコネクターがありますが、
ST-Link側のUSBポート(中央のミニUSB)を使います。
接続を確認したら以下のコマンドでファームウェアをターゲットマイコンに書き込みます。
$ make
Create version.h
LN: platform/board to /home/nop/nuttxspace/apps/platform/dummy
Register: sercon
Register: serdis
Register: nsh
Register: sh

$ st-flash --connect-under-reset write nuttx.bin 0x8000000
st-flash 1.7.0-352-g8c581c3
2024-01-05T07:46:00 INFO common.c: STM32F302_F303_358: 40 KiB SRAM, 256 KiB flash in at least 2 KiB pages.
file nuttx.bin md5 checksum: 651238b6937891476890fb40f3a47ea5, stlink checksum: 0x00703365
2024-01-05T07:46:00 INFO common_flash.c: Attempting to write 70496 (0x11360) bytes to stm32 address: 134217728 (0x8000000)
-> Flash page at 0x8011000 erased (size: 0x800)
2024-01-05T07:46:01 INFO flash_loader.c: Starting Flash write for VL/F0/F3/F1_XL
2024-01-05T07:46:01 INFO flash_loader.c: Successfully loaded flash loader in sram
2024-01-05T07:46:01 INFO flash_loader.c: Clear DFSR
 35/35  pages written
2024-01-05T07:46:04 INFO common_flash.c: Starting verification of write complete
2024-01-05T07:46:05 INFO common_flash.c: Flash written and verified! jolly good!

USB-TTLコンバータとF3 Discoveryを以下のように接続します。
ちなみに、DiscoveryシリーズのGPIOピンは表からも裏からも使うことができます。
USB-TTL F3 Discovery
TX PA3
RX PA2
GND GND

USB-TTLコンバータをホストマシンのUSBに接続します。
dmesgで接続状況を確認することができます。
新しいUSBデバイス(/dev/ttyUSB0)が現れます。
なお、安物のUSB-HUBにST-LINKとUSB-TTLの両方を刺したら、USB-TTLを認識しませんでした。
USB-TTL側はUSB-HUBではなく、ホストマシン本体のUSBポートに直接刺しています。
$ 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コンソール画面が表示されます。
nsh、sercon、serdis、shの4つのアプリケーションが組み込まれているNuttxファームが動きます。
       sercon : Connect the serial device a create /dev/ttyACM0
       serdis : Disconnect the serial device.
これらのアプリの説明が「$HOME/nuttxspace/nuttx/boards/arm/stm32/stm32f3discovery /README.txt」に記載されていますが、
読んでも実行しても良く分かりませんでした。


F4 Discoveryと違って、freeやpsは組み込まれていません。


ボード上のRESETボタンではLinuxに戻れません。nshが再起動します
screenの終了はCtrl+aを押してkで以下のメニューが現れます。


続く...