STM32F4DISCOVERYにCircuitPythonをインストールする
2020/4/11+
STM32F4DISCOVERY CircuitPython Install
STM32F4DISCOVERY CircuitPython Install
概要
STM32F4DISCOVERYにCircuitPythonをインストールする方法について記載する。 (ホストPCとしてはubuntuを想定している)
事前準備
(1)書き込みツール(st-link)のインストール
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
(4)コンパイラのバージョンアップ
以下でインストールしたコンパイラが古いのでバージョンアップする。
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
以上のうち、exportしているものは、.bashrcに登録することを勧める。
ビルド手順
以下の手順で行なう:
mkdir mp_cpy
cd mp_cpy
git clone https://github.com/adafruit/circuitpython.git
cd circuitpython
git submodule sync
git submodule update --init
git submodule update --recursive
make -C mpy-cross
cd ports/stm
make clean BOARD=stm32f4_discovery
make BOARD=stm32f4_discovery
以上の手順で、 ./build-stm32f4_discovery/firmware.bin が生成される
stm32f411ve_discoveryの場合:
make clean BOARD=stm32f411ve_discovery
make BOARD=stm32f411ve_discovery
stm32f412zg_discoveryの場合:
make clean BOARD=stm32f412zg_discovery
make BOARD=stm32f412zg_discovery
書き込み手順
st-flash write ./build-stm32f4_discovery/firmware.bin 0x8000000
#出力例:
st-flash 1.6.0-154-g99a8aaa
2020-04-11T09:27:18 INFO common.c: F4xx: 192 KiB SRAM, 1024 KiB flash in 16 KiB pages.
2020-04-11T09:27:18 INFO common.c: Attempting to write 365636 (0x59444) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08040000 erasedEraseFlash - Sector:0x6 Size:0x20000
2020-04-11T09:27:24 INFO common.c: Finished erasing 7 pages of 131072 (0x20000) bytes
2020-04-11T09:27:24 INFO common.c: Starting Flash write for F2/F4/L4
2020-04-11T09:27:24 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: 5188
2020-04-11T09:27:34 INFO common.c: Starting verification of write complete
2020-04-11T09:27:41 INFO common.c: Flash written and verified! jolly good!
書き込んだプログラムが実行されると、USBストレージとして、CIRCUITPYが現れる。
注意:USBケーブルは、電源供給のためのデバッグボード側のUSB、CPU本体側のUSBの2つをホストPCに接続すること。
動作確認(REPL)
picocomを使いボードとシリアルで通信する。
以下、通信例:
$ picocom /dev/ttyACM0 -b115200
Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
Press any key to enter the REPL. Use CTRL-D to reload.
Adafruit CircuitPython 5.0.0-87-g3a5f79a on 2020-04-10; STM32F4_DISCO with STM32F407VG
>>>
>>> import os
>>> os.uname()
(sysname='stm32f4', nodename='stm32f4', release='5.0.0', version='5.0.0-87-g3a5f79a on 2020-04-10', machine='STM32F4_DISCO with STM32F407VG')
>>>
>>> import gc
>>> gc.collect()
>>> gc.mem_free()
75392
>>>
>>> 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]
>>>
>>> help('modules')
__main__ displayio neopixel_write terminalio
analogio fontio os time
array gc pulseio ulab
board io random usb_hid
builtins json storage usb_midi
busio math struct
collections microcontroller supervisor
digitalio micropython sys
Plus any modules on the filesystem
>>>
>>> import board
>>> dir(board)
['__class__', 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'LD3', 'LD4', 'LD5', 'LD6', 'LED1', 'LED2', 'LED3', 'LED4', 'LED_BLUE', 'LED_GREEN', 'LED_ORANGE', 'LED_RED', 'PA00', 'PA01', 'PA02', 'PA03', 'PA04', 'PA05', 'PA06', 'PA07', 'PA08', 'PA09', 'PA10', 'PA13', 'PA14', 'PA15', 'PB00', 'PB01', 'PB02', 'PB03', 'PB04', 'PB05', 'PB06', 'PB07', 'PB08', 'PB09', 'PB10', 'PB11', 'PB12', 'PB13', 'PB14', 'PB15', 'PC00', 'PC01', 'PC02', 'PC03', 'PC04', 'PC05', 'PC06', 'PC07', 'PC08', 'PC09', 'PC10', 'PC11', 'PC12', 'PC13', 'PC14', 'PC15', 'PD00', 'PD01', 'PD02', 'PD03', 'PD04', 'PD05', 'PD06', 'PD07', 'PD08', 'PD09', 'PD10', 'PD11', 'PD12', 'PD13', 'PD14', 'PD15', 'PE00', 'PE01', 'PE02', 'PE03', 'PE04', 'PE05', 'PE06', 'PE07', 'PE08', 'PE09', 'PE10', 'PE11', 'PE12', 'PE13', 'PE14', 'PE15']
>>>
スクリプト実行
blinkBlue.py
import board
import digitalio
import time
led = digitalio.DigitalInOut(board.LED_BLUE)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = True
time.sleep(0.1)
led.value = False
time.sleep(0.1)
なお、LED_BLUEの部分は、LED_GREEN, LED_ORANGE, LED_REDに置き換えて LEDの色を変えることができる。
ストレージのCIRCUITPYに上のblinkBlue.pyを書き込み REPLで以下を実行すると該当のプログラムが実行される。
import blinkBlue
注意:実行前(import前)にControl-Dを押して、ボードを初期化する必要がある。
(そうでないと、リソースが既に使用中だったりするとエラーになる)
CIRCUITPY上のcode.pyは、電源オン時またはREPLのCtrl-D押下時に、自動実行される。
Adafruit_CircuitPython_Bundleのモジュールのインストール方法
# ホストPC上(CircuitPythonボードが接続されている前提)
# パス設定
export CPY_LIB=$HOME/.local/lib/python3.5/site-packages
# 上の「python3.5」の部分は、自分の使用している(ホストPCの)python3のバージョンに合わせる
export CPY=/media/$USER/CIRCUITPY
# MODULEというモジュールをインストールする場合、以下を実行する:
pip3 install adafruit-circuitpython-MODULE
# CircuitPython上でimportする場合のスクリプト
import adafruit_MODULE
# ダッシュ(-)とアンダースコア(_)の使い分けに注意すること
# モジュールのCircuitPythonボードへのコピー(インストール)
cp $CPY_LIB/adafruit_MODULE.py $CPY/lib/
# 具体例:
pip3 install adafruit-circuitpython-mpl115a2
cp $CPY_LIB/adafruit_mpl115a2.py $CPY/lib/
Pin Assignment
I2C pin:
PB06 = I2C1_SCL
PB09 = I2C1_SDA
PB10 = I2C2_SCL
PB11 = I2C2_SDA
PA08 = I2C3_SCL
PC09 = I2C3_SDA
sample code for i2c
import time
import busio
import board
i2c = busio.I2C(board.PB06, board.PB09) # I2C1 for F4DISCO
#i2c = busio.I2C(board.PB10, board.PB11) # I2C2 for F4DISCO
#i2c = busio.I2C(board.PA08, board.PC09) # I2C3 for F4DISCO
i2c.try_lock()
i2c.scan()
SPI pin:
PA04 = SPI1_NSS
PA05 = SPI1_SCK
PA07 = SPI1_MOSI
PA06 = SPI1_MISO
PB12 = SPI2_NSS
PB13 = SPI2_SCK
PB15 = SPI2_MOSI
PB14 = SPI2_MISO
SPI設定例:
spi = busio.SPI(board.PA05, MOSI=board.PA07, MISO=board.PA06) # SPI1
spi = busio.SPI(board.PB13, MOSI=board.PB15, MISO=board.PB14) # SPI2
AnalogIn pin:
PC01 = ADC123_IN11
PC02 = ADC123_IN12
PC05 = ADC12_IN15
PC04 = ADC12_IN14
PB01 = ADC12_IN9
PB00 = ADC12_IN8
Sample Code for AnalogIn
import time
import board
from analogio import AnalogIn
analog_in = AnalogIn(board.PC01)
def get_voltage(pin):
return (pin.value * 3.3) / 65536
while True:
print(get_voltage(analog_in))
time.sleep(0.1)
GPIO pin:
PE07 = FSMC_D4
PE08 = FSMC_D5
PE09 = FSMC_D6
PE10 = FSMC_D7
PE11 = FSMC_D8
PE12 = FSMC_D9
PE13 = FSMC_D10
PE14 = FSMC_D11
PE15 = FSMC_D12
PD08 = FSMC_D13
PD09 = FSMC_D14
PD10 = FSMC_D15
PD11 = FSMC_A16
PD12 = FSMC_A17
PD13 = FSMC_A18
PD14 = FSMC_D0
PD15 = FSMC_D1
LED Green = PD12
LED Orange = PD13
LED Red = PD14
LED Blue = PD15
User Button = PA00 # User and Wake-Up button
# 使用する際は、プルアップしない。押すとTrueになる。
# LEDは負論理なのでボタンに押すとLEDが消える。
# 他のピンでブルアップしたいる場合は、
# そのピンをグランドに落とすとLEDが光る。
Sample Code for GPIO
import time
import board
from digitalio import DigitalInOut, Direction, Pull
led = DigitalInOut(board.PD13)
led.direction = Direction.OUTPUT
switch = DigitalInOut(board.PA00)
switch.direction = Direction.INPUT
#switch.pull = Pull.UP # Pull.Down is available on some MCUs
while True:
led.value = not switch.value
print(switch.value)
time.sleep(0.01)
参照URL
download STM32-Discovery-F4 PINOUT(.xls)
Discovery kit with STM32F407VG MCU
Discovery kit with STM32F411VE MCU
Discovery kit with STM32F412ZG MCU
Build CircuitPython
Adding Frozen Modules
Adafruit CircuitPython API Reference(v4.x)
CircuitPython Essentials
Example Code
以上
| 固定リンク
「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)
「CircuitPython」カテゴリの記事
- MicroPython/CircuitPython Performance Test(2021.02.07)
- PicoボードにMicropython/CircuitPythonをインストールする(2021.02.03)
- XIAOでMPL3115A2(気圧・高度・気温センサ)を使用する(CircuitPython版)(2020.07.02)
- XIAOでMCP9808(温度センサ)を使用する(CircuitPython版)(2020.07.02)
- XIAOにCircuitPythonをインストールする(2020.06.09)
コメント