周辺ペリフェラルのプログラムで失敗するとデバッガ接続が出来ないなどの問題が発生することがあります。

 

前回説明したように、最初のうちはdelay関数を入れて周辺設定をするまでに

デバッガ接続が出来るだけの時間を確保しておく方法があります。


まず、STM32C011J4に限らず最近のマイコンは以下のような構成で、周辺ペリフェラルのクロックを制御していることが多いです。

 

今回はプログラムもすることなく、周辺の動作確認をしてみる方法をやってみます。

この方法は、GPIOなどに使える方法ですので、覚えておいても良いかと思います。

今回は、以下のようにLED(抵抗付き)を配置しました。ポートでいうとPB7に接続されています。

 

IAR Embedded Workbench for ARMのデバッガの機能を使ってやってみます。

まだプログラムを作っていないので、空のmain.cを用意して、オプション設定をSTM32C011J4、デバッガをI-jetにしてプログラムをビルドだけしてしまいます。

 

attachして、レジスタRCCとレジスタGPIOBを表示します。今回はPB7にLEDが接続されています。

 

①設定が出来ていれば、GPIOB_ODRのOD7の値を0,1とすることでLEDが反応するはずですが・・・変化しません。

 

②GPIOB_MODERでポートの設定をする必要があり、PB7を制御するMODE7の値を見てみると、0x2となっており、Alternate functionになっています。出力の場合には0x1とする必要があります。

  これでOD7を0,1としてもLEDが変化しませんでした。

 

③GPIOB_OTYPERで出力設定をみると0x1なっていますが、Push-Pullにすべきなので0x0にする必要があります。

 

実はこれでOD7を0,1,0,1とするとLEDが点滅をし始めました。

 

あとは、RCCクロックの部分をかくにんすると、現状GPIOBENは1になっています。

リセット値は0だと思っているので、ソフトでやるときには明示的にGPIOBENは1にした方が良さそうです。