2017年の記事「STM32F103の開発環境」
https://qiita.com/nanbuwks/items/594568db3f5dc1d6c5fd
では、Arduino で使えるSTM32の開発環境として以下のように書きました。
Arduino_STM32
rogerclarkmelbourne/Arduino_STM32
https://github.com/rogerclarkmelbourne/Arduino_STM32
Maple lib をベースにしたもの。現在のところこれが一番安定しているらしく、Arduino開発環境で使うにはファーストチョイス。
STM32Duino という名前でも呼ばれているが・・・
このときは、rogerclarkmelbourne 版と STM32 公式版の 2つの STM32Duino があり、rogerclarkmelbourne 版にアドバンテージがありました。
今はどうなっているのかな?
2022 年時点での STM32Duino
https://stm32duino.com/viewtopic.php?p=10432&hilit=rogerclarkmelbourne#p10432
このフォーラムによると、いまどきは rogerclarkmelbourne 版ではなく 公式の Arduino_Core_STM32 の方が主流ぽい。
公式版の Arduino_Core_STM32はこちらで公開されています。
https://github.com/stm32duino/Arduino_Core_STM32
STM32Duino のセットアップ
https://github.com/stm32duino/wiki/wiki/Getting-Started
ここの通りやっていきます。
環境
$ cat /etc/issue
Ubuntu 22.04 LTS \n \l
Arduino 2.0.0 をインストールしたうえで、STM32Duino をセットアップします。
Arduino IDEをセットアップ
2022/09/14 に Arduino2.0.0 がリリースされました。今回はこれを新たにセットアップしてみます。
こちらには以下の2つがありますが、今回は ZIP file の方をダウンロードして使用しています。
- AppImage 64 bits (X86-64)
- ZIP file 64 bits (X86-64)
解凍した ZIP ファイルを解凍
今まで portable 環境で使っていて、今回も同様に解凍した場所に portable フォルダを作成しておきました。しかしながら原在 2.0.0 では portable 機能は使えないようです。
「arduino-ide」をダブルクリックすると起動します。
STM32 に対応する
File-Preference の Additional boards manager URLs: に以下を設定する
ついでに、Show verbose output during の upload にチェックを入れておきます。
Tools-Boards-Boards manager で、STM で検索して、「STM32 MCU based boards by STMicroelectronics」をインストールします。
ボード設定をする
Tools-Board- STM32 MCU based boards から、Generic STM32F1 series
を選びます。
更に、Tools-Board part number から手持ちのボードに該当するものを選びます。
ST-link を使う
Tools-Upload method-で STM32CubeProgrammer(SWD)を選びます。
しかしこのままでは書き込みができません。
https://github.com/stm32duino/wiki/wiki/Getting-Started
によると、
To upload through SWD (STLink), Serial or DFU, STM32CubeProgrammer needs to be installed. See Upload methods.
とあります。
ということで、
STMicroの以下のページから STM32CubeProgrammer software for Linux をダウンロードします。
ダウンロードにはメールアドレス登録が必要です。
en.stm32cubeprg-lin_v2-11-0.zip をダウンロードして解凍すると、以下のような内容が出てきます。
SetupSTM32CubeProgrammer-2.11.0.linux をダブルクリックするとインストーラが起動します。
なるほど、こんなところにインストールされるのですね。
ここでST-Linkを取り付けて書き込みをしようとすると、以下のようにエラーが出ました。
libusb: error [get_usbfs_fd] libusb couldn't open USB device /dev/bus/usb/003/003, errno=13
libusb: error [get_usbfs_fd] libusb requires write access to USB device nodes
https://calinradoni.github.io/pages/200616-non-root-access-usb.html#final-config
USBデバイスを扱うパーミッションが不足してます。
デバイスIDを確認します。
$ lsusb
...
Bus 003 Device 003: ID 0483:3748 STMicroelectronics ST-LINK/V2
...
0483:3748 ということがわかったので、udev に登録します。
$ sudo vim /etc/udev/rules.d/80-stlinkv2.rules
内容は以下のようにしました。
「Non-root access for ST-LINK and USB-to-serial devices」
https://calinradoni.github.io/pages/200616-non-root-access-usb.html
ST-LINK V2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2_%n"
ST-LINK V2.1
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3752", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n"
ST-LINK V3
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374d", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3loader_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
反映します。
$ sudo udevadm control --reload-rules
書き込んでみます。
-------------------------------------------------------------------
STM32CubeProgrammer v2.11.0
-------------------------------------------------------------------
ST-LINK SN : 48FF6C064983535621371987
ST-LINK FW : V2J29S7
Board : --
Voltage : 3.23V
SWD freq : 4000 KHz
Connect mode: Under Reset
Reset mode : Hardware reset
Device ID : 0x410
Revision ID : Rev X
Device name : STM32F101/F102/F103 Medium-density
Flash size : 64 KBytes
Device type : MCU
Device CPU : Cortex-M3
BL Version : --
Memory Programming ...
Opening and parsing file: sketch_oct15a.ino.bin
File : sketch_oct15a.ino.bin
Size : 6.98 KB
Address : 0x08000000
Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 6]
Download in Progress:
File download complete
Time elapsed during download operation: 00:00:00.480
RUNNING Program ...
Address: : 0x8000000
Application is running, Please Hold on...
Start operation achieved successfully
========================================================
無事書き込めました。
MySQL でグループごとの前年度のベスト1を表示
以下のように会員テーブルと、会員成績テーブルがあるとします。
MariaDB [test]> SELECT 会員番号,フリガナ FROM 会員;
+--------------+---------------------------+
| 会員番号 | フリガナ |
+--------------+---------------------------+
| 4 | アイ ウエオ |
| 6 | カキ クケコ |
| 3 | アブセド エフガフ |
| 1 | サシ スセソ |
| 8 | タチ ツテト |
+--------------+---------------------------+
5 rows in set (0.000 sec)
MariaDB [test]> SELECT * FROM 会員成績 LIMIT 5;
+------+---------------------+--------------+--------+
| stid | 日時 | 会員番号 | 成績 |
+------+---------------------+--------------+--------+
| 1 | 2019-02-18 12:14:06 | 4 | 36 |
| 2 | 2015-09-08 06:48:52 | 3 | 52 |
| 3 | 2018-07-04 02:19:29 | 2 | 72 |
| 4 | 2014-09-12 05:27:12 | 3 | 38 |
| 5 | 2019-11-30 02:13:12 | 2 | 96 |
+------+---------------------+--------------+--------+
5 rows in set (0.000 sec)