1kワードのTINYBASIC STM32L010F4
1kワードのTINYBASIC STM32版(STM32G030J6M6)をSTM32L010F4P6に移植しました。
移植の過程でいくつか考慮すべき点がありましたので、本ページに記載します。
①STM32G0とSTM32L0ではベクターの記述が異なる。
両者のベクター領域は(FLASHの場合)ともに0x08000000~0x080000BFなのですが、搭載している
ペリフェラルが異なるためベクターの記述をSTM32G0から変更する必要があります。
②同じ機能のレジスタでも両者のマニュアル上で名称が異なる。
特にRCC関連のレジスタで名称が異なるものがいくつか存在します。
③STM32G0とSTM32L0ではリセット時のクロックが異なる。
STM32L0はArm® Cortex®-M0+ベースの超低消費電力32bitマイコンで、起動時に低電力モードに設定され、
起動時のクロック周波数が低く設定されています。STM32G0と同じ周波数16MHzで動作させるためにクロック
の変更が必要となります。
マニュアルを読んだ限りでは、クロックの設定を変更するためにSTOPモード移行後の割り込みが必要とも受けとれる
記述があり難儀しましたが、実際は以下のページに記載の方法で16MHzのクロックに切り替えることができました。
http://stefanfrings.de/stm32/stm32l0.html
④BOOT0ピンの扱い
STM32G0ではSTM32CubeProgrammerを使用してBOOT0ピンの設定により、シリアル経由のプログラム書き込みが
行えましたが、STM32L010F4の場合シリアル通信が成立せず、書き込みに困難を生じます。(以下のページ参照)
https://qiita.com/caa45040/items/a2e6ceee37f21f84fe27
今回はBOOT0ピンを使用せず、CMCIS-DAPのライター(トラ技ライター)を使用してプログラム書き込みを行いました。
<STM32L010F4P6のクロック変更例:TBLは0x080000C0に配置、Configurarからプログラム開始>
TBL:
.word 0x8AE41004 @ r0
.word GPIOA_MODER @ r1
.word RCC_CR @ r3
.word LPUART_CR1 @ r5
.word PWR_CR @ r6
Configurar:
movs r7,#0x20 @@ r7 = 0x00000020
lsls r7,r7,#24 @@ r7 = 0x20000000 RAMTOP
lsrs r4,r7,#2 @@ r4 = 0x08000000
adds r4,#0xC0 @@ r4 = 0x080000C0 CODETOP
movs r2,r4 @@ r2 = 0x080000C0
ldm r2!,{r0-r1,r3,r5-r6} @@ load r0/r1/r3/r5/r6
@@ <RCC>
strh r0,[r3,#(RCC_APB1ENR+2-RCC_CR)] @@ [RCC_APB1ENR]=0x10040000
@@ PWR/LPUART1 Clock Enable
lsrs r2,r4,#16
strh r2,[r6,#(PWR_CR-PWR_CR)] @@ [PWR_CR]=0x00000800 Power Range 1 Select
movs r2,#0x01
strb r2,[r3,#(RCC_CR-RCC_CR)] @@ [RCC_CR]=0x00000301 MSI/HSI16ON Enable
rclp1:
ldrb r6,[r3,#(RCC_CR-RCC_CR)] @@ HSI16RDY=1?
lsrs r6,r6,#3
bcc rclp1
str r2,[r3,#(RCC_CFGR-RCC_CR)] @@ HSI16 Used as System Clock
rclp2:
ldrb r6,[r3,#(RCC_CFGR-RCC_CR)] @@ SWS=01?
lsrs r6,r6,#3
bcc rclp2
strb r7,[r3,#(RCC_CR+1-RCC_CR)] @@ MSI OFF
str r2,[r3,#(RCC_IOPENR-RCC_CR)] @@ [RCC_IOPENR]=0x00000001 GPIOA Clock Enable
@@ <GPIOA>
strh r7,[r1,#(GPIOA_MODER-GPIOA_MODER)] @@ [GPIOA_MODER]=0xEBFF0000
@@ PA13-14=AF,PA0-7 INPUT
movs r2,0x66
lsls r2,r2,#20
str r2,[r1,#(GPIOA_AFRH-GPIOA_MODER)] @@ [GPIOA_AFRH]=0x06600000
@@ PA13=LPUSART1_RX,PA14=LPUSART1_TX
lsrs r0,r0,#16 @@ <LPUART1>
str r0,[r5,#(LPUART_BRR-LPUART_CR1)]
@@[LPUART_BRR]=0x00008AE4,256*16000000/115200=35555.55=0x8AE4
movs r0,#0x0D
str r0,[r5,#(LPUART_CR1-LPUART_CR1)] @@ [LPUART_CR1]=0x0000000D TX/RX Enable
@@ LPUART1 Enable
<回路図>シリアルポートの通信速度は115200BPS

○ダウンロードはこちらから
https://drive.google.com/file/d/1pRKuDhRQJPACAuJGmyywuT40SN6n0ayJ/view?usp=sharing
移植の過程でいくつか考慮すべき点がありましたので、本ページに記載します。
①STM32G0とSTM32L0ではベクターの記述が異なる。
両者のベクター領域は(FLASHの場合)ともに0x08000000~0x080000BFなのですが、搭載している
ペリフェラルが異なるためベクターの記述をSTM32G0から変更する必要があります。
②同じ機能のレジスタでも両者のマニュアル上で名称が異なる。
特にRCC関連のレジスタで名称が異なるものがいくつか存在します。
③STM32G0とSTM32L0ではリセット時のクロックが異なる。
STM32L0はArm® Cortex®-M0+ベースの超低消費電力32bitマイコンで、起動時に低電力モードに設定され、
起動時のクロック周波数が低く設定されています。STM32G0と同じ周波数16MHzで動作させるためにクロック
の変更が必要となります。
マニュアルを読んだ限りでは、クロックの設定を変更するためにSTOPモード移行後の割り込みが必要とも受けとれる
記述があり難儀しましたが、実際は以下のページに記載の方法で16MHzのクロックに切り替えることができました。
http://stefanfrings.de/stm32/stm32l0.html
④BOOT0ピンの扱い
STM32G0ではSTM32CubeProgrammerを使用してBOOT0ピンの設定により、シリアル経由のプログラム書き込みが
行えましたが、STM32L010F4の場合シリアル通信が成立せず、書き込みに困難を生じます。(以下のページ参照)
https://qiita.com/caa45040/items/a2e6ceee37f21f84fe27
今回はBOOT0ピンを使用せず、CMCIS-DAPのライター(トラ技ライター)を使用してプログラム書き込みを行いました。
<STM32L010F4P6のクロック変更例:TBLは0x080000C0に配置、Configurarからプログラム開始>
TBL:
.word 0x8AE41004 @ r0
.word GPIOA_MODER @ r1
.word RCC_CR @ r3
.word LPUART_CR1 @ r5
.word PWR_CR @ r6
Configurar:
movs r7,#0x20 @@ r7 = 0x00000020
lsls r7,r7,#24 @@ r7 = 0x20000000 RAMTOP
lsrs r4,r7,#2 @@ r4 = 0x08000000
adds r4,#0xC0 @@ r4 = 0x080000C0 CODETOP
movs r2,r4 @@ r2 = 0x080000C0
ldm r2!,{r0-r1,r3,r5-r6} @@ load r0/r1/r3/r5/r6
@@ <RCC>
strh r0,[r3,#(RCC_APB1ENR+2-RCC_CR)] @@ [RCC_APB1ENR]=0x10040000
@@ PWR/LPUART1 Clock Enable
lsrs r2,r4,#16
strh r2,[r6,#(PWR_CR-PWR_CR)] @@ [PWR_CR]=0x00000800 Power Range 1 Select
movs r2,#0x01
strb r2,[r3,#(RCC_CR-RCC_CR)] @@ [RCC_CR]=0x00000301 MSI/HSI16ON Enable
rclp1:
ldrb r6,[r3,#(RCC_CR-RCC_CR)] @@ HSI16RDY=1?
lsrs r6,r6,#3
bcc rclp1
str r2,[r3,#(RCC_CFGR-RCC_CR)] @@ HSI16 Used as System Clock
rclp2:
ldrb r6,[r3,#(RCC_CFGR-RCC_CR)] @@ SWS=01?
lsrs r6,r6,#3
bcc rclp2
strb r7,[r3,#(RCC_CR+1-RCC_CR)] @@ MSI OFF
str r2,[r3,#(RCC_IOPENR-RCC_CR)] @@ [RCC_IOPENR]=0x00000001 GPIOA Clock Enable
@@ <GPIOA>
strh r7,[r1,#(GPIOA_MODER-GPIOA_MODER)] @@ [GPIOA_MODER]=0xEBFF0000
@@ PA13-14=AF,PA0-7 INPUT
movs r2,0x66
lsls r2,r2,#20
str r2,[r1,#(GPIOA_AFRH-GPIOA_MODER)] @@ [GPIOA_AFRH]=0x06600000
@@ PA13=LPUSART1_RX,PA14=LPUSART1_TX
lsrs r0,r0,#16 @@ <LPUART1>
str r0,[r5,#(LPUART_BRR-LPUART_CR1)]
@@[LPUART_BRR]=0x00008AE4,256*16000000/115200=35555.55=0x8AE4
movs r0,#0x0D
str r0,[r5,#(LPUART_CR1-LPUART_CR1)] @@ [LPUART_CR1]=0x0000000D TX/RX Enable
@@ LPUART1 Enable
<回路図>シリアルポートの通信速度は115200BPS

○ダウンロードはこちらから
https://drive.google.com/file/d/1pRKuDhRQJPACAuJGmyywuT40SN6n0ayJ/view?usp=sharing
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 1kワードのTINYBASIC STM32L010F4
- やってくれたな!!店長よ
- 東大版TINYBASIC (STM32)
- 1kワードのTINYBASIC STM32版 その2
- 1kワードのTINYBASIC STM32版 その1
- 1kワードのTINYBASIC その8
- 1kワードのTINYBASIC その7
- 1kワードのTINYBASIC その6
- 1kワードのTINYBASIC その5
- 1kワードのTINYBASIC その4
- 1kワードのTINYBASIC その3
- 1kワードのTINYBASIC その2
- 1kワードのTINYBASIC その1
- 電大版TINYBASIC for PIC ミニマムお試し版5
- 電大版TINYBASIC for PIC ミニマムお試し版4
- 電大版TINYBASIC for PIC ミニマムお試し版3
- 電大版TINYBASIC for PIC ミニマムお試し版2
- 電大版TINYBASIC for PIC ミニマムお試し版
- PICで電大版TINYBASIC 実装編その5
- PICで電大版TINYBASIC 実装編その4
- PICで電大版TINYBASIC 実装編その3
- PICで電大版TINYBASIC 実装編その2
- PICで電大版TINYBASIC 実装編その1
- PICで電大版TINYBASIC 準備編その2
- PICで電大版TINYBASIC 準備編その1
- PIC18F24K42をPICKIT2で焼くTIPS その2
- PIC18F24K42をPICKIT2で焼くTIPS
- PIC16F18313ブートローダー書き込み器の製作
- PIC16F18857をPICKIT2で焼くその2
- PIC16F18857をPICKIT2で焼く
- PIC16F18313をPICKIT2で焼くその2
- PIC16F18313をPICKIT2で焼く
- PIC16F5XX USBIO
- HVT-BT200の予約制御
- 再考 PIC16F57 USBIO
- PIC16F5X USBIO
- 続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
- ucontrol.com.arに接続できない
- 続続 LPC1114 USBブートローダー
- 続PIC10F200 電子サイコロ
- PIC10F200 電子サイコロ
- LPC1114 8ch簡易ロジックアナライザー USB版
- 続 LPC1114 USBブートローダー
- LPC1114 8ch簡易ロジックアナライザー
- LPC1114 USBブートローダー
- LPC1114でUSB
- 続LPC810でUSB
- LPC810でUSB
- USB_NCO
- USB出力の周波数カウンター
- HIDアダプターについてのまとめ その2
- HIDアダプターについてのまとめ
- 極小ブートローダー まとめ
- 極小ブートローダー ATTiny 其の2
- 極小ブートローダー PIC10F322 其の6
- 極小ブートローダー PIC10F322 其の5
- 極小ブートローダー PIC10F322 其の4
- 極小ブートローダー PIC10F322 其の3
- 極小ブートローダー ATTiny13A
- 極小ブートローダー PIC10F322 其の2
- 極小ブートローダー PIC10F322
- 続11 8ピンPICでUSB PIC16F57_USBIO (その3)
- 続10 8ピンPICでUSB PIC16F505_USBIO (その2)
- 続9 8ピンPICでUSB PIC16F57_USBIO (その2)
- 続8 8ピンPICでUSB PIC16F505_USBIO
- 続7 8ピンPICでUSB PIC16F57_USBIO
- 続6 8ピンPICでUSB PIC16F570_USBIO
- 続5 8ピンPICでUSB PIC12F615_USBIO
- 続4 8ピンPICでUSB 16FUSBの改良版
- 続続続8ピンPICでUSB -30MHz+ソフトシリアル-
- 続続8ピンPICでUSB -16FUSBを30MHzで動かす-
- 続8ピンPICでUSB -ターミナルソフトからの操作-
- 8ピンPICでUSB -16FUSBの移植-
- 番外 MSP430 タイニーブートローダー
- 番外 C8051 タイニーブートローダー
- 続続続 Tiny AVR/PIC Bootloader+
- 続続 Tiny AVR/PIC Bootloader+
- 続 Tiny AVR/PIC Bootloader+
- Tiny AVR/PIC Bootloader+
- 番外 続ATTINY13A OSCCAL の簡易校正
- 番外 ATTINY13A OSCCAL の簡易校正
- 番外 続ATTINY13A ソフトシリアル
- 番外 ATTINY13A ソフトシリアル
- 番外 続Arduinoからタイニーブートローダーを使用する
- 番外 Arduinoからタイニーブートローダーを使用する
- 番外 LPC1114FN28/102 アセンブラサンプル
- 番外 LPC810 タイニーブートローダーの自己書き換え
- 番外 LPC810 EEPROM エミュレーション
- 番外 LPC810 タイニーブートローダー
- 番外 LPC810でアセンブラ
- 続続続PIC10F322 ソフトシリアル一考察
- 続続PIC10F322 ソフトシリアル一考察
- 続PIC10F322 ソフトシリアル一考察
- PIC10F322 ソフトシリアル一考察
- 84ワードのPICブートローダー
- 続PIC10F322 Ring-DDS
- Tinybldの自己更新プログラム
- プログラム領域をROMのように使う
- PIC10F322 256ビットプログラム発振器
- PIC18F EEPROM エミュレーション Jタイプ
- PIC18F EEPROM エミュレーション
- PIC16F EEPROM エミュレーション
- PIC10F322専用 周波数カウンター
- PIC18F Jタイプ ブートローダー
- PICの制約を取り除く
- 番外 ATTINY2313A用ブートローダー
- 続番外 ATTINY13A用ブートローダー
- 番外 ATTINY13A用ブートローダー
- 続PIC10F322 フラッシュメモリの操作
- PIC10F322 フラッシュメモリの操作
- PIC10F322 PIC_WAIT
- ビット列の並び替え その2
- ビット列の並び替え その1
- 故障した温水便座を使えるようにする
- PIC10F322 RA3を出力ポートとして使用
- PIC10F322 周波数カウンタ Part2
- PIC10F322 AN592準拠 周波数カウンタ
- PIC10F322 Ring-DDS
- microchipのAN592に関する一考察
- PIC10F322 3-ch リモコンライン切り替え器
- PIC10F322 4-SW リモコン送信器
- PIC10F322 二相発振器
- PIC_DELAY
- 続PIC_WAIT
- PIC_WAIT
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 1kワードのTINYBASIC STM32L010F4
- やってくれたな!!店長よ
- 東大版TINYBASIC (STM32)
- 1kワードのTINYBASIC STM32版 その2
- 1kワードのTINYBASIC STM32版 その1
- 1kワードのTINYBASIC その8
- 1kワードのTINYBASIC その7
- 1kワードのTINYBASIC その6
- 1kワードのTINYBASIC その5
- 1kワードのTINYBASIC その4
- 1kワードのTINYBASIC その3
- 1kワードのTINYBASIC その2
- 1kワードのTINYBASIC その1
- 電大版TINYBASIC for PIC ミニマムお試し版5
- 電大版TINYBASIC for PIC ミニマムお試し版4
- 電大版TINYBASIC for PIC ミニマムお試し版3
- 電大版TINYBASIC for PIC ミニマムお試し版2
- 電大版TINYBASIC for PIC ミニマムお試し版
- PICで電大版TINYBASIC 実装編その5
- PICで電大版TINYBASIC 実装編その4
- PICで電大版TINYBASIC 実装編その3
- PICで電大版TINYBASIC 実装編その2
- PICで電大版TINYBASIC 実装編その1
- PICで電大版TINYBASIC 準備編その2
- PICで電大版TINYBASIC 準備編その1
- PIC18F24K42をPICKIT2で焼くTIPS その2
- PIC18F24K42をPICKIT2で焼くTIPS
- PIC16F18313ブートローダー書き込み器の製作
- PIC16F18857をPICKIT2で焼くその2
- PIC16F18857をPICKIT2で焼く
- PIC16F18313をPICKIT2で焼くその2
- PIC16F18313をPICKIT2で焼く
- PIC16F5XX USBIO
- HVT-BT200の予約制御
- 再考 PIC16F57 USBIO
- PIC16F5X USBIO
- 続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
- ucontrol.com.arに接続できない
- 続続 LPC1114 USBブートローダー
- 続PIC10F200 電子サイコロ
- PIC10F200 電子サイコロ
- LPC1114 8ch簡易ロジックアナライザー USB版
- 続 LPC1114 USBブートローダー
- LPC1114 8ch簡易ロジックアナライザー
- LPC1114 USBブートローダー
- LPC1114でUSB
- 続LPC810でUSB
- LPC810でUSB
- USB_NCO
- USB出力の周波数カウンター
- HIDアダプターについてのまとめ その2
- HIDアダプターについてのまとめ
- 極小ブートローダー まとめ
- 極小ブートローダー ATTiny 其の2
- 極小ブートローダー PIC10F322 其の6
- 極小ブートローダー PIC10F322 其の5
- 極小ブートローダー PIC10F322 其の4
- 極小ブートローダー PIC10F322 其の3
- 極小ブートローダー ATTiny13A
- 極小ブートローダー PIC10F322 其の2
- 極小ブートローダー PIC10F322
- 続11 8ピンPICでUSB PIC16F57_USBIO (その3)
- 続10 8ピンPICでUSB PIC16F505_USBIO (その2)
- 続9 8ピンPICでUSB PIC16F57_USBIO (その2)
- 続8 8ピンPICでUSB PIC16F505_USBIO
- 続7 8ピンPICでUSB PIC16F57_USBIO
- 続6 8ピンPICでUSB PIC16F570_USBIO
- 続5 8ピンPICでUSB PIC12F615_USBIO
- 続4 8ピンPICでUSB 16FUSBの改良版
- 続続続8ピンPICでUSB -30MHz+ソフトシリアル-
- 続続8ピンPICでUSB -16FUSBを30MHzで動かす-
- 続8ピンPICでUSB -ターミナルソフトからの操作-
- 8ピンPICでUSB -16FUSBの移植-
- 番外 MSP430 タイニーブートローダー
- 番外 C8051 タイニーブートローダー
- 続続続 Tiny AVR/PIC Bootloader+
- 続続 Tiny AVR/PIC Bootloader+
- 続 Tiny AVR/PIC Bootloader+
- Tiny AVR/PIC Bootloader+
- 番外 続ATTINY13A OSCCAL の簡易校正
- 番外 ATTINY13A OSCCAL の簡易校正
- 番外 続ATTINY13A ソフトシリアル
- 番外 ATTINY13A ソフトシリアル
- 番外 続Arduinoからタイニーブートローダーを使用する
- 番外 Arduinoからタイニーブートローダーを使用する
- 番外 LPC1114FN28/102 アセンブラサンプル
- 番外 LPC810 タイニーブートローダーの自己書き換え
- 番外 LPC810 EEPROM エミュレーション
- 番外 LPC810 タイニーブートローダー
- 番外 LPC810でアセンブラ
- 続続続PIC10F322 ソフトシリアル一考察
- 続続PIC10F322 ソフトシリアル一考察
- 続PIC10F322 ソフトシリアル一考察
- PIC10F322 ソフトシリアル一考察
- 84ワードのPICブートローダー
- 続PIC10F322 Ring-DDS
- Tinybldの自己更新プログラム
- プログラム領域をROMのように使う
- PIC10F322 256ビットプログラム発振器
- PIC18F EEPROM エミュレーション Jタイプ
- PIC18F EEPROM エミュレーション
- PIC16F EEPROM エミュレーション
- PIC10F322専用 周波数カウンター
- PIC18F Jタイプ ブートローダー
- PICの制約を取り除く
- 番外 ATTINY2313A用ブートローダー
- 続番外 ATTINY13A用ブートローダー
- 番外 ATTINY13A用ブートローダー
- 続PIC10F322 フラッシュメモリの操作
- PIC10F322 フラッシュメモリの操作
- PIC10F322 PIC_WAIT
- ビット列の並び替え その2
- ビット列の並び替え その1
- 故障した温水便座を使えるようにする
- PIC10F322 RA3を出力ポートとして使用
- PIC10F322 周波数カウンタ Part2
- PIC10F322 AN592準拠 周波数カウンタ
- PIC10F322 Ring-DDS
- microchipのAN592に関する一考察
- PIC10F322 3-ch リモコンライン切り替え器
- PIC10F322 4-SW リモコン送信器
- PIC10F322 二相発振器
- PIC_DELAY
- 続PIC_WAIT
- PIC_WAIT