今回使用したのは、秋月で売っている一番安いSTM32、STM32F042K6T6です。
Arm Cortex-M0 48MHz, Flash32KB, SRAM6KB, LQFP32
LQFP32に対応するDIP化基板へはんだづけ!
0.8mmピッチなので、0.65mmピッチ28ピンのLPC1114FDH28のはんだづけより簡単です。
USBシリアルを使って書き込みます。LEDとUSBシリアルとの接続の仕方はつぎの通り。
VDDA、VDDIO2にも電源供給が必要です。BOOT0をHIGHにすることで、書き込みモードになります。
RTSが使えない場合は、リセットする際、手でジャンパー線をGNDにつなぐか、タクトスイッチをつけましょう。
3.3V | VDD 1 | STM32F0 | 32 VSS | GND |
OSC_IN 2 | 31 BOOT0 | 3.3V | ||
OSC_OUT 3 | 30 PB7 | |||
RTS | NRST 4 | 29 PB6 | ||
3.3V | VDDA 5 | 28 PB5 | ||
PA0 6 | 27 PB4 | |||
PA1 7 | 26 PB3 | |||
PA2 8 | 25 PA15 | |||
PA3 9 | 24 PA14 | |||
PA4 10 | 23 PA13 | |||
PA5 11 | 22 PA12 | |||
PA6 12 | 21 PA11 | |||
PA7 13 | 20 PA10 | TXD | ||
PB0 14 | 19 PA9 | RXD | ||
LED | PB1 15 | 18 PA8 | ||
GND | VSS 16 | 17 VDDIO2 | 3.3V |
t0-asm$ make ../tools/stm32writer/stm32writer.py --port=/dev/tty.SLAB_USBtoUART --go "obj.mot" stm32writer (version: 20171231py) ...
うまくいけば書き込み終了後に自動的にエルチカが始まります。
書き込み終わっているので、USBシリアルを外して、BOOT0をGNDに接続し、3Vくらいにつなげばエルチカマシンのできあがりです!
アセンブリ言語でマシン語プログラムも楽しいですが、C言語で開発できるようにすると楽です。
例えば、48MHzへの切り替えの一部 (asm15 アセンブリ言語 from STM32エルチカ)
R0=[@RCC]L R3=R0+4 ' RCC_CFGR R1=[R3]L R2=`1111 R2=R2<<18 R2=~R2 R1&=R2 R2=4 ' PLLMUL6 R2=R2<<18 R1|=R2 [R3]L=R1
これがC言語だと1行で書けます!
RCC->CFGR = (RCC->CFGR & ~(0b1111 << 18)) | (4 << 18);
t1-led-blinkがC言語でのエルチカ、t2-clockがクロックを48MHzに変更と、stm32の取説に合わせて必要最小限のプログラムになっているので、C言語の雰囲気をつかむのにのぞいてみてください。
t2-usartではstm32とのシリアル通信が一応できていますが、どうも内蔵クロックの精度が悪く計算上の値とは5%ほどずれてしまう点と、切り替えるべきAF(Alternate Function)の番号がstmのシリーズによって違う点が注意です。
STM32F0シリーズの取説は、日本語版もあって親切丁寧です!
「参考資料 RM0091 リファレンスマニュアル STM32F0x1/STM32F0x2/STM32F0x8 advanced ARM-based 32bit MCUs」
コンピューターをフル活用できる、マシン語とC言語の世界もぜひどうぞ!
BASICでプログラムの楽しさを知り
マシン語でコンピューターを知り
C言語でツールの便利さを知る
かつての王道、今でも通じる!?
links
- taisukef/my-first-stm32: first step of STM32F0
- IchigoJamではじめるArmマシン語