« なるほど | トップページ | はんだ付け »

2017年8月23日 (水)

stm32あるある?

さて、stm32のフラッシュメモリ書き込みなんだけど。

書き込みポートは、それだけに使うだけじゃなくて、動作中のログを読み込んだり、
パラメータを設定したり、デバッグコマンドを仕込んだりと、いろいろ使いたい。

USBポートの頻繁な付け外しは、PCの不安定動作につながるのでやりたくない。

さらにマウスだと、接続のコネクタも減らしたいし、ピンも減らしたい、というわけで、
いまだに、シリアルポートから書き込んでいるのだけれど。

------

この辺で、ちょっとしたコツというか、押さえておかないと微妙に苦労したりすることがある。
STM32F1なんかじゃ、まず大丈夫だけど、F4あたりだと...

BOOTピンを使って、書き込みモードに入れるんだけど、なかなか
ツールに応答してくれないことがあったりする。

うまく行くときは行くんだけど、ダメな時はずっとダメとか。
典型的な症状だが、苦労している人は色々いるようだ。

------

書き込み用のシリアルポートは、USART1を使っていることが多いと思うけど、
USART3や、CAN、SPI、I2Cなんかも使えるようだ。
CANなんかはこの際、あんまり問題にならない。

この書き込みにつかなわい(つもりの)USART3の
ピン処理をミスって(放置して)いたりすると、よく嵌る。

書き込み用のシステムプログラムは、BOOTモードで起動すると、
USARTの各端子を初期化して、最初のキャラクタが来るのを待って、
キャラクタが来たポートを使って、書き込み動作に入る。

非同期シリアルのロジックは、0Vがマークだ。
USARTのRx端子を放置しておくと、だいたい0Vになっているものなので、
いきなりデータを受信(したことに)してしまう。

自分ではGPIOピンなんかで使うつもりでも、BOOTモード起動時はUSARTピンだ。
だもんで、いくらUSART1で書き込むつもりでも、USART3の端子を適切に処理してないと、
そっちが先にデータを受信したことになって、USART1からは書き込めなくなる。

まあ、たまたま運よく(?)USART3のRXピンの電圧が泳いでいると、
USART1の方を受け付けてくれたりするのだ。

これが、時々たまにうまく書き込める理由だったりする。

しかも、USART3のRXピンは、PB11とPC11、2つあって、
ご丁寧に両方有効にされていたりする。

余計なことを....と思いながらも、BOOTモード時には、
Hレベルで固定されるようにプルアップとかをしておかないとうまく行かない。

またUSART1のRxピンも同じ理由で、RESET解除時には、必ずHレベルになってないと、
本来のシリアルデータが来る前に、書き込みシーケンスに入ってしまい、
書き込みが失敗するのだ。

その関連で、ボード外部にレベルコンバーターを付けて、
ロジックレベルで基板とつなげようとすると
パワーオンリセットでの書き込みが苦しくなって、
外部リセット信号が必要になったりする。

あれこれ悩んだけど、結局なるべく232Cレベルコンバーターは、
ボード上に乗せる、という方針でやっている。

stm32だけでなく、ルネサスなんかも、同じようなシーケンスで
はまるのは定番だ。

------

まあ、苦労するのも楽しみだけど、モチベーションが枯れてしまうのもアレなので、
このあたりにひっそりと記しておくこととします。

そろそろ各位のメインボードも火入れの時期かと思います。
検討を祈ります。

| |

« なるほど | トップページ | はんだ付け »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: stm32あるある?:

« なるほど | トップページ | はんだ付け »