STM32F411CE (1)

Date: 2022/02/07 (initial publish), 2022/08/30 (last update)

Source: jp/note-00043.md

Previous Post Top Next Post

TOC

基本のSTM32F系の安価だけど、純正STMチップ(同等品でない)が載っていそうな 小型のデモボードとして、WeActのblackpillをAliexpressの正規ショップ から購入しました。STM32F411CEが載っています。

PCB回路要点

IC PIN 機能 動作
7 NRST RESET SW, PUSH=0 , NORMAL=1
44 BOOT0 BOOT SW, PUSH=1, NORMAL=0
20 PB2 / BOOT1 NORMAL=0 (pull down res.)
10 PA0 / WKUP1 USER KEY, NORMAL=1, PUSH=0
2 PC13 / BLUE LED, LED_ON=0

STM32のメモリー

起動

リセットのモード

STM32F411xx は のBOOTMODEはPattern1で起動する。つまり、BOOTMODE実行条件は:

つまり、REMAPを使い

Standbyからの起動

PA0 / WKUP10->1 でwakeup (つまり、USERのSWを離した時点)

使用上の注意(A9-A12ピン)

A9-A12は、USBコネクターと共用ピンなので、これらを使うとUSB接続ができなくなります。

これに気づくのにかなりの時間のロスをしました。結局、REDDITの記事で原因に気づきました。

PIN接続 (cgg56)

Blackpill (TOP VIEW)

                              USB-C
                        +---+-----+---+
        R0  ------- B12 |*  |     |  *|5V
        R1  ------- B13 |*  |     |  *|GND ----- JS_GND
        R2  ------- B14 |*  |     |  *|3V3 ----- JS_V
        R3  ------- B15 |*  +-----+  *|B10
        C6  ------- A8  |*  B     N  @|B2 --- BOOT1
          [USB] XXX A9  |*  O     R  @|B1 XXX
          [USB] XXX A10 |*  O     S  @|B0 XXX
          [USB] XXX A11 |*  T     T  *|A7 XXX
          [USB] XXX A12 |*  0        *|A6 XXX
        C4  ------- A15 |*           *|A5 ------ JS_R1
        C3  ------- B3  |*           *|A4 ------ JS_R2
        C2  ------- B4  |*           *|A3 ------ C7
        C1  ------- B5  |*           *|A2 ------ C8
        C0  ------- B6  |*           *|A1 ------ C9
        C11 ------- B7  |*           *|A0 ------ C10
        C5  ------- B8  |*  K        *|R ---- NRST (/RST, ~RST)
                    B9  |*  E        *|C15 ----- C12
                    5V  |*  Y        *|C14 ----- C13
                    GND |*           *|C13 -- BLUE LED
                    3V3 |*  @ @ @ @  *|VB
                        +-------------+
                            ^ ^ ^ ^
                            | | | |
      3V3    ---------------+ | | |
    SWDIO    -----------PA13--+ | |
    SWSCK    -----------PA14----+ |
      GND    ---------------------+

CGG56

FACTORY SETTING

とりあえず、PCに繋いでみました。

 $ journalctl -f
...
... usb 4-2: new full-speed USB device number 13 using xhci_hcd
... usb 4-2: config 1 interface 0 altsetting 0 endpoint 0x81 has an invalid bInterval 0, changing to 10
... usb 4-2: config 1 interface 0 altsetting 0 endpoint 0x1 has an invalid bInterval 0, changing to 10
... usb 4-2: New USB device found, idVendor=0483, idProduct=572a, bcdDevice= 2.00
... usb 4-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
... usb 4-2: Product: WeAct Studio HID Bootloader
... usb 4-2: Manufacturer: WeAct Studio
... usb 4-2: SerialNumber: ************
... hid-generic 0003:0483:572A.001A: hiddev1,hidraw1: USB HID v1.11 Device [WeAct Studio WeAct Studio HID Bootloader] on usb-0000:08:00.3-2/input0
... checking bus 4, device 13: "/sys/devices/pci0000:00/0000:00:08.1/0000:08:00.3/usb4/4-2"
... bus: 4, device: 13 was not an MTP device
... checking bus 4, device 13: "/sys/devices/pci0000:00/0000:00:08.1/0000:08:00.3/usb4/4-2"
... bus: 4, device: 13 was not an MTP device

どうも、FLASHにはすでにHIDのBOOTLOADERがすでに入っていて、電源投入で普通に起動する模様です。

FIRMWARE書き込み (QMK DFU)

FIRMWAREはAT90USB1286とほぼ同じコードなんで、以下のrules.mk設定で、(A12ピン問題を解決したら)コンパイルして書き込みました。

# MCU name
MCU = STM32F411
BOARD = BLACKPILL_STM32_F411
# Bootloader selection
BOOTLOADER = stm32-dfu
...

そして。。。

$ make cgg56:default:flash
QMK Firmware 0.16.5
⚠ cgg56: DEVICE_VER in config.h is overwriting usb.device_ver in info.json
⚠ cgg56: DIODE_DIRECTION in config.h is overwriting diode_direction in info.json
⚠ cgg56: MANUFACTURER in config.h is overwriting manufacturer in info.json
⚠ cgg56: PRODUCT_ID in config.h is overwriting usb.pid in info.json
⚠ cgg56: VENDOR_ID in config.h is overwriting usb.vid in info.json
⚠ cgg56: Matrix pins are specified in both info.json and config.h, the config.h values win.
Making cgg56 with keymap default and target flash
...
Linking: .build/cgg56_default.elf                                                                   [OK]
Creating binary load file for flashing: .build/cgg56_default.bin                                    [OK]
Creating load file for flashing: .build/cgg56_default.hex                                           [OK]

Size after:
   text	   data	    bss	    dec	    hex	filename
      0	  24088	      0	  24088	   5e18	cgg56_default.bin

Copying cgg56_default.bin to qmk_firmware folder                                                    [OK]
Bootloader not found. Make sure the board is in bootloader mode. See https://docs.qmk.fm/#/newbs_flashing
 Trying again every 0.5s (Ctrl+C to cancel).....................................................
dfu-util 0.11

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2021 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

Opening DFU capable USB device...
Device ID 0483:df11
Device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Interface #0 ...
Determining device status...
DFU state(10) = dfuERROR, status(10) = Device's firmware is corrupt. It cannot return to run-time (non-DFU) operations
Clearing status
Determining device status...
DFU state(2) = dfuIDLE, status(0) = No error condition is present
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash  "
Downloading element to address = 0x08000000, size = 56376
Erase   	[=========================] 100%        56376 bytes
Erase    done.
Download	[=========================] 100%        56376 bytes
Download done.
File downloaded successfully
Submitting leave request...
Transitioning to dfuMANIFEST state

キーボードで動いています。とりあえず、一見落着です。

(Joystickはまだ動いていません。)

ちなみに、A12ピン問題を解決する前は、ファームウエアーを書き込みはできるのに、USBデバイスの初期化すらができずホスト側からUSBデバイスとしてさえ認識されないひどい状況でした。

思い返すと、AVRのARDUINOで不用意にJTAG機能をONにするFUSE設定をして、一部のI/OのPINが使えなくなって悩んだのとある意味似た状況でした。

Previous Post Top Next Post