STCmicroのマイコンSTC8Gを使ってみた

中国にSTCmicro(宏晶科技)という半導体メーカがあります。(会社名で検索するとstcmicro.comというアドレスが出てくるのですが、どうもドメイン移行中なのか2022/6/8現在はつながらず、ここでリンクをはってあるサイトが公式(?)ページのようです)
いろんなマイコンのラインナップがあるのですが、個人的に「8-20ピンくらいの小規模なマイコン」に興味があって、具体的にはATtinyやPIC12あたりの代わりになるマイコンを探しています。中国の部品調達サイトLCSCで、このクラスのマイコンを探すと、このSTCmicro以外にも以下のようなものがみつかります。(このような半導体メーカがたくさん出てくるあたり、中国の半導体メーカの奥の深さを感じます。リストをつくっているのですが、きりがない・・・)

・Fuman XMC8P53S6(独自コア)
・Sonix SN8P(専用IDE、専用書き込み機(TaoBaoでは売っていない))
・Fermont FT60F210(コンパイラは代理店に問い合わせ。書き込み機は不明)
・SinOne SC92F7490(8051コア、量産用書き込み機と純正IDEあり)
・Holtek HT46R(コンパイラ・書き込み機は純正のもの)
・PADAUK PMS150C(書き込み機:PDK3S-P-002)
・ABOV MC94F(書き込み機: E-PGM+(Taobaoあり、2万円近い))

いずれも業務用だからか、純正で売り物と思われるコンパイラやIDE(独自コアのものだと純正しか選択肢がない)、通販で買える書き込み機しかない、など、ちょっとホビーユースで手を出すのはちょっと敷居が高そうです。その点、今回使ったSTCmicroのSTC8Gシリーズは、以下のような特徴があって、ホビーユースでも使いやすそうです。

・コアは有名な8051(CH552も同じ)→SDCCのようなオープンソースなコンパイラが使える
・USB-シリアル変換機があれば書き込みができる。純正ライタ(U8W/U8W-Mini)も1000円くらいでTaobaoで売っている。(USB直結の書き込みもできる。ただしSTC8G1K08はソフトウエアUSBなので安定動作はあやしい)
・パッケージは8p(SOP/DFN)、16/20p(TSSOP/QFN/SOP)で小型・はんだ付けもしやすい
・フラッシュは8-17k、RAMは1Kくらい、電源は1.9-5.5V
・周辺I/Oは充実(UARTx2, SPI, I2C, Timer=3, PWM=3, 10bitADC, CMP, BOD, WDT, IntOSC(0.3%))

ネットで軽く情報を調べてみると、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クラスのマイコンの入手に苦労されている方は、その代わりに使ってみるのはいかがでしょう。

この記事が気に入ったらサポートをしてみませんか?