11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

inside of AVTOKYO 10th HACK BADGE

Last updated at Posted at 2017-11-17

AVTOKYO 2017
http://ja.avtokyo.org/avtokyo2017
で配布されたバッジ。

IMG_20171117_220158.jpg
左:フル版(個人スポンサーなど向け用)  右:ボタン3つ版(一般参加者頒布用)

内蔵プログラムの機能

  • Drink Ticket Request
  • clicker(ミニゲーム)
  • mini CTF(ミニゲーム)
  • username edit
  • credit
  • factory reset

内蔵プログラムについての解説はこちら
https://qiita.com/lowlevel/items/12c55ce9260e7d369989

フル版とボタン3つ版の違い

ボタンの数の違いだけです。
なお、内蔵プログラムはボタン3つしか使用していません。

# Inside Hardware

image.png

搭載マイコンチップ

STM32F103C8

STMicrosystem の、32bit ARM マイコンです。

  • Cortex-M3 Core
  • CPU Clock 72MHz
  • Flash 64KBytes(※)

スペック上は64KBytesですが、実際には128KBytesが搭載されています。

STM32の開発環境についてどのようなものがあるかの説明はこちら
https://qiita.com/nanbuwks/items/594568db3f5dc1d6c5fd

搭載しているマイコンボード

STMマイコンチップをバッジに直接搭載しているのではなく、RobotDyn社の「STM32F103C8T6 STM32 ARM Mini System Dev.board」を使いました。
これをバッジのサブ基板として搭載しています。

image.png

「STM32F103C8T6 STM32 ARM Mini System Dev.board」自体の使い方はこちら
https://qiita.com/lowlevel/items/47b0a8ba17f8afc473a6

回路図、パターン図

image.png
image.png

Pin assaignments

HACK BADGE Discription
BUTTON A PA0 Active High
BUTTON B PC14 Active High
BUTTON UP PB5 Active High
BUTTON DOWN PB6 Active High
BUTTON LEFT PB7 Active High
BUTTON RIGHT PB8 Active High
SPEAKER1 PA10 Active High
SPI OLED D0 PA5 CLK
SPI OLED D1 PA7 MOSI
SPI OLED RES PA3 Reset
SPI OLED DC PA6 DC(Data/Command)
SPI OLED CS PA4 Cable Select
IR RECIEVE PB11 RX3
IR SEND TRIGGER PB10 TX3
IR SEND LED PB0,PB1

シルク印刷のSW-DOWN,SW-LEFT,SW-RIGHT,SW-UPはデタラメです。Sorry!

開発環境のダウンロード

様々な開発環境がありますが、ArduinoIDEを使って開発する場合は以下の通り。

Arduio_STM32 環境構築

  1. Arduino 開発環境をインストールします。
    https://www.arduino.cc/

  2. Arduino_STM32 をダウンロードし、展開します
    https://github.com/rogerclarkmelbourne/Arduino_STM32

  3. 展開したものを、Arduinoフォルダ(後述)の中のhardwareに配置し直します。
    (Arduinoフォルダ)/hardware/Arduino_STM32-master
    と配置します。先のgithubからZIPでダウンロード→展開したフォルダがArduio_STM32-masterだとすると、(Arduinoフォルダ)に、hardwareのフォルダを作成し、そこにArduino_STM32-masterを入れ、その中にLICENSE,README.md,STM32F1・・・などが入るようにします。

2. 更に、その中のexamplesにboards.txtという名前の空ファイルを作成します。
これが無いと起動時に 「.....hardware/Arduino_STM32-master/examplesにboards.txtがありませんでした。1.5以前のものですか?」 というエラーが出る)

(2018/11/1時点での最新版で確認したところboards.txtの作業はしなくても良くなったみたいです)

  1. Arduino IDEを起動して、<ツール>ー<ボード>ーボードマネージャで「Arduino SAM Boards(32-bits ARM Cortex-M3)」を追加します

Windows

Arduino フォルダ:「ドキュメント」フォルダの中のArduinoフォルダ

また、Windowsのみの作業として、Arduinoフォルダ中のhardware/Arduino_STM32-master/drivers/win/install_drivers.bat を管理者で実行してください。
"install drivers for the Serial and DFU (upload devices)"
ということだそうです。

なお、ST-Linkを使う場合はST-Linkのドライバのインストールも必要となります。
http://www.st.com/ja/development-tools/stsw-link009.html

このページから STSW-LINK009 をダウンロード、インストールしてください。

更に、書き込み時にST-LINK_CLI.exeを使いますがこのプログラムはMSVCR100.dllおよびMSVCP100.dll、mfc100.dllが必要となります。
これらが無いエラーと鳴った場合には、Microsoft Visual C ++ 2010再頒布可能パッケージをダウンロードし、インストルします。
Microsoft Visual C++ 2010 再頒布可能パッケージ (x86)
https://www.microsoft.com/ja-jp/download/details.aspx?id=5555
Microsoft Visual C++ 2010 再頒布可能パッケージ (x64)
https://www.microsoft.com/ja-jp/download/details.aspx?id=14632
環境のテスト時にはx64,x86両方インストールしました。x86は必須ですが、x64も必要かどうかは未チェックです。

Mac OSX

Arduino フォルダ:「書類」フォルダ中のArduinoフォルダ

Linux

Arduino フォルダ:/home/<ユーザ名>/Arduino

また、Linuxのみの作業として以下の2つの作業が必要。

まず、
(Arduinoフォルダ)/hardware/Arduino_STM32-master/tools/linux64/install.sh
を実行して再起動。

また、
http://stm32duino.com/download/file.php?id=1360
から
77-mm-usb-serport-blacklist.rules.tar.gz
ダウンロードして解凍、できた77-mm-usb-serport-blacklist.rulesを
/etc/udev/rules.dに配置し、再起動する。

これは本家のmodemmanagerに付属の77-mm-usb-serport-blacklist.rulesにSTM32の仮想ポートを加えたもの。ArduinoUnoなどの記述も増えているのでこれを使おう。

これを配置する目的は、書込やリセットなどでモード遷移してUSBシリアルデバイスが消えたり現れたりするときに、Linux側の悪いmodemmanagerが悪いことをしてATコマンドを送ったりするのを防ぐため。

(cf,http://stm32duino.com/viewtopic.php?f=22&t=1892#p25160)

これをしないと、シリアルモニタを開くときに port busy とか言われる。

Test Program

BadgeにはUSB Bootloaderが書き込まれているため、MicroUSBメモリを使って書き込みができます。

方法
image.png

  1. Arduino IDEをセットアップする
  2. バッジとPCをmicroUSBケーブルで接続する
  3. Bボタンを押しながらリセットをする。Bボタンはリセットを離しても2,3秒押しておく
  4. 3.がうまくいくと永続ブートローダーモードになる。永続ブートローダーモードになると青LEDが1秒間に約4回点滅します。
  5. Arduino IDEで以下のようにスケッチ(プログラムのこと)を作り、設定を合わせて書込を行う
    image.png

以下は永続ブートローダーモードとまぎらわしくなくするため、LEDを脈動するようにしたもの。


void setup() {
  pinMode(PC13, OUTPUT);
}

void loop() {
  int wait=1;
  for ( int i = 1; i < 12; i++){
    digitalWrite(PC13, HIGH);
    delay(wait);
    digitalWrite(PC13, LOW);
    delay(wait);
    wait=wait*2;
  }
}

「ファイル」-「環境設定」-「書込設定」(Mac OSXの場合は「Arduino」 - 「Preferences」- 「書込設定」)で「より詳細な情報を表示する」で「書き込み」にチェックを入れると書込時に以下のように表示がされるようになります。

書込は、下の画面の右矢印ボタンです。

image.png

ST-Linkを使って書くやりかた

そのままだと、ブートローダーモードを使ってUSBケーブルで書けますが、操作に失敗してブートローダーを壊したりした場合はST-Linkを使って書き込みます。
配線は以下のようになります。
image.png

ST-Linkを使えば、ブートローダーを使わないスケッチの書込をして起動の早いアプリを作成したり、ブートローダーの復旧などもできるようになります。

ST-Linkを使った場合の書込方法やブートローダの復旧方法などはこちらをご覧ください。
https://qiita.com/lowlevel/items/47b0a8ba17f8afc473a6

Arduinoと違うところ

ポート指定の方法

PC13という名前にしてください。

OLEDディスプレイのプログラムを行うには

こちらを参照してください

11
5
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
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?