フォト
2025年4月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      
無料ブログはココログ

« Arduino STM32のBluePill用ブートローダについて | トップページ | MSXのジョイスティックポートを使ったシリアル通信 (1) »

2019年2月18日 (月)

入手したボード用 Arduino STM32用ブートローダの作成

AliexpressにてSTM32F103RCT6搭載miniボード(写真の上のボード)を
入手したのですが、Arduino STM32環境で使うためのブートローダが
用意されていないため、ソースからビルドして用意しました。

その時のまとめメモです。

ブートローダの作成はWindows 10環境にて行いました。

Dscn9600


ボードの調査


ボート別にたくさんのブートローダが用意されていますが、基本的な相違は、
  1) ボード上のLEDの制御用ポート番号
  2) 永続モード設定用のボタン用のポート番号

です。この修正版を用意すれば良いわけです。

今回入手したボードは、2つのLEDがPC0、PC1に接続、1つのボタンがPC2に接続しています。

 

02

 

ボタンは、押すとLOWになるタイプです。

03

 

そこで、ブートローダで利用するLEDをPC0、ボタンをPC2として利用することにします。

ブートローダの作成には、下記の情報が大変参考になりました。

ただし、参考にした情報はLinux環境でのビルドのため若干方法が異なります。

参考サイト
   ・Visuariddim - STM32Duino Bootloaderの自前ビルドとか


ブートローダのビルドに必要なものの用意

1)Arduino STM32ブートローダのソースファイル

  STM32duino-bootloader
  https://github.com/rogerclarkmelbourne/STM32duino-bootloader

上記からダウンロードまたは、gitコマンドでcloneを作成します。
ここでは、解凍したフォルダを D:\work\STM32duino-bootloader とします。

2)makeコマンド

  Cygwinのmake.exeを利用しました。
  ※Cygwinのインストール時にmakeパッケージのインストール指定が必要です。   

04

インストールしたCygwin環境のコマンドパスを調べておきます。
ここでは、C:\cygwin64\bin とします。


3)arm-none-eabi-gcc 4.8.x

  Arduino IDEの環境のものを利用しました。   

  arm-none-eabi-gccの絶対パスの調査

05

Arduino IDEの環境設定画面下の赤枠部分のパスをクリックすると、
エクスプローラーが起動します。
そこから、フォルダpackagesに下記のパスがあることを確認します。
\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1\bin\

エクスプローラーのアドレスバーの絶対パスをコピペして、
D:\work\STM32duino-bootloader\ の下に
環境設定用のバッチコマンド makeenv.bat をメモ帳で作成します。

makeコマンドへのパスが通っていない場合、
一緒にmakeコマンドのパスの設定します。

makeenv.bat の中身

PATH=%PATH%;C:\Users\Owner\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1\bin;C:\cygwin64\bin; 

※ アップデート等により、4.8.x以降のパス名称は異なる可能性があります。

ファイルの修正

新しいボード用のブートローダ作成にために、
D:\work\STM32duino-bootloader\にあるMakefile、config.h を修正します。

追加は面倒なので、既存のgeneric-pg15 用の定義をgeneric-pc0に変更します。

1)Makefileの修正
  メモ帳で開いて、置換機能でpg15 ⇒ pc0、PG15 ⇒ PC0に置換して保存します。

06_2

07

2)config.hの修正

メモ帳でconfig.hを開き、PG15で検索して該当する定義を参照します。

08

次に、下記の修正をします。
ターゲット
  PG15 ⇒ PC0
LED
  GPIOG ⇒ GPIOC
  15 ⇒ 0
Button
  14 ⇒ 2
  1 ⇒ 0

この修正は、LEDがPC0(1でON)、ボタンにPC2(0でON)を割り当てるためです。

09

保存してメモ帳を閉じます。


ブートローダのビルド

コマンドプロンプトを起動し、 D:\work\STM32duino-bootloader  フォルダに移動し、
作成しておいた環境設定バッチコマンドを実行します。

さらに、makeコマンドを実行します。
ターゲットは generic-pc0 を指定します。

> make generic-pc0

12

ビルド処理が実行されて、程なく genenic_boot20_pc0.bin が
D:\work\STM32duino-bootloader\bootloader_only_binaries\ に
作成されます。

13

 

 

 


ボードへのブートローダの書き込み

 

ST-Linkを使って書き込みを行いました。

 

 

 

 

 

Dscn9661

ボードを接続し、STM32 ST-Link Utilityにて、genenic_boot20_pc0.bin を読み込んで
書き込みを行いました。

 

14

ブートローダの書き込み後は、USB経由でのスケッチ書き込みです。

ボードを永続モード(スケッチ書き込み待ち状態)にて、最初のスケッチを書き込ます。
永続モードの設定は、ユーザーボタンを押したまま、リセットボタンを押します。
LEDが点滅して永続モードの状態を示します。

 

16

スケッチも問題なく書き込めました。

 

Dscn9662

スケッチ書き込み後は、COMポートも認識出来ました。

以後、このボードはArduino IDE環境でUSB経由でスケッチが書き込めます。
ブートローダのコンパイルはLinux環境の方が楽ですね。

 

« Arduino STM32のBluePill用ブートローダについて | トップページ | MSXのジョイスティックポートを使ったシリアル通信 (1) »

arduino」カテゴリの記事

STM32」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: 入手したボード用 Arduino STM32用ブートローダの作成:

« Arduino STM32のBluePill用ブートローダについて | トップページ | MSXのジョイスティックポートを使ったシリアル通信 (1) »