STM8Sディスカバリーで遊ぶ [STM8S]
STM8Sディスカバリー の ST-LINK 部分には STM32F103C8 が使われていて、
これを使って遊ぶのが流行っているようです。
Maiple_mini_bootloader というのがあって 試しに書いてみて、
今回、2種類の接続法が試せましたのでまとめてみました。
1 Flash Loader Demonstrator からのプロテクト解除と書き込み
BOOT1をGNDに繋ぎ、UARTを使って 書き込む方法、UARTのTXは出力なので相手のRX入力に クロス接続します。
2 ST-LINK Utility からの読み書き(プロテクト解除していないとアクセスできません)
JTAG端子には 4pinは STM_JTCK 5pinは STM_JTMS 8pinは STM_JRST に成っていて、SWD_STLINK の接続 1pinは10k_GND 2pinはT JTCK 3pinは GND 4pinは T JTMS
SWDの 1pinは普通使わないので 19pinのT JRST に繋ぎ リセットスタートに使うつもりだったんですが、間違えて18pin のT_NRSTに繋いでしまいました、しかしこれでも動作して書き込めます。
pinを使わないなら T JRSTはSB11 から取ることが出来ます。
本来のリセットなら 7pinのNRST入れると良いはずなんですが、JTAG用端子を使ったのでこれでも動くんでしょうか? NRST入力はC11の所にあります。
完成して、USBから何かの動作をさせる場合は
STM8SのSTM32F103C8でないと なぜか USB VID PID が0になってしまい 不明なデバイスとしか認識されません。
ここのところを調査中ですが、まだ探しきれていません。
追記 書き忘れていましたが、信号ラインはアクセスする側だけ有れば良く、
後は電源3.3vとGNDが繋がっていればよいのですが、繋がっていなくともUSBハブなどが同じであれば、USBを差すことによってターゲット側と繋がっるので省くことも出来ます。
STM8S-DISCOVERY の シリアルブート [STM8S]
STM8S-DISCOVERY に載っています ST32F103C8 の シリアルブート を試してみました。
STM8S_D ST-LINLK部分と と USB-USART を使います 。
ブートには BOOT0 と BOOT1の状態で ブートモードが変わりますが、BOOT0 44pin
は普通100kでGNDに接続されています、ここに3.3vをかけてやると、
RAM -512 bytes starting from address 0x2000 0000 are used by the otloader firmware
System memory - Kbytes starting from address 0x1FFF F000, contain the
bootloader firmware にロードされるようです(AN2606に有ります)
このモードでSTM8S_DをPCに繋いでもST-LINKは認識しませんが、問題はありません。
Flash loader demonstrator を起動しますと認識して下のような画像が出ます。
外部のUSB-USART コンバータはPL2302HX-Aを使いました。
WIN-XPが認識しないので 「PL2303_Prolific_DriverInstaller_v1_7_0」を探してインストールできました。
USAER1_RX 31pin 入力 に外部の TX を繋ぎ
(この端子は途中でフロート状態にならないように 10k で 3.3V か GNDに繋いでおきます)
USART1_TX 32pin 出力 に外部の RX を繋ぎます。
どちらかを判別するのが面倒なので 両方とも 10Kで3.3V にプルアップしました。
UEWを繋ぐのが難しいので 31pin 32pin に近くて、裏に何も通っていないGNDパターンに 0.8φの穴を空け、軽く面取りをして裏から先を半田揚げした線をちょうどの所まで差し込み、竹爪楊枝で押さえて半田付けをしました。
確実についているのを確認してから、瞬間接着剤を流して、ICの足ごと固定しました、瞬間接着剤は後からアセトンで溶かすことが出来ます。
ここでプロテクションを解除しますと もうST-LINKではなくなってしまいます。
42pin 43pin は後で使うようで足揚げしたりしますが、SWIMの所やSTM32F103C8の裏にもパターンがあるので、特には上げなくても使えます。(パターン図をご覧ください)
STM8S105C6 LQFP 48-pin のピン配列 [STM8S]
STM8S105C6 LQFP 48-pin のピン配列 と オプションビットを調べてみました。
STM8S105C6
LQFP 48-pin の場合ですと
1 NRST
2 OSCIN/PA1
3 OSCOUT/PA2
4 VSSIO_1
5 VSS
6 VCAP
7 VDD
8 VDDIO_1
9 [TIM3_CH1] TIM2_CH3/PA3
10 (HS) PA4
11 (HS) PA5
12 (HS) PA6
13 VDDA
14 VSSA
15 AIN7/PB7
16 AIN6/PB6
17 [I2C_SDA] AIN5/PB5
18 [I2C_SCL] AIN4/PB4
19 [TIM1_ETR/AIN3/PB3
20 [TIM1_CH3N] AIN2/PB2
21 [TIM1_CH2N] AIN1/PB1
22 [TIM1_CH1N] AIN0/PB0
23 AIN8/PE7
24 AIN9/PE6
25 PE5/SPI_NSS
26 PC1 (HS)/TIM1_CH1/UART2_CK
27 PC2 (HS)/TIM1_CH2
28 PC3 (HS)/TIM1_CH3
29 PC4 (HS)/TIM1_CH4
30 PC5 (HS)/SPI_SCK
31 VSSIO_2
32 VDDIO_2
33 PC6 (HS)/SPI_MOSI
34 PC7 (HS)/SPI_MISO
35 PG0
36 PG1
37 PE3/TIM1_BKIN
38 PE2 (T)/I2C_SDA
39 PE1 (T)/I2C_SCL
40 PE0 (HS)/CLK_CCO
41 PD0 (HS)/TIM3_CH2 [TIM1_BKIN] [CLK_CCO]
42 PD1 (HS)/SWIM
43 PD2 (HS)/TIM3_CH1 [TIM2_CH3]
44 PD3 (HS)/TIM2_CH2 [ADC_ETR]
45 PD4 (HS)/TIM2_CH1 [BEEP]
46 PD5/UART2_TX
47 PD6/UART2_RX
48 PD7/TLI [TIM1_CH4]
GPIOかスペシャルファンクションかを選び
さらにスペシャルファンクションの選択をします
オプションバイト設定
STM8ディスカバリーのライブラリー [STM8S]
この中にADCに関するのがありました。
\um0834\stm8s-discovery_dev\Project\ADC
この中の
D:\_users\_stm8\um0834\stm8s-discovery_dev\Project\ADC\STVD\Raisonance\ADC.stw
を起動しますと、10kのボリュームで電圧を設定して4個のLEDを順次点灯するプロジェクトがあり、
ノートパソコンでビルドして書き込み、試してみました。
パスやライブラリーの組み方には色んな流儀があるようです。
このソフトにはバグがありVRを早く回すとLEDの順番がデタラメになりました。
コネクタを6Pに変更今した。
順番は+5,+3.3,+Vdd-Sense, ST_LINK_SWIM,GND,RESET# にしました。
ターゲット基板上で5vか3.3vを切り換え STM8S-DISCOVERY ST-LINK に送ります。
STM8S discovery ST-Link モジュールの再利用 [STM8S]
みなさん STM8S discoveryのST-Link モジュールを切り離して進化させておられますが、
拙は他のSTM8S基板に書き込めるように工夫をしています。
本来は ST-Link モジュールから5v,3.3vを送って STM8S基板の方で切り換えジャンパがあり 使う電圧をST-Link モジュールに送り返しています。
これを ST-Link モジュールの方にジャンパを付けて選択し ターゲットSTM8S基板の方のジャンパは使っていません。
追記 ST^LINK基板の方も STM32F103C8 の書き換えをやってみました。
STM8S_D ST-LINK は SWIM で、41pinが T NRST IN-SB1 43pinが T SWIMIN-SB2 で STM8S_D と繋がっています。
CN5は 5-34 STM-JTMS 4-37 STM-JTCK 6-38 STM-JTDI 3-39 STM-JTDO 8-40 STM-JRST 1-3.3v 7-GND に成っています。
一方 STM32_D は SWD で、 15pinが T JTCK-TCK/SWCK 27pinが T JTMS-TMS/S WDIO で ほかには 17pin TNRST か 18pin TRST を引き出し 右20pin 所でシュリンクチューブを被せてSTM32_D の 右27pin-NCに中継接続します 左2pin-NC 3pin-3.3v
STM8S_D CN5からSTM32_D SWD CN2 1-3.3v 2-NC 3-NC 4-15pin-2-T JTCK 5-27pin-4-T JTMS 6-NC 7-GND 8-17pin--右27pin-T NRST に接続します。
STM32_DのSWDコネクタは1pinを空けるようにずらし最後の所にpinを差し込んで3.3vの中継に使います。
STM8S_Dの R14 とその左のパターンを線で結びます、MPU回りに3.3vが供給されるように成ります、
ST TOOL の パス設定 [STM8S]
ST TOOLのパス設定で表面的には出来たように見えていても、実際には以前の場所を指していることもあるようです。(何らかの英語の注意が出るので間違っているのは判っても対処できません)
特に同じ名前のプロジェクトの場合には顕著になります。
プロジェクトホルダの名前は簡単に変更できたんですが 、
プロジェクト名(どれがどを様に言い表すのか判らないまま書いています)は
プロジェクトホルダの中から以前の名前を検索置換してやれば、換えることが出来ました。
そのほか翻訳の関係で「MS-UIG」 をよく使っていましたが、フォントの関連か「LF」と「CR+LF」の区別があるのを知りました、(実際にはどの様な影響があるのか判りません)
戴いたソースは 「stm8s.h」が「stm8s_conf.h」を呼んでいて それが見つからないと出ます。
「stm8s_conf.h」にはデバイスごとの
#if defined (STM8S208) || defined (STM8AF52Ax)
#include "stm8s_can.h"
#endif /* STM8S208 || STM8AF52Ax */
の様な記述があるので同じように "stm8s_can.c" などを除外する方法などはあるのでしょうか?
指定の *.c を削除した、ライブラリで ホルダ名やプロジェクト名を換えた場合には、
他のドライブやパスでもビルドすることが出来ました。
現時点で判っていないのは .o や ,lst 入るが出来てしまうことです、
何らかのスイッチで抑制できるかとなんどかためしましたが、 まだ出来ていません。
そのほか、途中経過 「stm8s_conf.h」 を加えた時点で URAT2_IT_RXNE が定義されていないと出ました。
これは受信が無いときだったかの割り込みなので 定義されていないはずはなく調べても判りませんでした。
全体を見ながら少しずつつじつまを合わせて行くと、何とかノーエラにたどり着きました。
このあと、3chの ADCを出来るだけ早く回しながら、他のジョブを増やして行く野にも挑戦します。
ほかにも途中の試験のため LCDなどを付けるか通信で(テラタームなど) データも読み込みたいと思っています。
現在やっていますのは、基板と エバリューションボードの連結 書き込みが必要で この段階の試行錯誤です。
遅ればせながら「STM8S discovery」 [STM8S]
余り評判が良くもなく、仕舞っていましたが、
ツール類やデータシートをダウンロードして読んでみますと
8ビットにしては良くできている。
タイマーも4本有り、16bit側で3ch使える。
デモアプリやマニュアル類が少し貧弱なので
人気が出なかったのかもしれません。
(詳細はCD00190271.pdfを見ないと・・2KHzか・・ダサイとなってしまう?)
Clock tree を見ると多岐に渡る選択がある、
しかしペリフェラルは1まとめになっている。
Device STM8S105C6
Pin count 48
Maximum number 38
of GPIOs
Ext. Interrupt pins 35
Timer CAPCOM 9
channels
Timer 3
complementary
outputs
A/D Converter 10
channels
High sink I/Os 16
Medium density 32K
Flash Program
memory (bytes)
Data EEPROM 1024
(bytes)
RAM (bytes) 2K