LoginSignup
1
1

Nucleo L452RE-P 用に MicroPython をビルドする

Posted at

非常にためになる記事がありまして,大いに参考にさせていただきました。ほとんどなぞっただけです。

Nucleo L452RE-P について

Pのない Nucleo L452RE と対してかわらないだろう,と思っていたのですが,
いざArduino風のコネクターにI2Cデバイスを接続すると,動きません。

    L452RE          L452RE-P
     CN5             CN7
D15  PB8  I2C1_SCL   PB8  I2C1_SCL
D14  PB9  I2C1_SDA   PB7  I2C1_SDA
    AVDD            AVDD
     GND             GND
D13  PA5  SPI1_SCK  PB13  SPI2_SCK
D12  PA6  SPI1_MISO PB14  SPI2_MISO
D11  PA7  SPI1_MOSI PB15  SPI2_MOSI
D10  PB6  SPI1_CS   PA11  SPIx_NSS
 D9  PC7             PA8
 D8  PA9             PB6

     CN9             CN9

 D7  PA8             PC7
 D6 PB10            PB10
 D5  PB4            PA15
 D4  PB5             PB5
 D3  PB3             PB3
 D2 PA10            PA12
 D1  PA2             PA2
 D0  PA3             PA3

SDAが PB9 と PB7 で違いました... MicroPythonではソフトI2Cも使えますので,ピンの指定で動いたのですが,せっかくなので Nucleo L452RE-P 用のファームを作ってみました。

用意した定義ファイル

$ ls NUCLEO_L452RE_P/
board.json            mpconfigboard.mk      stm32l4xx_hal_conf.h
mpconfigboard.h       pins.csv
$ 

Pなし Nucleo L452RE の定義ファイルをコピーしてきて,適当なフォルダーに置いて編集します。

mpconfigboard.h(抜粋)
#define MICROPY_HW_BOARD_NAME       "NUCLEO-L452RE-P" // <<-- ここ
#define MICROPY_HW_MCU_NAME         "STM32L452RE"

// (中略)

// I2C buses
#define MICROPY_HW_I2C1_SCL     (pin_B8)    // Arduino D15, pin 3 on CN10
#define MICROPY_HW_I2C1_SDA     (pin_B7)    // Arduino D14, pin 5 on CN10 <<-- ここ

//(中略)

// NUCLEO-64 has one user LED
#define MICROPY_HW_LED1             (pin_B13) // green  <<-- ここ
#define MICROPY_HW_LED_ON(pin)      (mp_hal_pin_high(pin))
#define MICROPY_HW_LED_OFF(pin)     (mp_hal_pin_low(pin))

目的の I2C1_SDA を PB7 に変更します。
ついでにLEDのアサインを PB13 に変更します。
SPIはそのままSPI2とすればArduinoコネクターで使えそうでしたので,そのままにしました。

pins.csv(抜粋)
D2,PA12
D1,PA2
D0,PA3
A0,PA0
A1,PA1
A2,PC3
A3,PC2
A4,PC1
A5,PC0
SCL,PB8
SDA,PB7
SCK,PB13
MISO,PB14
MOSI,PB15

(中略)

SWCLK,PA14
BUTTON,PC13
LED,PB13
PA0,PA0
PA1,PA1
PA2,PA2
PA3,PA3

...

他の定義ファイルをみると割と自由に名前をつけているようなので,
私はArduinoコネクターに書かれている記号,普通のSTM32のピン番号両方書いてみました。

Pのありなしで微妙にピンアサインが異なるのですが,定義ファイルでは放置しました。問題があったらまた考えることにします。

STM32L452RET6 STM32L452RET6P
DS11912 66ページ 25pin PC5
26pin PB0
N/A PC5
25pin PB0
DS11912 67ページ 27pin PB1
28pin PB2
26pin PB1
27pin PB2
DS11912 68ページ 29pin PB10
30pin PB11
N/A VDD12
28pin PB10
29pin PB11
30pin VDD12
DS11912 72ページ 54pin PD2 N/A PD2
DS11912 73ページ 55pin PB3
56pin PB4
57pin PB5
54pin PB3
55pin PB4
56pin PB5
DS11912 74ページ 58pin PB6
59pin PB7
60pin PH3
61pin PB8
62pin PB9
N/A VDD12
57pin PB6
58pin PB7
59pin PH3
60pin PB8
61pin PB9
62pin VDD12

ビルドする

ほぼ並べただけですが簡単なMakefileを書いてみました。armのコンパイラーは,Platformioがインストールしたものを拝借しました。

CROSS_COMPILE=~/.platformio/packages/toolchain-gccarmnoneeabi@1.70201.0/bin/arm-none-eabi-
BOARD=NUCLEO_L452RE_P

all:
	git clone https://github.com/micropython/micropython.git
	cd micropython/; git submodule update --init
	cd micropython/mpy-cross/; make -j4
	cp -r ${BOARD} micropython/ports/stm32/boards/
	cd micropython/ports/stm32/; make BOARD=${BOARD} CROSS_COMPILE=${CROSS_COMPILE} -j

upload:
	cp micropython/ports/stm32/build-${BOARD}/firmware.bin /Volumes/NODE_L452RE/

clean:
	rm -rf micropython

できました!

REPL
MicroPython v1.20.0-489-ga3862e726 on 2023-09-20; NUCLEO-L452RE-P with STM32L452RE
Type "help()" for more information.
>>> 

以下はすべてNucleoのLEDが点灯します。

REPL
>>> import machine
>>> machine.Pin('LED', machine.Pin.OUT_PP).value(1)
>>> machine.Pin('D13', machine.Pin.OUT_PP).value(1)
>>> machine.Pin('PB13', machine.Pin.OUT_PP).value(1)

pyboard用のライブラリーが使えますね。Nucleoのボタンを読んでみます。

REPL
>>> from pyb import Switch
>>> s=Switch()
>>> s.value()
True
>>> s.value()
False

おまけ

WeActのSTM32F411ボードがありまして,
そのボードの最新のMicroPythonファームがほしいなと思っていました。

本当に書かれている手順通りであっさりファームができたので,L452RE-P でもその手順を踏襲しました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1