STM32でプログラムが動かない問題を修正する
STM32マイコンで開発をしていたときにプログラムが走らなくなってしばらく苦悩したので覚え書きをしておきます。
開発環境
STM32L432KC(自作ボード)
CubeMXサンプルプロジェクトを改造
ST-Linkで書き込み/デバッグ
問題発生状況
プログラム開発→デバッグを繰り返しているうちにマイコンを通常起動すると書き込んだプログラムが正常に動かなくなっていました。
原因
ブートモードを決めるレジスタの値が変わっていたため別モードで起動していました。
デバッグ時はブートシーケンスが異なるためこのレジスタの影響を受けずに正常動作できるようです。
修正方法
レジスタを書き換えてあげれば良いのですが、このレジスタは書き込みに制限がかかっているのでロックを解除する必要があります。
ブートモードの一覧とその設定方法は以下になります。(L4Axxx,L41xxx~L46xxx,L49xxx系)
これを見るとFLASH_OPTRレジスタを叩いてあげたらいいことがわかりますが、以下のレジスタを先に叩いてロック解除しないと書き換えられません。
なので
FLASH_OPTKEYR(Key1)
FLASH_OPTKEYR(Key2)
FLASH_OPTR修正
FLASH_CR(OPTLOCK)
を順に行うプログラムをデバッグモード実行して事なきを得ました。
(コードの断片は後日アップするかもしれません)