NUCLEO-F446REにMicropythonをインストールする(v2)
2020/4/11
書き込み方法をst-flash(st-link)に変更した。
2020/3/15
初版
NUCLEO F446RE MicroPython Install(v2)
NUCLEO F446RE MicroPython Install(v2)
概要
「NUCLEO F446RE」にMicropythonをインストールする方法について記載する (ホストPCとしてはubuntuを想定している)
事前準備
(1)書き込みツール(st-flash)のインストール
sudo apt install cmake
sudo apt install libusb-1.0
git clone https://github.com/texane/stlink.git
cd stlink
make
cd build/Release
sudo make install
sudo ldconfig
# インストール確認
st-flash --version
#以下のように出力されればOK(数字などはバージョンによって異なる)
v1.6.0-154-g99a8aaa
(2)ampyのインストール
AMPY_PORTは、自分の環境に合わせる。
pip install adafruit-ampy
export AMPY_PORT=/dev/ttyACM0
export AMPY_BAUD=115200
(3)picocomのインストール
sudo apt-get install picocom
以上のうち、exportしているものは、.bashrcに登録することを勧める。
コンパイラのバージョンアップ
以下でインストールしたコンパイラが古くてビルドエラーが出たのでバージョンアップする。
sudo apt-get install gcc-arm-none-eabi
(1)以下のurlから最新版をダウンロードする:
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
解凍したものを以下のフォルダに置く:
$HOME/Downloads/gcc-arm-none-eabi-8-2019-q3-update
(2)パス設定
#古いコンパイラを削除する
sudo apt-get remove gcc-arm-none-eabi
#パスを設定する
export PATH=$PATH:$HOME/Downloads/gcc-arm-none-eabi-8-2019-q3-update/bin
ビルド手順
以下の手順で行なう:
mkdir mp_nucleo
cd mp_nucleo
git clone https://github.com/micropython/micropython.git
# Patch
#<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
I2C関係のピンアサインにバグがいるので
Micropython/ports/stm32/boards/NUCLEO_F446RE/mpconfigboard.h
を以下のように修正する:
// I2C busses
#define MICROPY_HW_I2C1_SCL (pin_B6) // Arduino D10, pin 17 on CN10
#define MICROPY_HW_I2C1_SDA (pin_B7) // pin 21 on CN7
↓以下のように修正する
// I2C busses (same as NUCLEO_F401RE)
#define MICROPY_HW_I2C1_SCL (pin_B8) // Arduino D15, pin 3 on CN10
#define MICROPY_HW_I2C1_SDA (pin_B9) // D14, pin 5 on CN10
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
cd micropython
cd mpy-cross
make
cd ..
cd ports/stm32
make submodules
make BOARD=NUCLEO_F446RE
arm-none-eabi-objcopy -O binary build-NUCLEO_F446RE/firmware.elf build-NUCLEO_F446RE/firmware.bin
ls -l build-NUCLEO_F446RE/firmware.*
-rwxrwxr-x 1 komatsu komatsu 414672 4月 11 17:44 build-NUCLEO_F446RE/firmware.bin
-rw-rw-r-- 1 komatsu komatsu 298629 4月 11 17:22 build-NUCLEO_F446RE/firmware.dfu
-rwxrwxr-x 1 komatsu komatsu 687096 4月 11 17:22 build-NUCLEO_F446RE/firmware.elf
-rw-rw-r-- 1 komatsu komatsu 839158 4月 11 17:22 build-NUCLEO_F446RE/firmware.hex
-rw-rw-r-- 1 komatsu komatsu 1391080 4月 11 17:22 build-NUCLEO_F446RE/firmware.map
書き込み手順
上でビルドしたbinをst-flashで書き込む
st-flash write build-NUCLEO_F446RE/firmware.bin 0x8000000
#出力例:
st-flash 1.6.0
2020-04-11T18:47:26 INFO common.c: Loading device parameters....
2020-04-11T18:47:26 INFO common.c: Device connected is: F446 device, id 0x10006421
2020-04-11T18:47:26 INFO common.c: SRAM size: 0x20000 bytes (128 KiB), Flash: 0x80000 bytes (512 KiB) in pages of 131072 bytes
2020-04-11T18:47:26 INFO common.c: Attempting to write 414672 (0x653d0) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08060000 erasedEraseFlash - Sector:0x7 Size:0x20000
2020-04-11T18:47:34 INFO common.c: Finished erasing 8 pages of 131072 (0x20000) bytes
2020-04-11T18:47:34 INFO common.c: Starting Flash write for F2/F4/L4
2020-04-11T18:47:34 INFO flash_loader.c: Successfully loaded flash loader in sram
enabling 32-bit flash writes
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 21456
2020-04-11T18:47:40 INFO common.c: Starting verification of write complete
2020-04-11T18:47:44 INFO common.c: Flash written and verified! jolly good!
動作確認
picocomを使いボードとシリアルで通信する。 以下、通信例:
$ picocom /dev/ttyACM0 -b115200
>>> import os
>>> os.uname()
(sysname='pyboard', nodename='pyboard', release='1.12.0', version='v1.12-256-geae495a-dirty on 2020-03-15', machine='NUCLEO-F446RE with STM32F446xx')
>>>
>>> list(5 * x + y for x in range(10) for y in [4, 2, 1])
[4, 2, 1, 9, 7, 6, 14, 12, 11, 19, 17, 16, 24, 22, 21, 29, 27, 26, 34, 32, 31, 39, 37, 36, 44, 42, 41, 49, 47, 46]
>>>
# パッチ確認
# 以下のようにi2c.scan()で接続しているデバイスのアドレスが出力されればOK
# F446RE
>>> from machine import I2C
>>> i2c=I2C(1)
>>> i2c.scan()
[104] # Grove-RTC
>>>
>>> import gc
>>> gc.collect()
>>> gc.mem_free()
92192
>>>
>>> help('modules')
__main__ math ucollections urandom
_onewire micropython uctypes ure
builtins network uerrno uselect
cmath onewire uhashlib usocket
dht pyb uheapq ustruct
framebuf stm uio utime
gc sys ujson utimeq
lcd160cr uarray umachine uzlib
lcd160cr_test ubinascii uos
Plus any modules on the filesystem
>>>
ampy実行例
$ ampy -p /dev/ttyACM0 ls
/flash
$ ampy -p /dev/ttyACM0 ls /flash
/flash/boot.py
/flash/main.py
ampy -p /dev/ttyACM0 get /flash/boot.py
# boot.py -- run on boot-up
# can run arbitrary Python, but best to keep it minimal
import machine
import pyb
pyb.country('US') # ISO 3166-1 Alpha-2 code, eg US, GB, DE, AU
#pyb.main('main.py') # main script to run after this one
$ ampy -p /dev/ttyACM0 get /flash/main.py
# main.py -- put your code here!
サンプルスクリプト
blink.py
while True:
# LED(1) // Green LED on board
pyb.LED(1).on()
pyb.delay(1000)
pyb.LED(1).off()
pyb.delay(250)
cpuが同じこともあり、pyboardと同じボードと見做されているようだ。
実行例:
$ ampy -p /dev/ttyACM0 run blink.py
この場合、flashにスクリプトを書き込まずに直接RAMで実行される。
ボードの電源オンで直接スクリプトを実行する場合は
以下のようにする。(blink.pyをmain.pyに上書きする)
$ ampy -p /dev/ttyACM0 put blink.py /flash/main.py
この書き込み後、リセットボタンを押すか、またはUSBコネクタを抜き差しすると、自動的にスクリプトが動作する。
参照URL
Turtorial Examples for Nucleo-MicroPython
The MicroPython project
STM32 Nucleo Board STM32F446RE
Quick reference for the pyboard
ampyを用いたMicroPythonのファイル操作とプログラム実行
MicroPython pyboard v1.1
新しいボードへMicroPythonを対応させる方法をざっくり解説
以上
| 固定リンク
「linux」カテゴリの記事
- platfomioを使ってnaitive(linux/windows)のプログラムをビルドする方法(2021.03.10)
- micro:bit Yotta開発ツール(linux版)(2021.01.09)
- PlatformIOをRaspberryPi4で動かしてみる(実験)(2020.10.20)
- headless RaspberryPiインストール方法(v2)(2020.10.20)
- wio-terminalのファームウェア・アップデートについて(linux版)(2020.10.15)
「MicroPython」カテゴリの記事
- microbit-v2にMicropythonをインストールする(2021.05.06)
- PicoボードのMicroPythonをVS_CodeのextensionのPico-Goでプログラミングする(2021.02.10)
- MicroPython/CircuitPython Performance Test(2021.02.07)
- PicoボードにMicropython/CircuitPythonをインストールする(2021.02.03)
- MicroPython(F767ZI) Network Samples(2021.01.03)
「Nucleo」カテゴリの記事
- MicroPython/CircuitPython Performance Test(2021.02.07)
- MicroPython(F767ZI) Network Samples(2021.01.03)
- MicroPython(F767ZI)でStartwars(AsciiArt)を動かす(2020.12.29)
- NUCLEO-F767ZIにMicropythonをインストールする(v2)(2020.05.22)
- Nucleo-F303K8でADCの値をLCD(AQM0802)(i2c)に表示する(Arduino版)(2020.05.16)
この記事へのコメントは終了しました。
コメント