STM32の最近のブログ記事

while(1){ }で無限に繰り返す
 初期化を終えた後は、
   while(1){
     ここに記述した処理は終わることなく続く
   } 

  前回の処理で、使用しないI/Oピンをアナログ入力に設定し終えました。次に示す緑色の強調表示された関数、RCC_APB2PeriphClockCmd()で各ペリフェラルのクロックを停止します。

 RCC_APB2PeriphClockCmd()の関数は、各ポートの設定を行う前に呼び出し各ペリフェラルの変更を行うために各ペリフェラルを活動状態にするクロックをイネーブルにし、設定が終了したので、同じ関数で不要なペリフェラルの活動を止め、省電力化を図っています。

IAR5900010.jpg

GPIOx CRLレジスタ
 今回は、GPIO_Init関数の内部の次の範囲の処理について確認していきます。この処理は、AからE各GPIOポートの下位の0から7番ピンの設定を分担しているGPIO_CRLレジスタに対する処理のルーチンです。

tmpreg = GPIOx->CRL;
for (pinpos = 0x00; pinpos < 0x08; pinpos++)

 から
              GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
             }
          }
       }
    }
  GPIOx->CRL = tmpreg;

ARMマイコン入門(57) STM32 バリュー・ラインを使ってみる(12)
GPIO_Init()関数

   前回、GPIOの初期化を行うために必要な情報の受け渡しにデータ構造を使用していることを確認しました。また、列挙型の型定義で受け渡しデータの型定義を行っています。独自に定義された型のデータは定義部で具体的な設定の値を確認することができました。それらの結果を基にGPIO_Init関数で何が行われているか確認します。

GPIOモードの設定
   GPIO Mode ConfigurationでGPIOポートの設定を行っています。まず最初の命令で、初期化のために渡されたGPIO_Modeの値を変数currentmodeにセットしています。GPIO_Modeはデータ構造GPIO_InitStructの中に構造体のメンバとで、GPIOポートの入出力などのモードが設定されています。

列挙型変数の定義
 GPIOMode TypeDefは型名で、enum宣言でGPIO_Modeの各設定状態を列挙型変数として定義しています。列挙型変数の基本的な要素(列挙定数)は整数です。この整数値に、各値に与えられた機能を類推できるわかりやすい名前を与えているのが、列挙型の型定義です。
 意味がわかりにくい0x00の値に、GPIO_Modeをアナログ入力モードに設定するという役割をGPIO_Mode_AINという名前を付けてわかりやすくしています。

STM32バリュー・ライン用のサンプル・プログラムGPIOToggleを動かす
   今回は、GPIO_Init()関数でどのようなことが行われているか確認します。半分はSTM32のGPIOの制御の仕組みについて、半分はプログラムのCの記述方法の話になります。手元にJIS プログラム言語C JISX3010をおき、参照しながら確認することにします。
 GPIO_Initを呼び出す前に各GPIOの操作を行うためには各ポートのクロックをイネーブルにする必要があるため、RCC_APB2PeriphClockCmd関数でGPIOの該当ポートのクロックをオンにしました。関数GPIO_Initに渡す引数として対象汎用入出力ポート名と初期化のための次の二つのデータを用意します。
 この二つのデータは、初期化のためのデータ構造 GPIO_InitStructureのメンバのGPIO対象ピンを示すGPIO_PinとGPIOの動作モードを指定するGPIO_Modeの二つです。
 GPIO_InitStructure.GPIO_Pinには16ビットがすべて1がセットされたGPIO_Pin_Allの値が書き込まれ、GPIO_InitStructure.GPIO_ModeにはGPIO_Mode_Ainの値が書き込み、この初期化データのデータ構造のアドレスをGPIO_Init関数の2番目の引数として渡します。データ構造のアドレスを示すために、2番目の引数はデータ構造名GPIO_ InitStructureにこの変数のアドレスであることを示す&を付加し記入されています。
        &GPIO_InitStructure

 

IAR5500010.jpg

STM32バリュー・ライン用のサンプル・プログラムGPIOToggleを動かす
  前回、次のメイン・プログラムの開始部から、プログラムのステップ動作を開始しました。ボードのLED4を点滅させるPC8、LED3を点滅させるPC9、SW入力を受け取るPA0の各ディジタル・ポートの設定のため、GPIOポートのクロックをイネーブルにしました。

IAR5400010.jpg

STM32バリュー・ライン用のサンプル・プログラムGPIOToggleを動かす
Assert_parm関数、アロー演算子

    GPIOToggleのメイン・プログラムから最初に呼び出されるRCC_APB2PeriphClockCmd関数に制御が移ります。次に示すように呼び出された関数の最初の3行を飛ばして、引数NewStateがDISABLEでないかのチェックを行っています。 

IAR5300010.jpg

STM32バリュー・ライン用のサンプル・プログラムGPIOToggleを動かす
   GPIOToggleのデバッグで最初に実行されるのがRCC_APB2PeriphClockCmd関数です。
この関数では二つの引数、符号なし32ビットの整数型(uint32_t)の変数RCC_APB2PeriphとFunctionalState型の変数NewStateを受け取ります。関数RCC_APB2PeriphClockCmdは、この引数で示される指示に従い各クロックのオン/オフを行います。

IAR5200010.jpg

STM32バリュー・ライン用のサンプル・プログラムGPIOToggleを動かす


GPIOToggleのプログラムで行っていること
クロック、リセット・レジスタ

 デバッグを開始すると、Userのフォルダのソース・プログラムmain.cのint main(void)関数がプログラムの開始点となります。
  最初のステップ動作で、main関数の最初に配置されている次に示すRCC_APB2PeriphClockCmdの命令に強調表示が移動します。強調表示ですから、この命令はまだ実行されていません。

IAR5100005.jpg

STM32バリュー・ライン用のサンプル・プログラムGPIOToggleを動かす
GPIOToggleのワークスペースを開く

  IAR Embedded Workbench IDEを起動し、前回確認したGPIOToggle.ewwを開きます。その後、オンラインデバッグするために、STM32 VL Discoveryのマイコン・ボードをUSBケーブルで接続します。その後、次に示すように
   プロジェクト>ダウンロードしてデバッグ
を選択してオンライン・デバッグを開始します。デバッグ開始時はmain.cの関数の最初が緑色の強調表示となっています。

IAR5000010.jpg

STM32バリュー・ライン用のサンプル・プログラムGPIOToggleを動かす
   前々回にダウンロードしインストールしたIAR Embedded Workbench IDE(EWARM)を起動します。起動時の初期画面は次のようになります。

IAR4900010.jpg

STM32バリュー・ライン用のサンプル・プログラムをダウンロード
   今まで国内で販売されていなかったSTM32 VL Discoveryが、秋月電子通商で1セット1,100円の価格で販売開始されました。無償の評価版の開発システムを利用できますので、極めて低予算でARM Cortex M3の評価ができるようになりました。ぜひ購入して32ビット・マイコンを試してみてください。

サンプル・プログラムのダウンロード
 IARの開発システムは用意しましたから、次はSTM32のサンプル・プログラムをダウンロードします。サンプル・プログラムは、キットに添付されているカードに示される次のアドレスにアクセスして表示されるSTM32VLDISCOVERYのホームページからダウンロードします。
  http://www.st.com/stm32-discovery

STM32バリュー・ライン内蔵のST-Link
   前回、IAR Embedded WorkBenchの32KBのメモリ制限版の開発システムをダウンロードしインストールしました。この開発システムが、STM32シリーズのマイコン・ボードにプログラムを書き込み、デバッグを行うためには、SWD(シリアル・ワイヤ・デバッグ)のモジュールが必要になります。STM32 VL Discoveryのマイコン・ボードには、SWDによるオンライン・デバッグを行うST-Linkのモジュールが搭載されています。このST-Linkのモジュールとマイコン・ボードの関係を確認します。

マイコン・ボードのUSBコネクタ側がST-Link
 マイコン・ボードの部品面を次に示します。ボードには二つのマイクロコントローラが搭載されています。右側のUSBコネクタが取り付けてあるほうがST-Linkモジュールで、左側の少し大きいマイコンが搭載されているほうが、このCortex-M3のマイコン・ボードです。

IAR4700010.jpg

STM32バリュー・ラインDiscoveryキットの導入
  STマイクロエレクトロニクスからARMマイコンSTM32の安価な評価キットが発売されました。
 このキットは次に示すように、評価ボードとボードの動作確認の概要説明と、このキットを利用するための具体的な説明が用意されているホームページのアドレスが記入されたカードがあるだけのキットです。

IAR4600010.jpg





カテゴリ


Copyright (C) 2006-2015 CQ Publishing Co.,Ltd. All Rights Reserved.