STCmicroのマイコンSTC8Gを使ってみた
中国にSTCmicro(宏晶科技)という半導体メーカがあります。(会社名で検索するとstcmicro.comというアドレスが出てくるのですが、どうもドメイン移行中なのか2022/6/8現在はつながらず、ここでリンクをはってあるサイトが公式(?)ページのようです)
いろんなマイコンのラインナップがあるのですが、個人的に「8-20ピンくらいの小規模なマイコン」に興味があって、具体的にはATtinyやPIC12あたりの代わりになるマイコンを探しています。中国の部品調達サイトLCSCで、このクラスのマイコンを探すと、このSTCmicro以外にも以下のようなものがみつかります。(このような半導体メーカがたくさん出てくるあたり、中国の半導体メーカの奥の深さを感じます。リストをつくっているのですが、きりがない・・・)
いずれも業務用だからか、純正で売り物と思われるコンパイラやIDE(独自コアのものだと純正しか選択肢がない)、通販で買える書き込み機しかない、など、ちょっとホビーユースで手を出すのはちょっと敷居が高そうです。その点、今回使ったSTCmicroのSTC8Gシリーズは、以下のような特徴があって、ホビーユースでも使いやすそうです。
ネットで軽く情報を調べてみると、SDCCコンパイラで使える簡易ライブラリの「FwLib_STC8」というのを公開している人がいたり、使い方をまとめているような人もぽつぽついるようです。
今回、とりあえず評価ボードっぽいものを買って、Lチカまでやってみた過程を記録しておこうと思います。
準備
まずマイコンの入手。TaoBaoで"STC8G"で探すといろいろ出てきますが、今回はシンプルそうなこちらをチョイス。全ピンが2.54mm端子に引き出してあってLチカ用にピン(P5.5)につながっているLEDがのっていて、170円くらいです。載っているマイコンは、STC8G1K08Aで、RAM1k、フラッシュ8k、SOP8ピンです。
続いてコンパイラ。8051コアは古くからあって派生品もめちゃくちゃ多いので、コンパイラもいろいろあります。今回はSDCCを使います。以前、CH552が載ったKsylitoliというボードを使ったことがあって、そのときにそのページの手順でSDCCをインストール済みだったので、そのまま使います(このページの手順はMac/Linux用ですが、WindowsでもSDCCで検索すれば見つかってインストールできます)
あわせて簡易ライブラリの「FwLib_STC8」もダウンロードしておきます。
続いて書き込みソフトは、STCmicroのWebサイトから、「STC-ISP软件V6.89E版」(バージョン番号は2022/6/8現在)をダウンロードします。残念ながらWindows用しかないようです。これを展開し、中にの"stc-isp-vx.xxx.exe"(x.xxxの部分はバージョン番号)をダブルクリックして起動すると、こんな感じのアプリ(STC-ISP)が立ち上がります。
プログラムのビルド
さきほどのKsylitoliのサンプルプログラムにあるincludeフォルダに、ダウンロードしたFwLib_STC8の中にある以下の2つのファイルを入れておきます(レジスタの定義ファイル)。
・fw_reg_stc8g.h
・fw_reg_base.h
またメインのLチカプログラムは、こちらをblink.cとして保存しておきます。
#include <stdint.h>
#include "fw_reg_stc8g.h"
void delay()
{
uint32_t t, t1;
for (t1 = 0; t1 < 100; t1++)
for (t = 0; t < 10000; t++);
}
void main()
{
P5M0 = BM_LED; P5M1 = 0; // {M1,M0}=(0,1) : push-pull output
P5 = 0;
while(1) {
P5 = 0xff;
delay();
P5 = 0x00;
delay();
}
}
delay()の書き方が雑ですが、まあとりあえず。
またMakefileのC_FLAGSのところを、STC8G1K08用に以下にあわせておきます。
#.STC8G1K08 xRAM size 1kB=0x400, Flash=8kB(0x2000)
C_FLAGS := -V -mmcs51 --model-small --xram-size 0x400 --xram-loc 0x0000 --code-size 0x2000 -o $(BUILD_DIR)
その後、makeすれば、build/ディレクトリ内に、blink.binができます。(もちろんMakefileに書いてある内容で手動でコンパイルしてもOK)
接続
まず電源以外をつなぎます。一般的なシリアルのクロス結線ですね。ただしデータシートには、USBシリアル変換とマイコンの電源を同時にONできない場合は、ダイオードを抵抗をはさむように書かれています。(今回はとりあえずのテストということで省略しています、オススメできる方法ではないですが・・・)
・USBシリアル変換のTXD----P3.0(RxD)
・USBシリアル変換のRXD----P3.1(TxD)
・USBシリアル変換のGND----GND
次に、書き込みアプリSTC-ISPで、以下の2箇所を設定します。
・左上の"MCU Type"で、書き込み対象のマイコンを選ぶ(今回はSTC8G1K08A-8p)
・"Open Code File"で、ビルドした"blink.bin"を選択
その後、以下の操作を順に行います。
(1) STC-ISPで、"Program/Download"ボタンを押す
(2) ボードに電源(+5V)を供給
つまりダウンロード開始→マイコンを起動、の順序です(リセットをかけてもよさそうなのですが、8pのSTC8Gにはリセットピンがないなですよね・・・)。ちょっと荒っぽい気もしますが、データシートにそう書いてあるんですよね。
https://twitter.com/akita11/status/1534377490449580032
数秒で書き込みが完了し、Lチカするはずです。
STC8Gマイコンは、まだ日本での使用例はほとんどないようですが、8051コアで使いやすく、ちょっとした制御には十分です。また今回はまだ使っていませんが、周辺I/Oも結構リッチで、なにより安価(STC8G1G08は50円くらい)です。半導体不足がまだ続きそうなので、普段使っているATtiny/PIC12クラスのマイコンの入手に苦労されている方は、その代わりに使ってみるのはいかがでしょう。
この記事が気に入ったらサポートをしてみませんか?