platformioでSTM32

# F103編

またまた調子に乗ってSTM32も試してみました。

環境は雪豹のMacBoot Air Originalです。

```
bash-3.2$ platformio init --board genericSTM32F103C8
```

Arduno風のLチカコードをsrc以下に作ります。

STM32の純正書き込みツールはST-LINK(JTAG/SWD)ですが、シリアルでのISPもサポートされているようです。

ターゲットはAitendoのEVB-STM32F103C8T6でboot0を1、boot1を0にして、TXD/RXD/GNDをFTにつないで、電源供給のためにUSBもつないでおきます。このターゲットのTXD/RXDのシルク逆です。

![IMGP0371.JPG](https://qiita-image-store.s3.amazonaws.com/0/104066/202ff363-54a7-fd77-3e2c-795960e451e5.jpeg)


```
bash-3.2$ platformio run --target upload
[Tue Jan 31 09:37:33 2017] Processing genericSTM32F103C8 (platform: ststm32, boa
rd: genericSTM32F103C8, framework: arduino)
--------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
Converting main.ino
Collected 24 compatible libraries
Looking for dependencies...
Project does not have dependencies
Compiling .pioenvs/genericSTM32F103C8/src/main.ino.o
Looking for upload disk...
Auto-detected: /dev/cu.usbserial-DA0059MQ
Uploading .pioenvs/genericSTM32F103C8/firmware.bin
stm32flash Arduino_STM32_0.9

http://github.com/rogerclarkmelbourne/arduino_stm32

Using Parser : Raw BINARY
Interface serial_posix: 230400 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory
Wrote address 0x0800200c (100.00%) Done.

Starting execution at address 0x08000000... done.

========================= [SUCCESS] Took 4.81 seconds =========================
```

MSP430ではuploaderが使えませんでしたが、STM32ではちゃんと使えるようです。

またSTM32はたくさんframeworkがあっていろいろ遊べそうです。

platformioでuploaderが勝手にFTなシリアルポートを判別して実行するの最初はちょっと抵抗がありましたが、便利です。

ほんとplatformioってすばらしいです。

# F303編

秋月電子で売っているチップの[STM32F303K8T6](http://akizukidenshi.com/catalog/g/gI-10790/)も試してみました。

![写真（2017-03-15 11.07）.jpg](https://qiita-image-store.s3.amazonaws.com/0/104066/e5dc2b91-d9ec-a5b9-c937-da3b8620da46.jpeg)

nucleo_f303k8が同じチップを使っているので、このボードでinitしてmbedなビルドは通りました。genericSTM32F103C8はArduinoベースでしたが、nucleo_f303k8はmbedベースになるようです。

回路を入れてBOOT0/NRSTをstm32flashから自動的に制御することもできるようですが、面倒だったのでジャンパーにしました。

uploadはSTLinkベースなので素の303では使えないので、直接stm32flashを使いました。

```
bash-3.2$ platformio run
[Tue Mar 14 10:35:17 2017] Processing nucleo_f303k8 (platform: ststm32, board: n
ucleo_f303k8, framework: mbed)
--------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
Collected 8 compatible libraries
Looking for dependencies...
Project does not have dependencies
Calculating size .pioenvs/nucleo_f303k8/firmware.elf
text       data     bss     dec     hex filename
11588       128    1224   12940    328c .pioenvs/nucleo_f303k8/firmware.elf
========================= [SUCCESS] Took 4.25 seconds =========================
bash-3.2$ ~/.platformio/packages/tool-stm32duino/stm32flash/stm32flash -w .pioen
vs/nucleo_f303k8/firmware.bin -b 115200 /dev/cu.usbserial-DA0059MQ
stm32flash Arduino_STM32_0.9

http://github.com/rogerclarkmelbourne/arduino_stm32

Using Parser : Raw BINARY
Interface serial_posix: 115200 8E1
Version      : 0x31
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0438 (F303x4/334/328)
- RAM        : 12KiB  (6144b reserved by bootloader)
- Flash      : 256KiB (sector size: 2x2048)
- Option RAM : 16b
- System RAM : 8KiB
Write to memory
Erasing memory
Wrote address 0x0800301c (100.00%) Done.
```

uploaderを変更する事も出来るような気がするのですが、方法が分かりません。

素直に[Nucleo Board](http://akizukidenshi.com/catalog/g/gM-10172/)を買えば、STLinkV2の101とターゲットの303が手に入りますが、ガジェットは1K以内で購入できるものとしているので、素の303を使ってみました。

安くSTlink v2が手に入ったので[stlink](https://github.com/texane/stlink)をcmakeを使わず無理矢理コンパイルして焼いてみました。st-flashはplatformioにも入っているのですが、エラーで実行できなかったので、ビルドしました。

|ピン|SWD|
|:--|:--|
|1|3.3V|
|23|SWDIO|
|24|SWCLK|
|32|GND|

```
bash-3.2$ ./st-flash write ../../../../ARM/pio/stm32f303/.pioenvs/nucleo_f303k8/
firmware.bin   0x8000000
st-flash 1.0.0
2018-03-01T12:40:58 INFO common.c: Loading device parameters....
2018-03-01T12:40:58 INFO common.c: Device connected is: F334 device, id 0x100164
38
2018-03-01T12:40:58 INFO common.c: SRAM size: 0x3000 bytes (12 KiB), Flash: 0x10
000 bytes (64 KiB) in pages of 2048 bytes
2018-03-01T12:40:58 INFO common.c: Attempting to write 12356 (0x3044) bytes to s
tm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08003000 erased
2018-03-01T12:40:59 INFO common.c: Finished erasing 7 pages of 2048 (0x800) byte
s
2018-03-01T12:40:59 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core 
id
2018-03-01T12:40:59 INFO flash_loader.c: Successfully loaded flash loader in sra
m
  7/7 pages written
2018-03-01T12:40:59 INFO common.c: Starting verification of write complete
2018-03-01T12:41:00 INFO common.c: Flash written and verified! jolly good!
```