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

STM32

2018年1月 2日 (火)

Aliexpressで見つけたSTM32F407VGT6ボードを購入

こりもせず、Aliexpressで見つけた良さそうなマイコンボードを購入しました。

STM32F4discovery STM32F407VGT6 ARM Cortex-M4 32bit MCU Core Development Board 02

到着したマイコンボード

BluePillボードの2倍くらいの大きさです。STM32F4が乗っている割には非常にシンプルなボードです。

Dscn7437

使い勝手は良さそうなのですが、資料なし。
色々探してみると、このボードを評価しているサイトがありました(感謝!)。

Visuariddim - DIY More STM32F407VGT6 ボード
http://dubstylee.net/v/diy-more-stm32f407vgt6/

上記サイトの情報により、ユーザー利用可能LED、ボタン利用のポート番号や、
USBの問題点を知ることが出来ました。

とりあえず、Arduino STM32環境にてLチカを行うことが出来ました。
書込みはST-Linkを利用しました。

Dscn7442

USBシリアルの利用は上記サイトで指摘のある通り、問題ありです。
D+、D-がプルアップ抵抗、ダンピング抵抗がなくポートに直結の状態。
とりあず1.5kΩの抵抗でプルアップすることで、USBシリアルを使った通信を行うことが出来ましたが、
USBを認識したり、しなかったりと不安定です。

USB経由でDFUを使った書き込みは、DfuSeDemoでは出来ましたが、Arduino IDEからは
出来ませんでした。

(2018/01/05 補足 Arduino IDE for STM32にてF4ボードでUSB経由(.dfu形式イメージ対応)で
  書き込みを行うには、下記のリンク先のカスタマイズ設定が必要です。
  alternative way to use STM DFU in Arduino 1.8.3 on Black F407VET6
  ただし、このボードでは書き込みは出来ても、動作しませんでした。
)

Dscn7443

ボードとしては、シンプルで好きなタイプなのですが...
とりあえず、実験用に使ていこうとは思います。

2018/01/03 追記

端子名が分かるよう、ラベルを貼り付けました。
これでちょっと使いやすくなりました。

Dscn7455

2018/01/10 追記
Arduino for STM32のフォーラムにこのボードに関する投稿記事を見つけました。
[Solved] Anybody using this F4 board and got the USB working?

結論としては、「外部プルアップ抵抗付けなくてもUSB CDCは利用できる~よん」
とのことです。内部でプルアップ処理を施す対応のようです。

2017年12月22日 (金)

STM32関連 「STM32HAL&SW4入門 Kindle版」を読んでみると..

STM32開発環境として最近 SW4STM32を使い始めました。
何か参考になる書籍をと思い、電子書籍「STM32HAL&SW4入門 Kindle版」購入しました。
(実際には、Kindle Unlimited: 読み放題対象の書籍なので、そのサービスにて購入)

03

内容的には、参考になる書籍なのですが、確実に間違っている内容もあります。
ケチをつけるつもりは無いのですが(う~ん、でも有料なので文句も言いたいなぁ..)、
間違った手順が広まると困るので、その点について記載します。

以下、インストールに関しての電子書籍「STM32HAL&SW4入門 Kindle版」 からの引用です。

2-2. 統合開発環境 インストール

 今回 は Windows 7 マシン に インストール する 場合 について 説明 し ます。

2-2-1. JavaSE インストール

  SW 4 STM 32 は Eclipse ベース の 開発環境 の ため、 JavaSE の インストール が 必須 です。 既に JavaSE が インストール さ れ て いる 場合 は 次項 へ 進ん で ください。 先 ほど、 ダウンロード し た SW 4 STM 32 の インストール を 開始 する と、 JavaSE が インストール さ れ て い ない 場合 は 自動的 に インストール が 中止 さ れ、 JavaSE の インストール が 促さ れ ます が、 今回 は 先 に JavaSE を インストール し ます。

実際には、JavaSEの事前インストールは不要ですし、インストールは中止されません。
実際に試してみると、途中でjavaのインストール確認画面が表示され、javaがインストール
されます。

02

インストール後は問題なくSW4STM32が起動出来ました。
インストールしたSW4STM32のフォルダを調べてみると、jreがインストールされてる
ことが分かります。

05

利用しているSW4STM32のEclipdeインストール情報を見てみると、
どのjava環境を利用しているかが分かります。

04_3

公式サイトのインストール手順にjavaを事前にインストールする記載は
ないので、素直に公式サイトの手順に従えばインストールでOKですね。

情報が正確かどうかは、改めて「一次ソース(公式サイト)」の確認が大事ですね。


2017年12月16日 (土)

電子書籍「Mastering STM32」で勉強中 。。。。

先日購入した 電子書籍「Mastering STM32」を熟読中。。。

本日は、「5. Introduction to Debugging」の章に到達(まだまだ先は長いです^^)。

「ARMセミホスティング」等、ARMでは当たり前の作法というか、ノウハウのようですが、
全然知りませんでした。OpenOCDのちょっと突っ込んだ解説、非常に良いです。
このあたりを知っているだけで、デバッグに対するアプローチが全然異なると思います。

個人の趣味ベースで、体系的に幅広く網羅して学んでいくのは限界がありますが、
この書籍は、けん引してくれます。
英文なので、読み進めるとストレスが溜まるのがちょっと難点です。

追記
Mastering STM32の解説では、eclipce+プラグインを対象としていますが、
System Workbench for STM32(SW4STM32)で、セミホスティングやってみました。

デバッグ内でfprint()はもちろんのこと、fopen()、fwrite()で実行中の情報をホスト側の
OSのファイルに保存できます。デバッグでかなり威力を発揮できます。
ホスト側のファイルをロードして、EEPROMへの書込みなんかも出来るかもしれません。

Sw4stm32

設定は、下記の情報を参考にさせていただきました。

SW4STM32でsemihostingが使いたい
Semihosting with OpenSTM32 and STM32F446RE Nucleo
Semihosting on ARM with GCC and OpenOCD

2017年12月15日 (金)

電子書籍「Mastering STM32」を購入 ・・・ かなりの良本

STM32関連の書籍を探していたのですが、国内で市販されている書籍があまりなく、
洋書の電子書籍「Mastering STM32」がお薦めとのことで、購入しました。

https://www.carminenoviello.com/mastering-stm32/

01

価格は$32.99と高い気がしますが、PDF版では848ページもあり高くはないでしょう。

まだ最初の導入部分と開発環境の構築部分までした読み進めていませんが、
STM32をマスタするにおいては、かなりの良本だと思います。

国内で出版されている書籍は古いフレームワークを利用したものばかりの中、
HALベースなのも良いです。記事内で利用しているツール類は、最近のバージョンの
ため、ずれが無いのも良いです。

また、電子出版の利点を生かして、頻繁に更新しているようです。
定期的に情報を取り込んで更新しているようなので、これ一冊持っていれば、
長く使えそうです。サポート専用サイト、フォーラムもあるので情報交換等を出来そうです。

導入部分の「1.2.2 …. And Its Drawbacks(そしてその欠点)」で、
『なんで、STM32は今一、分かりにくのだろうか?』と思っていた疑問に対する答えが
分かりました。

他のメーカーのLPC、AVR、Microchipなんかは、取りあえず無料で使える(制約あり)、
専用の統合環境を用意していますが、ST社は用意していません。
そのため、利用はそれぞれ異なった環境を使っています。
幾つかの書籍なんかも、開発環境がまちまちです。
これだけでも、それそれの環境で初心者は混乱します。ネットで調べても、
自分と異なる環境の情報なので、手順なんかも違ってきます。

また、ライブラリ関係の公開ドキュメントが貧弱です。
ソースコードから生成しているので、簡単なインタフェースレベルの説明しかなく、
サンプルソース付きの解説がほとんどないです。

そのほか、CubeMXの生成コードがバグが多い点にも言及しています。

英語なので、読み進めるスピードが亀ですが、ネット上の断片的な情報を探すよりも
しっかりと理解出来そうです。

去年、スイッチサイエンスで安売りしていた「ST Nucleo Board STM32F401RE」を
やっと活用出来ます。

02_2

Dscn7371

2017年11月19日 (日)

Arduino STM32で漢字表示

以前、Arduino用でやってみた「Arduino - TV出力(TVoutLibrary使用)で漢字表示」を
Arduino STM32でやってみました。

マイコンボードは、STM32F103C8T6搭載のBlack Pillボードを利用しています。
Blue Pillボードでも動きます)

自作フォントライブラリを利用しています。
  Arduino用漢字フォントライブラリ SPIフラッシュメモリ版
  https://github.com/Tamakichi/Arduino_exfonts


01

動いている様子



結線

02



スケッチ

//
// TTVOutでマルチフォント表示 by たま吉さん 2017/11/18
//  

#include <SPI.h>
#include <W25Q64.h>
#include <exfonts.h>
#include <TTVout.h>

TTVout TV;
exfonts ft;  // フォント管理オブジェクト

// 指定位置に1文字表示
void mputc(uint16_t x, uint16_t y, uint16_t code) {
  byte buf[MAXFONTLEN]; 
  ft.getFontData(buf,code); // フォントデータの取得  
  TV.bitmap(x,y, buf ,0,ft.getWidth(), ft.getHeight());
}

// 指定位置に文字列表示
void mprint(uint16_t x, uint16_t y, char* str) {
  uint16_t wstr[1024];
  int16_t   len;
  
  len = exfonts::Utf8ToUtf16(wstr, str);  // UTF8からUTF16に変換する
  for (uint16_t i=0; i <len; i++) {
    mputc(x, y, wstr[i]);
    if (x + ft.getWidth()*2 < TV.hres()) {
      x += ft.getWidth();  
    } else {  
      x = 0;
      if (y+ft.getHeight()*2 < TV.vres()) {
        y+=ft.getHeight();
      } else {  
        break;
      }
    }
  }      
}

void setup () {
  static const char* text=
   "吾輩わがはいは猫である。名前はまだ無い。"
   "どこで生れたかとんと見当けんとうがつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。"
   "吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪どうあくな種族であったそうだ。"
   "というのは時々我々を捕つかまえて煮にて食うという話である。しかしその当時は何という考もなかったから別段恐しいとも思わなかった。"
   "ただ彼の掌てのひらに載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。"
   "掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始みはじめであろう。";
   
  TV.begin(SC_448x216,2); // 第2引数でSPI 1,2を指定(デフォルト 1))
  TV.adjust(2);           // 垂直同期信号補正(デフォルト 0)
  ft.init(PA4);           // フォント管理の初期化
      
  //7種類のフォントサイズで文字列表示
  while(1)
    for (uint8_t i =0 ; i <7; i++) {
      TV.fill(0);
      ft.setFontSize(i);
      mprint(0,0,(char*)text);
      delay(1000*3);
    }
}

void loop () {

}

Arduinoと比べると、SRAMが20kバイトあるため画面解像度448x216ドットを確保出来ました。 表示も速いです。

2017年11月17日 (金)

豊四季 Tiny BASIC for Arduino STM32のファームウェア書込み手順

豊四季 Tiny BASIC for Arduino STM32のファームウェア書込み手順を下記サイトにまとめました。

ブートローダ付きファームウェアのインストール手順

Photo

この手順では、Arduino環境無しにファームウェア(ブートローダ付きスケッチ)を
ボードに書き込むことでが来ます。

ただし、下記の写真のようにUSBシリアル変換モジュール(200円程度)が別途必要です。

1000

2017年11月16日 (木)

Visual Studio 2017 でArduinoを利用する

マイクロソフトの統合開発環境 「Visual Studio 2017 Community 2017」で
Arduino向けプログラムの開発が出来ると聞き、試してみました。

最近のVsual Studioは個人レベルの利用であれば、無償版の範囲でも
かなりの機能が利用できるようです。

プラグイン的な「Arduino IDE for Visual Studio」をインストールすると、
Arduinoのプラグイン的に利用していたArduino STM32もコンパイルと書き込みまで出来ました。

Vs

他に、Androidアプリ開発、マークダウンドキュメント対応と充実しています。
最近のマイクロソフトは個人開発・オープンソース開発者に優しくなった感があります^^

2017年11月15日 (水)

豊四季Tiny BASICでHC-SR04を使った距離計測

豊四季Tiny BASIC for Arduino STM32
超音波距離センサHC-SR04を使った距離計測を試してみました。

HC-SR04は、秋月電子でも販売されていますが、amazonで探すと、200円程度で入手出来るようです。

1000

プログラム

 1 'キョリケイソク
 10 CLS
 20 P1=PB8:P2=PB3:T=180
 30 K=(3315+T*6)/20
 40 GPIO P1,OUTPUT
 50 GPIO P2,INPUT_FL
 60 "loop"
 70 OUT P1,LOW
 80 OUT P1,HIGH
 90 OUT P1,LOW
 100 D=PULSEIN(P2,HIGH,200,1)
 110 ?DMP$(D/100*K,2)
 120 WAIT 300
 130 GOTO "loop" 

PUKSEIN()関数を使って、超音波が反射して帰ってくるパスル幅を調べ、
その時間から距離を求めています。
小数が使えないため、DMP$()という、指定位置に小数点を挿入する文字列関数で
見かけ上、小数表示しています。


接続
HC-SR04 Trig端子 :PB8(5Vトレラントピン)
HC-SR04 Echo端子 :PB3(5Vトレラントピン)
HC-SR04 GND端子 :GND
HC-SR04 VCC端子 :5V
HC-SR04は5V動作のため、Blue Pillボードの5V入力可能(5Vトレラント)ピンを利用します。

動作の様子

正確な計測値とは言えませんが、そこそこ目安となる数字はでていますね。

参考にしたサイト
【Arduino】超音波距離センサ(HC-SR04)の測定精度を向上(気温考慮)

こちらのサイトにもまとめました
超音波距離センサ(HC-SR04)を使った距離計測

2017年11月12日 (日)

シリアル接続 赤外線送受信モジュールの調査

Aliexpressでシリアル接続で利用出来る赤外線送受信モジュールを見つけ、入手しました。

Photo

製品はこんな感じです。

04

06

いつものAliexpressクオリティでマニュアルが無いので、
裏のシルク印刷「YS-IRTM」で情報を探すと ズバリの情報がありました。
  ・Arduino フォーラム Topic: Infrared interface
   https://forum.arduino.cc/index.php?topic=359707.0

上記の情報から、通販サイト「UCTronics Store」の商品情報のページに詳しい情報があります。
  ・Infrared Remote IR Decoder Encoding Transmitter & receiver Wireless Module NEC
  08

  このページにマニュアルのリンクがあります。
  http://www.uctronics.com/download/U3107_Infrared_decoding_module.zip

マニュアルは中国語ですが、使い方が分かりました。
(以下、使い方のメモ)

結線

05

シリアル(UART)はクロス接続です。電源は3.3Vでは動きません。5Vを供給します。
3.3Vマイコンを使う場合は、5Vトレラント対応を確認して利用します。
IchigoJamやSTM32(Blue Pillボード)のSerial1は、5Vトレラントなので直結出来ます。

シリアル通信条件
デフォルトでは、9600bpsで、8ビット長、パリティなし、ストップビット1、フロー制御無し

とりあえず、データの受信はこれで出来ます。
NECフォーマットなので、赤外線リモコンを押したときに、受信するデータは
次の3バイトとなります。
  [カスタマーコード上位] [カスタマーコード下位] [ボタンコード]

試しに、豊四季Tiny BASICを使って、受信してみます。

01

プログラムソース

10 CLS
20 SOPEN "9600"
30 D=SREAD()
40 IF D>=0 ?HEX$(D,2)
50 GOTO 30

プログラムは、シリアルをオープンして、データを受信したら16進数で表示します。

02

ボタンを押すと3バイト受信出来ました。
3バイトのうち、最初の2バイトがカスタマーコードで、どの赤外線リモコンから送信されたか識別できます。
3バイト目が押されるボタン毎に異なる値となります。

こういった実験は、単独稼働できるボードだとお手軽に出来ますね。
インタープリターでコンパイル不要なのも良いです。

モジュールには幾つかのコマンドが利用出来ます。
コマンドは次の5バイト構成となっています(16進コード)。

     [アドレス]  [コマンド] [引数1] [引数2] [引数3]

アドレス:送信先モジュールを指定するアドレス
    0xA1(デフォルトアドレス、変更可能)
    0xFA(ユニバーサルアドレス、変更不可)

コマンド: モジュールに対する指示
   0xF1  赤外線信号送信
           引数1~引数3に送信するデータを指定します。
              引数 1: カスタマーコード上位
              引数 2: カスタマーコード下位
              引数 3: データ(ボタン識別コード)

   0xF2  アドレスの変更
           引数1~引数3に送信するデータを指定します。
              引数 1: 新しいアドレス
              引数 2: 0x00
              引数 3: 0x00

   0xF3  シリアル通信速度の設定
           引数1~引数3に送信するデータを指定します。
              引数 1: 0x01~0x04(0x01:4800、0x02:9600、0x03:19200、0x04:57600bps)
              引数 2: 0x00
              引数 3: 0x00

ここで、アドレスとはモジュールを個体識別するコードのようです。
やろうと思えばシリアル通信でも1対多送信出来るので、同時に複数のモジュールを
接続してる場合にでも利用するのかもしれません。

上記のコマンドを送信し、正しく処理が行われた場合は、コマンドのコード1バイトが
応答として送られてきます。

  0xF1  送信に成功した
  0xF2  シリアルポートアドレスが正常に変更されました
  0xF3  ボーレートが正常に設定されました

応答が帰ってこない場合、エラーを意味します。

資料を読むと、アドレス、通信速度のリセット方法の説明があるので、
アドレス、通信速度の変更は保持さるっぽいです(試していません)。

モジュールをもう一つ使って送信も試してみました。

10

もう一方はUSB-シリアル変換にてパソコン(Windows 10)に接続しています。

09

Real Time Serial Captureというソフトを使って、データ送信コマンドとして
0xA1 0xF1 0x12 0x34 0x56 をモジュールに送信します。

相手側にて受信され、画面に 12、34、56が表示されました。
パソコン側は応答としてF1を受信しています。

2、3メートル離して送信を試してみましたが、問題なく送信出来ました。
NECフォーマットの都合上、一度に3バイトしか送れませんが、色々と使えそうです。


さて、このモジュール、回路図を見るとこのモジュールにはSTC11F02Eというマイコンが
使われているようです。STCは中国で良く使われているマイコンのようです。

ちょっと消費電力が気になり、測定してみると15mA(5V)でした。
まあこの程度なら利用には問題ないでしょう。

2017年11月 6日 (月)

TFT版 簡易画像ビューアー

豊四季Tiny BASIC for Arduino STM32 のTFT版で簡単な画像ビュアーを作成してみました。
SDカード内の24ビット ビットマップファイルを表示しています。

プログラムソース

 1 'BMPローダー
 10 CLS
 20 FOR I=1 TO 8
 30 DWBMP "cat/cat";I;".bmp",0,0
 40 WAIT 1000
 50 NEXT I
 60 GOTO 20

豊四季タイニーBASIC for Arduino STM32 V0.85β(17/10/28)

より以前の記事一覧