STM8Lを使ってみる2 -いきなり終わった-
前回のあらすじ
STM32C0の登場によりSTM8Lはお役御免のNRNDとなってしまいました。
めでたしめでたし。
…
で終わったらマサカリ投げられそうなのでもう少し使ってるところを提示
して荼毘に付そうと思います…!
8pinのSTM8L050J3M3を使用します。
●ビルド環境を整える
STM8Lはかつては有償の使いづらいツールしかなかったのですが、
現在ではSDCCというGCCライクな無償のツールチェインがあります。
一方STM8LもStandardPeripheralLibrary(SPL)があるのですが、これは
SDCCに対応しておりません。しかしながら有志の方がSDCCに対応したSPL
を提供してくれております。これを利用しましょう。
また、SDCC向けのmakefileも公開しておりますのでありがたく利用させて
もらいます。基本的にSTM32でやっていたビルド環境構築と同じように
拵えていきます。
ねむいさんの作例はUARTで"unk!"を送出しながらLEDをトグルします。
基本中の基本ですね。ちなみにAVRと違ってPROGMEMとかしないでもconstが
ちゃんと機能したりしますが今となってはどうでもいいですね。
なお、読み書きデバッグで使用するSWIMピンはInput/Outputを設定する
ことができますが特にOutputに設定してしまうとBrickedしてしまうので
厳重に注意してください!!!
AN5065は穴のあくほど目を通しておきましょう。ねむいさんはSetSystem()
関数内でフェールセーフを実現しています。またBricked対策のほかに
未使用ピンは入力プルアップしておきましょう。
↓実際のSetSystem関数です。
/**************************************************************************/
/*!
@brief Configures Main system clocks & power.
@param None.
@retval None.
*/
/**************************************************************************/
void Set_System(void)
{
/* STARTUP SWIM DELAY AT FIRST(MUST NEED avoid bricking) */
for(int d = 0; d < 3000; d++) {
for(int i=0;i<100; i++){nop();}
}
/* not connected pins as output low state (the best EMC immunity)
(PA1, PB0, PB1, PB2, PB4)*/
GPIOA->DDR |= GPIO_Pin_1;
GPIOB->DDR |= GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_4;
/* configure all STM8L050 pins as input with pull up */
GPIO_Init(GPIOC, GPIO_Pin_6, GPIO_Mode_In_PU_No_IT); // pin 1
GPIO_Init(GPIOA, GPIO_Pin_3, GPIO_Mode_In_PU_No_IT); // pin 2
GPIO_Init(GPIOD, GPIO_Pin_0, GPIO_Mode_In_PU_No_IT); // pin 5
GPIO_Init(GPIOB, GPIO_Pin_6, GPIO_Mode_In_PU_No_IT); // pin 6
GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_In_PU_No_IT); // pin 7
GPIO_Init(GPIOC, GPIO_Pin_5, GPIO_Mode_In_PU_No_IT); // pin 8
/* Set the frequency to 16 MHz */
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
/* Set delay timer */
SysTickInit();
/* Configure the LED */
LED_Configuration();
}
また、UARTの送信は送信割り込みを使用しておりますがSDCCの制約でなぜか
main関数に割り込みハンドラのプロトタイプ宣言をしないと割り込みが
機能しません。
これについてはuart_support.hにプロトタイプ宣言を放り込んでincludeして
やれば解決です。
無事ビルドできました。OpenOCDはSTM8シリーズの書き込みに対応している
のでSTM32感覚で書き込みが可能です。
↓書き込みのログです。
> "C:¥Devz¥Coreutils¥bin¥make.exe" program
openocd -s C:/Devz/ARM/OCD/tcl -f interface/stlink-dap.cfg -c "transport select swim" -f target/stm8l05x_swim_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.12.0+dev-00352-g1bc4182ce (2023-10-08-09:55)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
swim
Warn : Transport "swim" was already selected
Info : STLINK V2J43S7 (API v2) VID:PID 0483:3748
Info : Target voltage: 2.874897
Info : clock speed 800 kHz
Info : starting gdb server for stm8l.cpu on 3333
Info : Listening on port 3333 for gdb connections
target halted due to debug-request, pc: 0x00006000
Info : downloaded 4253 bytes in 1.148543s (3.616 KiB/s)
Info : verified 4253 bytes in 0.172508s (24.076 KiB/s)
shutdown command invoked
> Process Exit Code: 0
> Time Taken: 00:02
LEDが点滅し、一応動いてます…
●デバッグはどうするのか?
もちろんOpenOCDとGDBを組み合わせてデバッグが可能です。
必要なものは以下の3点です。
・OpenOCD
・binutils(stm8-gdb)
・CodeLite
OpenOCDはもう説明する必要もない定番でしょう〜。
binutilsは幸運にもPlatformI/OのサイトにWindows向けのビルド済み
binutilsバイナリが公開されているのでこれを利用します。
CodeLiteは統合開発環境ですが今回はGDBのGUIとして利用します。
まだ整備中ですがねむいさんのARMマイコンデバッグ手順を参考に
makefileに記述されたディレクトリと各ツールのディレクトリを
一致させておいてください。
ねむいさんの作例は基本的に下記のディレクトリ構成としております。
・OpenOCD
C:/Devz/ARM/ocd
・binutils(GDB)
C:/Devz/sdcc/tool-stm8binutils/bin
・CodeLite
C:/Devz/ARM/CodeLite
まず初めにmakefileの"DEBUG_MOD = 1"の設定した状態でビルド・書き込み
を行ってください。
MAKE DEBUGでCodeLiteとOpenOCDを同時に呼び出します。
GDBの設定はsettings->debuggerのタブで設定します。
まずはGDBの実行形式ファイルとGDBの基本設定を行います。
次のタブ(Startup Commands)で"set output-radix 16"を設定しておきます。
これはレジスタを16進数で参照するために必要なものです。
最後のタブはお決まりのリセット->main関数の先頭で停止コマンドを
設定しておきましょう。これで準備完了です。
メイン画面に戻ってDebugger->Start/Continue Debuggerでデバッグ開始です。
無事main関数の最初の行で止まりました。
ちゃんとレジスタも16進数で参照できてますね。
ステップ実行も自由自在です☆
ちなみにデバッグを終わらせる際はtaskkilでOpenOCDとCodeLiteを
強制終了させて終わります。強引ですがこれが一番確実です。
と、
こんな感じでフリーなツールでSTM8Lの開発ができちゃいます…
…
が、
冒頭で言ったようにSTM8シリーズはSTM32L1と同じくNRND、もう新規採用は
不適となっております。
しかしながらこれも時代の流れ、後進のSTM32C0の活躍を見守りましょう〜
というわけで今回使用したねむいさんのSTM8Lプロジェクトをここに
おいておきます。今更STM8を使ってみたいという奇特な方だけどうぞ…!
STM8Lはぢめました(まだはぢまってすらいない)
●STマイクロの8bitマイコンSTM8L
少し前に偽ATXMEGA128A1Uを掴まされた店から物のついでと同時に8Pinと
64PinのSTM8Lシリーズマイコンを購入しておりました。
かつてはVersaloonへの改造のため燃えないゴミと称してSTM8の部分は即廃棄
していましたが、2022年の現在はまともな開発環境とかそろってそうだったので
手を出してみた次第でございます・・・しかし…
●STM8ライタ復活への道
しかし!ねむいさんはVersaloonへの改造のためにSTM8-discoveryのSTLinkの
部分をつぶしてしまっておりました!!!STM8に書き込みデバッグするために
SWIMプロトコルを持つSTLink系デバッガハードが必要です!
さすが私!やらかした!だめだこりゃ!
でも私はSTM32系のDiscovery持ってるじゃないか、あれのSTLinkの部分使えば
SWIMを引き出せられるんじゃないかと思い出し手持ちのDiscovery基板やNucleo
基板を引っ張り出して調べてみました。
改造できる条件として、STLinkのファームがSTM8用のSWIMプロトコルが実際に
使用できること、そして基板上にパタンが出て改造しやすいことです。
NUCLEO系や最近のDiscvoeryではSTLink/V2-1のファームが動いており、
それらはファームからも回路もオミットされているためこの時点でアウチです。
選んだのはSTM32F0Discoveryです(SWIM引き出し改造済み後の撮影ですが)。
こいつはSWIM用の外部端子や構成回路こそはありませんが有り難いことに
SWIM向けに内部パタンは接続されており、最小限の配線をしてやればSWIMを
復活できるはず…!
そして根性の配線…ッ!
STM8S-DiscoveryのSWIM回路の真似して受動部品も装着です。
OpenOCDはすでにSTM8へのフラッシュ書き込みやデバッグ機能を持っているため、
ねむいさんの環境においてもたやすくできるはずです!
いざ勝負!
…
(注:STM32G0のプロジェクトになってますがmakefileをいじり、OpenOCDから
STM8Lに書き込むようにしています。)
まぁ簡単にできるわけないよね。STM32F0DiscoveryのSTLink/V2のファームは
STM32のSWDに特化していてSWIMがファーム的に機能していませんorz
"STLINK V2J39S0"ってなっていますが"V2J39S0"の部分、J39がSWJのv39でS0は
SWIM機能ありませんって意味と解釈してください。
これ普通にSTLinkのアップデータでファームをあげてもJ39の部分が上がるだけ
なのでどう頑張ってもSWIMできません…
しかし…おそロシアの力を借りるとあら不思議(意味深)
STM8にも対応したデバッガーファームウエアが書き込まれてしまったでは
ありませんか!!しかもこの状態で最新ファームにもアップデート可能です!
おおっ!書き込み出来た!素晴らしい!V2J39S7となってSWIMが可能です!
もちろん従来のSTM32F0も書き込み可能!
流石モラルを真っ先に投擲機で投げ放つロシア!!おまえらのそういうとこだぞ!!
でもありがとう!!!!!
というわけで十数年前投げ捨ててしまったSTM8の書き込み機能を取り戻すため
かなりの労力を使ってしまったので肝心のSTM8ビルド環境については次回に
解説させていただきます…
20231009追:
し か し ・・・
-
免責・連絡先は↑のリンクを
↓SNSもやってます↓
powered by まめわざ- ARM/STM32 (117)
- OpenOCD (27)
- ARM/NxP (34)
- ARM/Cypress (5)
- ARM/Others (3)
- ARM/Raspi (1)
- AVR (13)
- FPGA (4)
- GPS/GNSS (19)
- MISC (80)
- STM8 (2)
- Wirelessなアレ (16)
- おきぱ (1)
- ブラウザベンチマーク (28)
- 日本の自然歩道 (25)
- STM32U0はぢめました
⇒ ねむい (08/07) - STM32U0はぢめました
⇒ ひかわ (07/28) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ ねむい (05/17) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ どじょりん (05/16) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ どじょりん (05/16) - いろいろ試す61(と今年の反省会)
⇒ ねむい (01/02) - いろいろ試す61(と今年の反省会)
⇒ ひかわ (01/02) - いろいろ試す61(と今年の反省会)
⇒ ひかわ (01/01) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ ねむい (12/31) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ ひかわ (12/31)
- September 2024 (1)
- August 2024 (1)
- July 2024 (1)
- June 2024 (1)
- May 2024 (1)
- April 2024 (1)
- March 2024 (1)
- February 2024 (2)
- January 2024 (1)
- December 2023 (4)
- November 2023 (2)
- October 2023 (2)
- September 2023 (1)
- August 2023 (2)
- July 2023 (1)
- June 2023 (2)
- May 2023 (3)
- April 2023 (1)
- March 2023 (1)
- February 2023 (1)
- January 2023 (1)
- December 2022 (2)
- November 2022 (1)
- October 2022 (1)
- September 2022 (1)
- August 2022 (1)
- July 2022 (1)
- June 2022 (1)
- May 2022 (1)
- April 2022 (1)
- March 2022 (1)
- February 2022 (1)
- January 2022 (1)
- December 2021 (2)
- November 2021 (2)
- October 2021 (1)
- September 2021 (1)
- August 2021 (1)
- July 2021 (1)
- June 2021 (1)
- May 2021 (1)
- April 2021 (1)
- March 2021 (1)
- February 2021 (1)
- January 2021 (1)
- December 2020 (3)
- November 2020 (1)
- October 2020 (1)
- September 2020 (1)
- August 2020 (1)
- July 2020 (1)
- June 2020 (2)
- May 2020 (1)
- April 2020 (1)
- March 2020 (1)
- February 2020 (1)
- January 2020 (1)
- December 2019 (3)
- November 2019 (1)
- October 2019 (1)
- September 2019 (2)
- August 2019 (1)
- July 2019 (1)
- June 2019 (1)
- May 2019 (1)
- April 2019 (1)
- March 2019 (1)
- February 2019 (1)
- January 2019 (1)
- December 2018 (3)
- November 2018 (2)
- October 2018 (1)
- September 2018 (1)
- August 2018 (1)
- July 2018 (1)
- June 2018 (1)
- May 2018 (1)
- April 2018 (2)
- March 2018 (1)
- February 2018 (1)
- January 2018 (1)
- December 2017 (2)
- November 2017 (2)
- October 2017 (1)
- September 2017 (1)
- August 2017 (1)
- July 2017 (1)
- June 2017 (1)
- May 2017 (1)
- April 2017 (1)
- March 2017 (2)
- February 2017 (2)
- January 2017 (2)
- December 2016 (7)
- November 2016 (2)
- October 2016 (2)
- September 2016 (1)
- August 2016 (1)
- July 2016 (1)
- June 2016 (1)
- May 2016 (2)
- April 2016 (1)
- March 2016 (2)
- February 2016 (1)
- January 2016 (1)
- December 2015 (3)
- November 2015 (1)
- October 2015 (3)
- September 2015 (2)
- August 2015 (2)
- July 2015 (3)
- June 2015 (3)
- May 2015 (4)
- April 2015 (2)
- March 2015 (4)
- February 2015 (1)
- January 2015 (3)
- December 2014 (3)
- November 2014 (2)
- October 2014 (1)
- September 2014 (2)
- August 2014 (2)
- July 2014 (3)
- June 2014 (2)
- May 2014 (1)
- April 2014 (1)
- March 2014 (4)
- February 2014 (4)
- January 2014 (3)
- December 2013 (5)
- November 2013 (4)
- October 2013 (3)
- September 2013 (2)
- August 2013 (2)
- July 2013 (2)
- June 2013 (3)
- May 2013 (2)
- April 2013 (2)
- March 2013 (2)
- February 2013 (2)
- January 2013 (3)
- December 2012 (4)
- November 2012 (2)
- October 2012 (2)
- September 2012 (4)
- August 2012 (1)
- July 2012 (3)
- June 2012 (2)
- May 2012 (3)
- April 2012 (3)
- March 2012 (2)
- February 2012 (3)
- January 2012 (3)
- December 2011 (5)
- November 2011 (3)
- October 2011 (2)
- September 2011 (2)
- August 2011 (2)
- July 2011 (2)
- June 2011 (2)
- May 2011 (2)
- April 2011 (2)
- March 2011 (2)
- February 2011 (2)
- January 2011 (3)
- December 2010 (7)
- November 2010 (1)
- October 2010 (1)
- September 2010 (1)
- August 2010 (3)
- July 2010 (4)
- May 2010 (1)
- April 2010 (2)
- March 2010 (2)
- February 2010 (2)
- January 2010 (3)
- December 2009 (3)
- November 2009 (8)
- October 2009 (7)
- September 2009 (5)
- August 2009 (4)
- July 2009 (6)
- June 2009 (7)
- May 2009 (14)
- January 1970 (1)
Copyright(C) B-Blog project All rights reserved.