いまさらSTM8


10年以上前の古いマイコンですが、使う必要があったので、備忘録として残しておきます。

#手順

* ツールのインストール
* STLINKドライバのインストール
* STM8SDiscoveryの入手
* 標準ライブラリの入手
* Lチカ
* サンプルコードを動かしてみる

#ツールのインストール

##STVD(ST Visual Developer)

IDEのSTVDをダウンロードします。無料です。以下のURLからダウンロードします。会員登録が必要です。
https://www.stmcu.jp/design/sw_dev/pc_soft/52941/
<img width="685" alt="STVD_download.png" src="https://qiita-image-store.s3.amazonaws.com/0/263486/35555804-becf-3b79-8352-c95a08c3907f.png">
ダウンロードが終わったらzipファイルを展開し、インストーラーを動かしてインストールします。基本的に手順に従えば問題なくインストールできます。

##COSMIC STM8

CコンパイラのCOSMIC STM8をダウンロードします。無料です。以下のURLからダウンロードします。会員登録が必要です。
http://www.cosmic-software.com/download.php#stm8
<img width="685" alt="cosmic_download.png" src="https://qiita-image-store.s3.amazonaws.com/0/263486/f5eb741c-6a02-a950-2317-4827234968e2.png">
ダウンロードが終わったらexeファイルを実行し、インストールします。進めていくとアクティベーションの手順になります。
ここのチェックを忘れないようにしてください。
<img width="495" alt="cosmic_activation.png" src="https://qiita-image-store.s3.amazonaws.com/0/263486/398686d5-977b-f987-010f-a1bcd4030c0b.png">
アクティベーションで最後に「On the Web」ボタンを押します。
<img width="282" alt="cosmic_activation2.png" src="https://qiita-image-store.s3.amazonaws.com/0/263486/1be2495e-e136-22e5-146f-d1f9b042cdd6.png">
Webページから必要な情報を入力し、登録します。登録したメールアドレスに1年間有効の無料ライセンスファイルが送られてきます。
送られてきた「license.lic」ファイルを以下のフォルダにコピーします。
C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\License
これでCOSMIC STM8 Cコンパイラは有効になります。

##STVDとCOSMIC STM8のリンク

STVDを起動して、メニューのTools→Optionsからダイアログを開きます。
Toolsetのタブを開いて、STM8 Cosmicを選んで、Root pathに
C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8
を設定します。
<img width="392" alt="stvd_cosmic.png" src="https://qiita-image-store.s3.amazonaws.com/0/263486/3bcfaadd-fe35-0b95-dabd-0b5d5de263e2.png">

これでコンパイラとIDEの準備はOKです。

#STLINKドライバのインストール

STLINKドライバをダウンロードします。無料です。以下のURLからダウンロードします。会員登録が必要です。
https://www.stmcu.jp/design/sw_dev/pc_soft/53405/
ダウンロード後zipファイルを展開してstlink_winusb_install.batをダブルクリックします。

さらに
C:\Program Files (x86)\STMicroelectronics\st_toolset\stvd\dao
にある
ST Toolset.msi
を右クリックしインストールします。

#STM8SDiscoveryの入手

色々入手先はあると思いますが、ここではchip1stopを紹介します。
https://www.chip1stop.com/USA/en/view/searchResult/SearchResultTop?zaikoFlg=true&makerCd=STMI&keyword=STM8S-DISCOVERY&cid=STM8S-DISCOVERY

#標準ライブラリの入手

STM8用の標準ライブラリをダウンロードします。無料です。以下のURLからダウンロードします。会員登録が必要です。
https://www.stmcu.jp/design/sw_dev/firmware/52859/
<img width="684" alt="stm8spl_download.png" src="https://qiita-image-store.s3.amazonaws.com/0/263486/6c3ce412-e10c-2370-52f6-c220c4c49ad6.png">
適当なフォルダに展開します。日本語が入っていると、この後コンパイラが動作しないので、英語で空白無しのフォルダがいいと思います。

#Lチカ

標準ライブラリのSTM8S_StdPeriph_Lib\Projectフォルダに移動します。STM8S_StdPeriph_Templateをコピーして「blinky」という名前にします。blinkyは読み取りのみに設定しているファイルを含んでいるので、読み書き出来るようにプロパティを変更します。

STVDを起動して、File→Open Workspaceから、STM8S_StdPeriph_Lib\Project\blinky\STVD\Cosmic\Project.stwを開きます。

STM8S-DiscoveryにのっているSTM8はSTM8S105なので、STVDでSTM8S105を選びます。
<img width="234" alt="stm8s105.png" src="https://qiita-image-store.s3.amazonaws.com/0/263486/bc952f13-8c6d-fa5c-5d61-dbc7e017225e.png">

main.cの中を以下のように書き替えます。

```
/* Private function prototypes -----------------------------------------------*/
static void Delay(uint32_t t);
/* Private functions ---------------------------------------------------------*/

void main(void)
{
	GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST);
  /* Infinite loop */
  while (1)
  {
		GPIO_WriteReverse(GPIOD, GPIO_PIN_0);
		Delay(10000);
  }
  
}

static void Delay(uint32_t t)
{
	__IO uint32_t n = t;
	while (n--) {
		nop();
	}
}
```

メニューのBuild→Buildからコンパイルしてエラーがないことを確認してください。

メニューのDebug InstrumentsからTarget Settingsをクリックしてダイアログを開きます。
<img width="387" alt="debug_inst.png" src="https://qiita-image-store.s3.amazonaws.com/0/263486/59a05f2f-2f9c-2eb7-ce6a-a1f88b0a104d.png">

SWIM_STLINKを以下のように選択してダイアログを閉じます。
<img width="331" alt="swim_stlink.png" src="https://qiita-image-store.s3.amazonaws.com/0/263486/d1e33623-03c5-3b5c-203a-a36f3eaa3e14.png">

STM8S-DiscoveryをPCにUSB接続し、STVDのDebug→Start Debuggingでデバッグを開始してください。

接続したらメニューのDebug→Continueでプログラムを実行します。LD1の緑色のLEDが点滅すれば成功です。

デバッガをDebug→Stop Debuggingで停止して、STVDを終了してください。

#サンプルコードを動かしてみる

STM8S_StdPeriph_Examplesに各種サンプルコードがあるのですが、残念ながらSTM8S-Discovery用はほとんどありません。サンプルコードを参考にして自分で動かしてみてください。