2014年7月4日金曜日

STM32F1 自身をリセットする

CMSISのcore_cm3.hには NVIC_SystemReset という関数があります
というかinline関数がヘッダファイルに書いてあります

この関数 読んで字の如し、システムをリセットすることができます

なおこの機能はCortex-M3レベルのハードウェア機能なので、STMicroのRM0008には書かれていません

例えばUSARTで"reset"が送られてきたらこの関数を呼ぶ という感じにしておけばPCからリセットできます

STBeeの場合、GPIOA0とGNDの間に0.1uF程度のキャパシタを付けて、リセットする前にGPIOA0をOut_PPで初期化してSetBitsで充電してからリセットするとDFUを起動できます
(STBeeMiniはDFU起動スイッチのモードが逆なので注意 あとポートも違う)

DFUをリセットするのは手動で行うか、電源を切断してリセットする必要があるので、あまり使い勝手がいいとは言えませんが、DFU起動スイッチが奥まった場所にある場合などは使える方法かもしれません?

追記:2014/07/05
0.1uFではリセットされなくなってきました
当初は正常に動いていましたが、いつの間にか…
0.1uFではプルダウン抵抗に対して弱すぎるようです
試しに47uFを接続したところ、正常に動作しているようです

0 件のコメント:

コメントを投稿