(別室)STMマイコン(STM8Sマイコン)で遊ぼう
※このページは個人的な趣味によって書かれており、著者は全ての内容について、いかなる責任も負いません。
このページは、STMicroeleconics社のSTMマイコン(STM8Sマイコン)を使った簡単なプログラムを紹介しています。
●重要なお知らせ(訂正とお詫び)●
1.ADM3202のコンデンサの接続について
●STMマイコンについて
STMマイコンは、
STMicroeleconics社
の提供する高性能で低価格なマイクロコントローラです。
●STM8Sマイコン評価ボード STM8S−Discoveryで遊ぶ
STM8S−Discovery評価ボードは、
STMicroeleconics社
のSTM8S105C6T6を積んだ安価なマイコン評価ボードで、MPUに
●IDE(Integrated Development Environment)
STMicroeleconics社の提供する統合開発環境で、
STMicroeleconics社のHPより無償でダウンロードする事ができます。
●C言語コンパイラー
無償評価版のC言語コンパイラ(Cosmic社、またはRaisonance社)がSTMicroeleconics社のHPより無償でダウンロード
●ライター
安価なST−LINK2等が使用できます。
●マニュアル
この評価ボード用に書かれたマニュアルが、STM8S−DiscoveryのHPより無償でダウンロードできます。
1.基本プログラム編
(1)LEDを点滅させてみる
書き込みテストのため、簡単なプログラムを作ってみました。
STM8S−DiscoveryをUSBケーブルでパソコンにつないだだけで、このサンプルでは何の追加回路もありません プログラムソース サンプル@(STVD/STM8Cosmic C言語) バージョン
プログラムソース サンプルA(STVD/STM8Cosmic C言語) バージョン
プログラムソース サンプルB(STVD/STM8Cosmic C言語) バージョン
(2)クロックを出力してみる
このMPUのクロックは、CCO機能を使う事で、CCO(デフォルトではPE0)ピンへ出力する事ができます。
写真と回路、オシロスコープの出力測定イメージ プログラムソース サンプル@(STVD/STM8Cosmic C言語) バージョン
●実験ボード タイプ1A(STM8S−Discovery)
簡単な実験ボードを作ってみました。
回路図、写真
(1)ルーレットにしてみる
PORTBに8個のLED(赤)をつないで、LEDが回転するようにしてみました。
回路図、写真 プログラムソース サンプル@(STVD/STM8Cosmic C言語) 2MHzバージョン
プログラムソース サンプルA(STVD/STM8Cosmic C言語) 内部OSC:16MHz バージョン
プログラムソース サンプルB(STVD/STM8Cosmic C言語) 外部OSC:16MHz水晶バージョン
プログラムソース サンプルC(STVD/STM8Cosmic C言語) タイマーバージョン
プログラムソース サンプルD(STVD/STM8Cosmic C言語) タイマー割り込みバージョン ただ今、準備中!!
開発で使用したバージョンのインクールードファイル(iostm8s.h) (参考資料)
(2)UARTを使ってみる
UARTでパソコンのハイパーターミナルにつないで、簡単なエコープログラムにしてみました。
回路図、写真、ハイパーターミナルのイメージ
プログラムソース サンプル@(STVD/STM8Cosmic C言語) バージョン
プログラムソース サンプルA(STVD/STM8Cosmic C言語) 外部水晶16MHzバージョン
プログラムソース サンプルB(STVD/STM8Cosmic C言語) 受信割り込みバージョン ただ今、準備中!!
開発で使用したバージョンのインクールードファイル(iostm8s105.h) (参考資料)
(3)A/D コンバータを使ってみる
A/DコンバータとUARTを使って、パソコンのハイパーターミナルに出力する電圧計(0〜3.3V)にしてみました。
回路図、写真、ハイパーターミナルのイメージ
プログラムソース サンプル@(STVD/STM8Cosmic C言語) バージョン
プログラムソース サンプルA(STVD/STM8Cosmic C言語) 外部水晶16MHzバージョン
●STM8S103F3P6で遊ぶ
基板の稼働確認のため、LEDの点滅プログラムを作ってみました。
プログラムソース サンプル@(STVD/STM8Cosmic C言語) バージョン
(1)Arduinoで使ってみる
このマイコンボードは、Arduinoに対応しています。
●STM8S105K4T3Cで遊ぶ
STM8S105K4T3Cは、動作クロック:16MHz、プログラムメモリー:16KBytes、RAM:2KBytes、データEEP:1024Bytes
●実験ボード・タイプ1A(STM8S105K4T3C)
プログラムソース サンプル@(STVD/STM8Cosmic C言語) バージョン
プログラムソース サンプル@(動作確認のためのs19ファイル)
参考にされる場合は、自己責任でお願いします。
内容はPICと関係ありません。
このHPのADM3202を使った回路図では、ADM3202の2ピンにつながっている0.1μFのコンデンサをGndにつないで
実験していますが(図a)、ADM3202のデータシートでは、このコンデンサはVccにつなぐようになっています(図b)。
実験では、このようなつなぎ方でもICのチャージポンプは正常に動作していますが、データシートでは(図b)のように記述され
ているので、データシートの通りに(図b)のようにしたほうがいいと思います。
その低価格ぶりは驚くべきもので、
ARM Cortex−M3評価ボードが、秋月電子では1000円程度で買えたりします。
このページで取り上げているSTMマイコンは、STM8Sマイコンのみではありませんが、ARM系のSTM32プロセッサについては、
「(別室)ARMマイコンで遊ぼう」のページで取り上げています。
秋月電子でのSTMマイコンの取り扱い。 H23.3.8現在
・STM32マイコン評価ボードSTM32VLDISCOVERY ・・・・ 1、100円
(ARM Cortex−M3(STM32F100)、プログラムメモリ:128KB、SRAM:8KB、LQFP−64)
・STM8Lマイコン評価ボードSTM8L−DISCOVERY ・・・・ 1、050円
(8ビットコア(STM8L152C6T6)、プログラムメモリ:32KB、SRAM:1KB、EEPROM:1KB、TQFP−48)
・STM8Sマイコン評価ボード STM8S−Discovery ・・・・ 750円
(8ビットコア(STM8S105C6)、16MHz動作、プログラムメモリ:32KB、SRAM:2KB、EEPROM:1KB、TQFP−48)
・STM8SマイコンSTM8S105K4T3C ・・・・ 200円
(8ビットコア 40MHz動作、プログラムメモリ:16KB、SRAM:2KB、EEPROM:1024B、LQFP−32)
・STM8SマイコンSTM8S105K4B6 ・・・・ 200円
(8ビットコア 40MHz動作、プログラムメモリ:16KB、SRAM:2KB、EEPROM:1024B、SDIP−32)
デバッガや開発ツールまで、開発に必要なものが全て付いて、例えば 秋月電子
では、750円で購入する事が出来ます。
このマイコンボードに乗っているSTM8S105C6T6は、16MHz、プログラムメモリー:32KBytes、RAM:2KBytes、データEEP:
1KBytesを積んでいて、プログラムメモリーは仮に1万回の書き換えをしても、55℃で20年間の保持が可能です。
電源電圧は、2.95V〜5.5Vまで使用可能で、外部クロックの他、16MHzと128KHzのRCオシレータを内蔵しています。
モジュールは、10ビット10チャンネルのA/Dコンバータ、UART、SPI[8Mbit/s],I2C[400Kbit/s]等を内蔵しています。
このMPUのクロックは、ハイスピード外部クロック[HSE]、ハイスピード内部クロック[HSI]、ロースピード内部クロック[LSI]の3種類から
選択できるようになっていて、デフォルトでは、ハイスピード内部クロック(2MHz;16MHz/8[プリスケーラ])になっています。
電池で使う等の消費電力にシビアな用途でないならば、ハイスピード内部クロック(16MHz)か、ハイスピード外部クロック(このボードでは
16MHz水晶)を選択した方がいいと思います(切り替え方法は、下記のルーレットのサンプルプログラムA、Bを参照)。
MPUの供給電源は、ボード上のJP1を切り替える事で、3.3Vでも、5Vでも、好きなほうを選択できます。
この評価ボードは、USBケーブルでパソコン(Windows 2000/XP/Vista)につなぐだけでデモプログラムが動作するようになっていて、
タッチセンサーのデモ(基板の済みにあるプラスチック部分を触ると、LEDの光り方が切り替わる)が動くようになっています。
また、開発ツール(無償)をダウンロードする事で、アセンブラやC言語による開発を行う事ができます。
開発に必要な資料は、
STM8S−Discovery
のHPよりダウンロードする事が出来ます。
この評価ボードは、STMicroeleconics社より豊富にサンプルプログラムが提供されていて、一般的によく使用されると思われるUARTや、
PWM、その他の一般的な機能のサンプルは、プロジェクトフォルダーごと無償でダウンロードできるようになっています。
このMPUには、BEEP機能等の遊べそうな機能も内蔵されていますし、入門者向けに書かれたマニュアルも豊富なので、このマイコンの
入門者にもいいかも知れません。
ST Visual Develop(STVD)、ST Visual Programer(STVP)から構成されています。
STVDは、アセンブラやC言語(C言語コンパイラーのインストールが必要)による開発からオンラインのデバッグまで可能な
なかなか使い勝手の良いツールです。
する事ができます。
このコンパイラーを使用するためには、簡単なユーザー登録が必要になります。
また、無償評価版は、開発できるアプリケーションのサイズが16Kバイトに制限されます。
アセンブラで開発するだけなら、C言語コンパイラーは必要ありません。
上記のIDE/STVDの中から使用する事ができます。
このツールは、例えばAMAZONでは、500円程度で購入できます。
但し、このボードにはST−LINKが内蔵されているので、STM8S−Discoveryを使うだけなら、このライターは必要ありません。
写真1
写真2
但し、日本語はほとんどありません。
STVDの使用例@ ワークスペースとプロジェクトを作成する
STVDの使用例A プログラムを作成し、MPUにプログラムを書き込み、オンラインデバッグする
但し、事前にターゲットボードをパソコンとつないでおく必要があります
評価ボードのイメージ ※STMicroeleconics社のマニュアルより抜粋
STM8S105C6T6 microcontrollerのピン配置 ※STMicroeleconics社のマニュアルより抜粋
割り当てられたファンクションの変更方法 ※STMicroeleconics社のマニュアルより抜粋
上の図「STM8S105C6T6 microcontrollerのピン配置」にある [**] の機能は、オプションバイトを操作して
リマッピングしないと使用できません
評価ボードのコネクタ配置 ※STMicroeleconics社のマニュアルより抜粋
STM8S105C6T6 Module回路図 ※STMicroeleconics社のマニュアルより抜粋
STM8S105C6T6 ST-Link回路図 ※STMicroeleconics社のマニュアルより抜粋
ボードのジャンパーを切り替えることで、STM8S105C6T6に供給する電源電圧を3.3V、及び5Vのどちらかに選択できます。
ボードの「Module」と「ST-Link」を切断して切り離すか、ハンダブリッジで切り離すと、「ST-Link」は「CN7」を介してユーザー
ボードの開発に使うことも出来ます。
※STMicroeleconics社のマニュアルより抜粋
ピンヘッダーへの接続用に、こんなコードを何本か用意しておくと便利です
熱収縮チューブで固めれば強度も充分です
サンプル@は、評価ボードのPD0につながれているLEDが点滅するだけのものです。
例えばSTM8 Cosmicの場合、似たような内容のインクルードファイルが複数存在していて、サンプルによって使用する
インクルードファイルが異なるようですが、このサンプルでは動作を確実にするため、インクルードファイルを使用していません。
サンプルAは、評価ボードのPD0につながれているLEDの点滅で「A〜Z」、「0〜9」のモールス信号を出力するものです。
インクルードファイル「iostm8s.h」は、STM8Cosmicの「Hstm8」フォルダーに存在しているのですが、バージョンの違い等で
このファイルが見つからない場合のために、インクルードファイルを使っていないサンプルBも作成しました。
出力できるクロックは、fHSIDIV、fLSI、fHSE、fCPU、fCPU/2、fCPU/4、fCPU/8、fCPU/16、fCPU/32、fCPU/64、fHSI、fMASTERで、
CCORレジスタのCCOSELに値を設定する事で、選択されます。
クロックのデバッグには最適な機能だと思います。
サンプル@は、fCPUを出力するもので、デフォルトなので、fHSIの2[MHz](16MHz/8[プリスケーラ])が出力されますが、
プログラム中のInit_CCO関数のパラメータを、PI_CCO_fHSIDIV 〜 PI_CCO_fMASTER の何れかに変更する事で、いずれのクロックを
出力する事もできます(CLK_CCORレジスタに値を代入するだけのプログラムですが )。
このマイコンのGPIOポートは、デフォルトがオープンドレインなので、Px−CR1レジスタでプッシュプルに変更してやる必要があります
(詳細は、プログラムソースを参照)。
ポート出力は20mA(トータル100mA)なので、抵抗を通して、LEDは直接つなげます。
このボードは、電圧が3.3Vなので、LEDは赤以外では点灯しません。
(JP1のピン設定を変更して、MPUの電圧を5Vにすれば、赤以外のLEDでも点灯できます。)
このMPUは、デフォルトでは、内部OSC:2MHz(16MHz/8[プリスケーラ])になっています。
サンプルAは、プリスケーラを1にして、クロックを16MHzにしたもので、ルーレットが高速回転します。
サンプルBは、クロックを外部クロック(ボード上の16MHz水晶)にしたもので、ルーレットが高速回転します。
サンプルCは、外部クロック(ボード上の16MHz水晶)と、TIMER1機能を使って、1秒毎にルーレットが動くようにしたものです。
開発ツールのバージョンの違いでコンパイルエラーが発生する場合に参考にしてください。
通常は最新バージョンのインクールードファイルを使用したほうがいいと思います
クロックはいろいろ変えられるのですが、説明を簡単にするため、デフォルトで動くようにしてあります。
このUARTは、UART2(UART1ではない)ので、注意が必要です。
UART2は、STM8Sシリーズ共通の「iostm8s.h」には定義されていないので、STM8S105専用の「iostm8s105.h」をインクルードする
必要があります。
サンプルAは、サンプル@をボード上の16MHz水晶で動かすようにしたものです。
取り上げるほどのサンプルでもありませんが、このボードには16MHzの水晶が搭載されているのに、精度の劣るデフォルト
クロックHSI:2MHzでプログラムを組む事は、少ないように思うので、通常使うプログラムの事例として作ったものです。
ハイパーターミナルの設定
開発ツールのバージョンの違いでコンパイルエラーが発生する場合に参考にしてください。
通常は最新バージョンのインクールードファイルを使用したほうがいいと思います
電源はUSBからST−LINKで供給していますが、この電源電圧(3.3V)を基準にしているので精度は高くありません。
外部から電源を供給する場合は、ST−LINKを外さないと、ボードのレギュレタが壊れてしまうかも知れません。
また、入力は、電源電圧を超えないようにする必要があります。
ARM系のSTM32とは異なり、STM8では、オルタネートファンクションのクロックがデフォルトでイネーブルなので、
A/Dコンバータを使うだけならクロックを意識する必要はないのですが、
GPIOをアナログ入力にする場合は、GPIOのシュミットトリガを、ADC−TDRレジスタでディスエーブルにしておく必要があります。
サンプルAは、上記のUARTのサンプル同様、クロックをボード上の16MHzの水晶に変更したものです。
ハイパーターミナルの設定
「STM8S103F3P6 STM8 最小システム 開発ボードモジュール」は、AMAZONでは300円程度で購入できる、安価なMPUモジュールです。
開発に必要なものは、Windows10パソコンとST−LINK2程度です。
写真
ライターはST−LINK2を使用し、Windows10パソコンで無償のSTVD/STVPを使用しています。
STVPの書き込みでは、STVDから出力される「.S19」ファイルを使用しています。
ボード上のLEDが点滅を繰り返します。
STVPでプログラムを書き込み
というより、このマイコンボードは、Arduino仕様のマイコンボードです。
Arduinoについては、このマイコンボードを取り上げているHPもありますし、特に説明の必要もないと思いますので省略しますが、
初めてマイコンを使う人にも最適だと思います。
基本的に、「Arduino IDE」のみをインストールすればよく、コンパイラ等のインストールは不要です。
言語もわかりやすく、Lチカ程度であれば、マイコンの知識はほとんど必要ありません。
STM8Sマイコンの場合は、ボードの選択のための簡単な操作が必要です(AVR/Arduinoボードのようにボードを選択するだけではない)。
このマイコンボードを、ST−LINKでパソコンとつなぎ、例えばBLINKサンプルを選択して、「スケッチ」から、「マイコンボードに書き込む」を
選択すると、プログラムがマイコンボードに書き込まれ、プログラムが実行されます。
リセットボタンの操作は必要ありません。
書き込み装置は、ST−LINK/V2を選択しておきます。
写真(STM8S103F3P6ボードは裏面)
Arduino IDEのイメージ
Lチカは、これだけのプログラムの記述でできます(Arduino IDEについているサンプル)。
を積んだ8ビットのMPUで、電源電圧は、2.95V〜5.5V、モジュールは、A/Dコンバータ、UART、SPI,I2C等を内蔵しています。
プログラムの書き込みは、専用の書き込み器(ST−LINK)が2000円程度で購入できるのですが、上記の「STM8S−Discovery」
のST−LINK部分(基板の上半分)を使って書き込む事もできます。
このMPUは、例えば秋月電子では、200円 注)H24.10現在 で購入する事ができます。
STM8S105K4T3Cのイメージ
32ピンQFPパッケージなので、秋月電子の「TQFP(LQFP)32ピン(0.8mmピッチ)変換基板」を使用した
STM8S105K4T3Cのピン配置 ※STMicroeleconics社のマニュアルより抜粋
簡単な実験ボードを作ってみました。
NRST端子は、プルアップが必要ですが、
STLINKに接続するSWIM端子も、プルアップしないとSTVPで書き込みできませんでした。
写真
回路図
STVPの書き込みイメージ
稼働確認のために、PORTDにつないだLEDが回転する簡単なサンプルを作ってみました。(サンプル@)
STVPでプログラムを書き込み
STVPでそのまま書き込めます