知ることはたのしい

"車輪の再発明"は時間がもったいないと思うから"車輪の設計図"を置いて学習の効率化に役立ちたい。そしてもっと素晴らしいものを開発してくれないかな。

STM32でプログラムが動かない問題を修正する

STM32マイコンで開発をしていたときにプログラムが走らなくなってしばらく苦悩したので覚え書きをしておきます。

開発環境

  • STM32L432KC(自作ボード)

  • CubeMXサンプルプロジェクトを改造

  • ST-Linkで書き込み/デバッグ

問題発生状況

プログラム開発→デバッグを繰り返しているうちにマイコンを通常起動すると書き込んだプログラムが正常に動かなくなっていました。

原因

ブートモードを決めるレジスタの値が変わっていたため別モードで起動していました。
デバッグ時はブートシーケンスが異なるためこのレジスタの影響を受けずに正常動作できるようです。

修正方法

レジスタを書き換えてあげれば良いのですが、このレジスタは書き込みに制限がかかっているのでロックを解除する必要があります。

ブートモードの一覧とその設定方法は以下になります。(L4Axxx,L41xxx~L46xxx,L49xxx系) f:id:lenia23:20181017141714j:plain f:id:lenia23:20181017141725j:plain

これを見るとFLASH_OPTRレジスタを叩いてあげたらいいことがわかりますが、以下のレジスタを先に叩いてロック解除しないと書き換えられません。 f:id:lenia23:20181017143614j:plain

なので
FLASH_OPTKEYR(Key1)
FLASH_OPTKEYR(Key2)
FLASH_OPTR修正
FLASH_CR(OPTLOCK)
を順に行うプログラムをデバッグモード実行して事なきを得ました。
(コードの断片は後日アップするかもしれません)