STM32F103 をNanoの代替で使用したい

2017年6月28日更新

Arduino(ATMEL328)を使用して、SDカードに書き込んだパターンデータを読み込みながらパルス出力するというプロジェクトの試作を続けているのですが、SRAM2KBというのはどうしようも無い壁だと考えました。
パタンデータ1周期分をメモリに置ければ基本的にうまくゆくことまでは確認出来たのですが、2KBのメモリ環境では100データの2バッファぐらいまででないと確保できないのです。サイズが大きいと実行中にプログラムリセットが掛かり、先頭から繰り返してしまいます。

MEGAの採用も検討しています。Arduino101も検討しています。或いはSPII/FのSRAMでしのげないか、検討しました。が、ここに来て STM32F103 が利用できないかという方向性が出てきました。

ここではSTM32F103の可能性について調査します。この方向性はSTM32F103 が安価で入手出来ることに尽きます。

Name

STM32F103C8 (Bule Pill)

Nano
参考価格スイッチサイエンス \1,900 \2,880(ユーロ22.00)
 
Processor STM32F103C8T6
( ARM 32-bit Cortex-M3 CPU Core)
ATmega328(AVR)
Operating Voltage 2.0-3.6V 5V
Input Voltage Range 5-12 V 7 -12 V
CPU Speed 8MHz chip内で72MHzとして扱う 16MHz
Analog In 2 12bit 10ch 8
Digital IO 37I/O 22(of wich 6 provide PWM output)
PWM 15 6
EEPROM [kB] 4 1
SRAM [kB] 20 2
Flash [kB] 64 32
USB端子 MicroB Mini-B
SERIAL UART 3ポート 1ポート
DC Current per I/O Pins[mA] 20mA (I/O Pins) 40 mA (I/O Pins)
Power Consumption[mA] 38 mA 19 mA
PCB Size[mm] 22 x  53.3 mm 18 x 45
Weight 14 g 7 g
Product Code   A000005
互換機の価格調査
HiLetgo(Amazon) \300 (CH340G) ¥ 330(CH340G)

STM32F103を使うにはArduinoIDEで使える様に対策する必要があります。ArduinoIDEでNanoライクに使えないと敷居が高すぎということになります。
一応先人がArduinoIDEで使える様にする方法を提示していますので、参考にします。

https://ht-deko.com/arduino/stm32f103c8t6.html
https://www.youtube.com/watch?v=J7ctdFaBZ20

ArduinoDueでARM 32が使える様になったとはいえ、このSTM32F103C8はpinアサインとかUSBシリアル変換とかそこそこ敷居があります。
STM32ですのでmbed開発環境で使用できます。
ArduinoIDEで使う分にはブートローダが書き込まれていない点が問題になるようです。この部分をクリアできればArduinoIDEで使用できるようです。とはいうものの、他にもpinサインとか、ポートアクセス、カウンタやタイマの数等々違いをきちんと把握する必要があります。

とりあえず、ArduinoIDEの拡張ライブラリのインストールを実施しました。後は実機が届いてからの作業なのかと思います。


STM32F103が入手出来ましたので、ArduinoIDEで使用できるように作業しました。

https://ht-deko.com/arduino/stm32f103c8t6.html

を参照しながら環境整備を行ったところ、無事ArduinoIDEからBLINK(Lチカ)が実行できるようになりました。この作業は上記URLにサイト情報が無ければお手上げでした。
一部変更点もあったので、別途示します。
※ArduinoIDEからのUSB接続書込は出来るのですが、安定性に欠けます。原因不明。
そのため、シリアル通信等基本的な動作確認スケッチから移植し、確認作業を行いました。


NANOで動作確認済みのスケッチをSTM32に移植します。

当初予定していた配線を変えます。

STM32F103Pin

意味合い

Micro-SD-Card-ModulePin(J2)
GND グランド GND
5V 電源 5V供給し、内部で3.3V VCC
PB4 PA6 データ入力 MISO
PB5 PA7 データ出力 MOSI
PB3 PA5 シリアルクロック SCK
PA15 PA4 チップセレクト CS


SDカードが使えたので今度はLED&KEY(TM1638)を使用したいと考えました。

実際に先人の例を探したのですが、これがなかなか見つからないです。不思議でした。
結論からするとArduino用のライブラリが使えます。ただ、ライブラリを弄る必要があります。

使用ライブラリ:tm1638-library-master

を開いて

//#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
//#else
//	#include "WProgram.h"
//#endif

のようにレタッチします。修正方法はいろいろありますので、結果を導き出せる方法で良いと思います。
※ライブラリを弄るのは基本御法度です。スケッチ側で defined(ARDUINO) && ARDUINO >= 100 が有効なら "Arduino.h"が使われるはずです。

#define ARDUINO 183

参照:https://uepon.hatenadiary.com/entry/2016/01/17/154422


BluePillを使用したSTM32duinoプロジェクトを検索していて、ELM327というデバイスを見つけました。『車のOBD2診断コネクタから車のさまざまなデータを読み出す機器』という紹介文がありました。OBD2はOn-Board Diagnostics 2 自動車の自己診断機能のver2と云う意味合いのようです。
このOBD2にCANインターフェースが採用されており、このCAN通信に使用しているデバイスとしてSTM32Fファミリーの一部が使われているようです。

先人の記事によると ELM327 は ELM Electronicsというカナダの会社が作ったOBD-IIの通信を簡単に行えるモジュールのようです。 このモジュールを搭載した機器が様々な所から発売されています。ELM327も幾つかバージョンが有り、旧いバージョンはPIC18Fで、新しいモノはSTMF0という情報があります。ELM327の互換製品もたくさんあるので調査しきれないですね。
https://en.wikipedia.org/wiki/ELM327

OBD2をArduinoで実現するシールドがあります。ただ、AVRのみでは扱いきれないのかシールドに専用チップMCP2515/2551を乗っけてCANの部分を補っているようです。
Arduino用CAN-BUSシールドは、https://www.robotshop.com/jp/ja/can-bus-shield-arduino.html にあります。
ところでSTM32ファミリーにはCAN通信をサポートしているchipがいくつかあり、BluePillもそのひとつです。BluePillを使ったSTM32ArduinoでCAN通信、OBD2ができないのか調査することにしました。

BluePillのCAN通信については、別途調査レポートを書きました。


戯言(nonsense)に戻る


問い合わせ頁の表示


免責事項

本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。

本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。

商標・登録商標

Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。