Arduino_Core_STM32 をセットアップ

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 がリリースされました。今回はこれを新たにセットアップしてみます。

https://www.arduino.cc/en/software

こちらには以下の2つがありますが、今回は ZIP file の方をダウンロードして使用しています。


- AppImage 64 bits (X86-64)
- ZIP file 64 bits (X86-64)

解凍した ZIP ファイルを解凍

今まで portable 環境で使っていて、今回も同様に解凍した場所に portable フォルダを作成しておきました。しかしながら原在 2.0.0 では portable 機能は使えないようです。
「arduino-ide」をダブルクリックすると起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/a6b4f6f1-47ea-8657-75aa-293fdae0c4e0.png)

# STM32 に対応する

File-Preference の Additional boards manager URLs: に以下を設定する

``` https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json
```

ついでに、Show verbose output during の upload にチェックを入れておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/557b9f79-9d3e-35a8-836e-26ddc0b7c134.png)

Tools-Boards-Boards manager で、STM で検索して、「STM32 MCU based boards by STMicroelectronics」をインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/c3eb8ae2-5cac-7799-79a0-0f64c294c77e.png)

# ボード設定をする

Tools-Board- STM32 MCU based boards から、Generic STM32F1 series
を選びます。

更に、Tools-Board part number から手持ちのボードに該当するものを選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/7a3bcbdf-7a8b-2ab1-9417-7f7809ba6b72.png)

# 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 をダウンロードします。

https://www.st.com/ja/development-tools/stm32cubeprog.html

ダウンロードにはメールアドレス登録が必要です。
en.stm32cubeprg-lin_v2-11-0.zip をダウンロードして解凍すると、以下のような内容が出てきます。




![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/ee619041-dcd7-6cb5-60c0-2d7e9380e969.png)
SetupSTM32CubeProgrammer-2.11.0.linux をダブルクリックするとインストーラが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/4eacfb12-5972-fa1e-910c-5211392a7644.png)
なるほど、こんなところにインストールされるのですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/a08a186d-753d-5342-9ce0-f3590fb8b202.png)

ここで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)
```