STM32 が電源投入後に起動しない問題

実験中の STM32G0B1CBT6 をブレッドボード上で走らせていますが、電源投入しても起動しない問題に悩まされております。症状は

  • プログラマから書き込んだ後にはきちんと起動する
  • 電源を切って入れなおすと起動しない
  • 電源を上げたままハードウェアリセットをかけると起動する(たいてい。たまに起動しない)
  • リセットボタンを押したまま電源投入してしばらくしてから離せば起動する

ハードウェアリセットしても起動しないのはクロックが不安定なのだろうと考えて、負荷コンデンサを修正したら解決しましたが、電源投入後に起動しない問題は解決しませんでした。ちなみに 16 MHz 水晶でクロックを発振させ PLL を使って 64 MHz システムクロックで動かしています。

あちこち調べてみたところ、どうも電源投入直後にクロックが不安定である可能性が高いらしいです。解決策としては

  • 水晶に取り付ける負荷コンデンサを調整する
  • BOR を有効にする
  • ブートローダを使っている場合 (Embassy はそうだったはず)、boot0 ピンが浮いていると動作が不安定になるので 10kΩぐらいの抵抗でグラウンドに落とす

などが推奨されていましたが、これを全てやっても解決しません。ソフトウェア的に初期化の前に後れを発生させるハックを入れようと試みましたがどうもうまく行かず。もう仕方がないから電気回路的に電源投入時に強制的にリセットが入るようにしました。

これは有効でした。ダイオード D2 は電源を落としたときに C7 の電荷を素早く放電するためのものですが、BOR を有効にしておくと MCU 経由で放電されるかもしれません。その場合ダイオードは不要かもしれませんがあった方がなんとなく安心なので検証せずにつけておきます。

こういう問題の原因を追究せずにハードウェアで解決すると後でしっぺ返しを受けそうで嫌なのですが作ったモジュールが起動しないでは困るので当面はプリント基板に加えておこうと思います。必要なければ単に C7 と D2 をつけなければ良いだけです。R35 のプルアップ抵抗はどのみち必要です。

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください