フォト
2017年11月
      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    
無料ブログはココログ

« IchigoJamでQRコードを表示してみる | トップページ | IchigoJamで自分自身をLIST表示するプログラム »

2015年5月25日 (月)

arduino IDE 1.6.4 で ARM STM32F103C8T6を使ってみる

2017/04/22 追記
本ページへのアクセスが多いので、Blue Pillのセットアップの良記事を紹介いたします。
・DEKOさんのSTM32F103C8T6の記事
   http://ht-deko.com/arduino/stm32f103c8t6.html

   私も最近ではDEKOさんページの内容を参考にしてセットアップしています。

・Arduino STM32については、下記にまとめを作成しました(2017/10/31 追記)
  Arduino STM32関連情報
  Arduino STM32 リファレンス

----

arduino IDEの 1.6.x 系列で安価なARMボードが動くらしいので試してみました。
2017/10/31 追記 この記事は古いです。最新の1.8.x系列を使いましょう)

試したのはSTマイクロエレクトロニクス社(本社 スイス)のARM(ARM 32 Cortex-M3 CPU)を
搭載したボードです。動作クロック 72MHz、64Kbフラッシュメモリ、20kバイトSRAM搭載です。

いつものAliexpressで購入しました。

01

んで、実物がこれです。

03

このボードに関する情報はここにまとまってあります(ピンレイアウトを除く)。
   (2016/12/03追記)
   こちらの記事も参考になると思います。 「Red Pill or Blue Pill?
   「Red Pill or Blue Pill?」によると、私のはBlue Pillボードで、USB接続に問題ありとの
   情報があります(USB用のPA12ピン接続のR10の抵抗に問題あり?) 。
  Problem

USB経由でプログラム書き込みが出来ないっぽいので、ST-Link V2を追加購入しました。
ST-Link V2 は STM32/STM8系CPU用のプログラマーです。

02

こんな感じで接続して使います。

Dscn3853

ドライバー、ユーティリティソフト類は、STマイクロエレクトロニクスの下記のサイトから
入手しました。
  ST-LINK/V2ST-LINK/V2 in-circuit debugger/programmer for STM8 and STM32
  ST-LINK/V2 in-circuit debugger/programmer for STM8 and STM32 (2016/09/20 更新)

ユーティリティソフトを起動してARMボードに問題なく接続出来ました。

04

次にarduino IDEの 1.6.4にSTM開発環境を組み込みます。
Arduino STM32という環境を利用します。下記のサイトで配布・情報公開が行われています。
  rogerclarkmelbourne/Arduino_STM32
  https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki

上記サイトの「Installation」の内容に従って環境を構築しました。
特につまづく箇所もかなく構築出来ました。

07

該当するボード、書き込み手段としてSTLinkを指定します。

06

Lチカを試してみます。ここでハマりました。

デフォルトで用意されている「スケッチの例 /Basics/Blink」を
試してみましたが、コンパイルと書き込みは出来たものの、Lチカしません。

ボード上のLEDは、デジタルピン13ではないようです。
ただし、ボード上のLEDの脇にPC13とのラベルが印刷されています。

インストールしたファイルをチェックすると
.\hardware\Arduino_STM32\examples
にサンプルソースがありました。その中の\Digital\Blink\Blink.inoを見ると
  digitalWrite(PB1, HIGH);   // turn the LED on (HIGH is the voltage level)
となってました。

これをヒントにデジタルピンの指定を13からPC13に変更するとLチカ出来ました。
ピン設定は互換性が無いようです。

選択したボードGeneric STM32F103C8 のボード関連の設定ファイルを覗いてみると、
(\hardware\Arduino_STM32\STM32F1\variants\generic_stm32f103c\board\board.h)
下記のように定義されています。

#define CYCLES_PER_MICROSECOND    72
#define SYSTICK_RELOAD_VAL     71999 /* takes a cycle to reload */

#define BOARD_NR_USARTS           3
#define BOARD_USART1_TX_PIN       PA9
#define BOARD_USART1_RX_PIN       PA10
#define BOARD_USART2_TX_PIN       PA2
#define BOARD_USART2_RX_PIN       PA3
#define BOARD_USART3_TX_PIN       PB10
#define BOARD_USART3_RX_PIN       PB11

#define BOARD_NR_SPI              2
#define BOARD_SPI1_NSS_PIN        PA4
#define BOARD_SPI1_MOSI_PIN       PA7
#define BOARD_SPI1_MISO_PIN       PA6
#define BOARD_SPI1_SCK_PIN        PA5

#define BOARD_SPI2_NSS_PIN        PB12
#define BOARD_SPI2_MOSI_PIN       PB15
#define BOARD_SPI2_MISO_PIN       PB14
#define BOARD_SPI2_SCK_PIN        PB13

#define BOARD_NR_GPIO_PINS        35
#define BOARD_NR_PWM_PINS         12
#define BOARD_NR_ADC_PINS          9
#define BOARD_NR_USED_PINS         4


#define BOARD_JTMS_SWDIO_PIN      22
#define BOARD_JTCK_SWCLK_PIN      21
#define BOARD_JTDI_PIN            20
#define BOARD_JTDO_PIN            19
#define BOARD_NJTRST_PIN          18

#define BOARD_USB_DISC_DEV        GPIOB
#define BOARD_USB_DISC_BIT        10

// Note this needs to match with the PIN_MAP array in board.cpp
enum {
    PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PA8, PA9, PA10, PA11, PA12, PA13,PA14,PA15,
	PB0, PB1, PB2, PB3, PB4, PB5, PB6, PB7, PB8, PB9, PB10, PB11, PB12, PB13,PB14,PB15,
	PC13, PC14,PC15
};

これでGPIO,UART、SPIの指定方法・接続ピンが分かりました。

Arduino STM32のサイトのLibrariesの内容を読むと現在のサポート状況が分かります。
I2Cは現状は、"software (bit-banged) implementation" のようです。

I2C. Working, However this is a software (bit-banged) implementation,
and has a maximum speed of around 250kbps. Speed improvements.
Hardware I2C has been tested by some users, but is not integrated into
the normal Wire library.


ライブラリの利用には色々と制約があるようです。

現状は強引にArduino IDE環境で使うよりはARM開発環境を使った方がよさそうです。
ということで、ARM開発環境も構築してみます。

2016/09/21 追記

公開されているモジュールにいくつか進展があるようで、
USB経由でプログラムの書込みが出来ると分かり早速やってみました。
下記の情報を見てやってみました。

GitHub - rogerclarkmelbourne/Arduino_STM32 stm32duino bootloader

ただしブートローダ書き込みの書込みが なぜかstm32flash.exe コマンドで出来ない
ので(P9,P10ピンにUSB-UART接続のシリアルポートを認識せず。やり方がマズい? )
STM32 ST-LINK Utility を使って書き込みました。

02

ブートローダはgeneric_boot20_pc13.bin を使いました。
(ブートローダ起動時にLEDを点滅させるのでその対応のブートローダのようです)

ドライバ(Arduino_STM32\drivers\winにあるドライバ)のインストールも行いました。

Arduino IDEにて書込みに"STM32duino bootloader"を選択します。

06

スケッチの書込みを行うとUSB経由で書込みが出来ました。

04

ただし、書込み後の後に変なエラーで出ています。書込み後にリセットを行う処理っぽいです。

スケッチ的には問題なしです。アスキーコードをシリアル出力するスケッチが
ちゃんと動きました。USB経由にて読めています。

05

以前より、使いやすくなった感じなのでちょっと使い込んでみてもよいかも。


2016/09/23 追記

専用のプログラマを利用ではなく、シリアル通信経由でもブートローダやプログラムの
書込みが出来ること判明、試してみました。

Dscn5769

黄色いジャンパーピンの仕様がここにありました。
シリアル経由でプログラムを書き込むにはこのジャンパーを写真のようにセットします。
これでリセットするとISPモードとなります。

この時、シリアル通信を行うためのピンは
  A9:TXD  、A10:RXD 

です。これにクロス接続してUSB-UARTモジュールなんかを使ってパソコンから
シリアル通信出来るようにします。

この状態で、STM32 Flash loader demonstratorを使ってプログラムの書込みが出来ます。

01

設定値は上記の通りです(Parity Evenもそのままで.. 私はこれでちょっとハマりました)。
NexTを押して、次のステップに進みます。次の画面状態になります。

02

Nextを押して次に進みます。

03

設定はそのままで、Nextで次に進みます。
Dounload to device を選択し、ブートローダのファイルを指定します。
(ファイル選択時に拡張子にBINを指定することに注意)

05_3

これでNextを押して書込みが行われます。

06_2

これでブートローダの書込み完了です。
ジャンパスイッチを元に戻してArduino IDEからはUSB経由で書き込みできるようになります。

2017/01/03 追記

追加購入した左3つ、USB経由の書き込みが出来ませんでした。

Dscn6335

ただしその3つ、USBシリアル通信が全く使えないわけではなく、
STLINK経由でUSBシリアル通信を行うスケッチを書き込むと、
USBシリアル通信は行うことが出来ました。

シリアルポートとしては認識しており、
スケッチ書き込み時のリセット等のタイミングがまずいような感じです。
抵抗補正をやっても出ダメでした。

このBlue Pillボード、見た目は同じでも微妙に異なるようです。
基板のパターンは同じようですが、左3つと右2つ、利用している部品が微妙に異なります。

ます、左3つはCPUが中国工場製、右2つはマレーシア工場製です。
LEDの色も左は赤、右は青です。クリスタルも異なります。

2017/01/04 追記

上記の左3つのUSB経由の書込みが出来るようになりました。
ブートローダの書込み後、最初のスケッチ書き込み時にだけ特殊な書き込みを
行う必要がありました。


ボードによっては、ブートローダ書き込み直後に
「perpetual bootloader mode」に移行する必要があるとのことです。
  参考記事 STM32 - Blue Pill http://wiki.stm32duino.com/index.php?title=Blue_Pill

具体的には、C14端子と3.3Vを結線した状態でスケッチ書き込みを行います。
( => 2017/08/08 注意:現時点では間に10kΩの抵抗を入れいる方法に修正されています

書き込みスケッチは空のスケッチ(setup()とloop()だけのスケッチ)でよいです。

Dscn6337
(写真差し換えました)

2回目以降は、C14端子と3.3Vの結線は不要です。
この方法で左3つが全て書きこめるようになりました。

1017/01/07 追記
(仮のメモ)
タイマー割り込み、SPI、DMA周りの機能が理解出来てきたので、
NTSC信号を生成してビデオ出力を実装してみました。 

実装において、
「建築発明工作ゼミ2008」さんの四角を表示する解説が大変参考になりました。
http://kousaku-kousaku.blogspot.jp/2008/06/arduino_26.html

さすがARM、高機能なタイマーが利用出来ます。
SPI+DMAを使ってのビットデータ出力も非常に便利です。
(スケッチはここ

01

解像度は224x192ドットです。美咲フォントを使って文字を表示してみました。

03

この当たりはブログ再開時に紹介していきます^^

デモ動画その1(解像度208×216)

デモ動画その2(解像度416×216)



1017/01/10 追記
(仮のメモ)
STM32用のTVout互換ライブラリを作成中です。


ArduinoUnoに比べSRAM容量が大きいのでちょっとしたゲームなんかつくれそう。


« IchigoJamでQRコードを表示してみる | トップページ | IchigoJamで自分自身をLIST表示するプログラム »

arduino」カテゴリの記事

ARM」カテゴリの記事

STM32」カテゴリの記事

コメント

たま吉さん、いつも拝見させていただいています。

Tiny Basicもますます充実してきているようですね。時間があるとき
に焼き直して動作の確認をしています。特にスクリーンエディタの使
いがって良いので、Ichigojam など放っておいて、いっそうのこと
Qbasic:https://archive.org/details/msdos_qbasic_megapack
によく似たインターフェースなど如何でしょうか。

私には力がありませんのでとても作れませんが、昔、DOSで使った
ときはいろいろとそれでアプリケーションを作った思い出があります。

ここに書かせていただいたのは、aitendo のmoving.saleでSTM32マ
イコンボード [MB-STM32F103VET6]を購入しましたので、この記事
が本当によくまとめられているので、参考にさせていただいてセット
アップを試みました。このボードは殆ど情報がありませんでしたが、
他の中華ボードの回路図も参考にして、何とかブートローダーで
Blinkを動かすことができました。

本当にありがとうございました。STM32F103万歳!

くまさん
コメント&情報ありがとうございます。
スクリーンエディタは、もう少し使い勝手よ良くしたいと考えています。
現在、スクリーンエディタ部は汎用的に利用出来るように修正しています。
(部品化、他のArduino環境での利用、液晶モジュール等のデバイス対応)
Tiny BASICの他に、他の対話的なインタフェースでの利用も考えています。

aitendoのMB-STM32F103VET6、いいですね。私も入手しようかなぁ

コメントを書く

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

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/61642002

この記事へのトラックバック一覧です: arduino IDE 1.6.4 で ARM STM32F103C8T6を使ってみる:

« IchigoJamでQRコードを表示してみる | トップページ | IchigoJamで自分自身をLIST表示するプログラム »