Project_OKI’s diary

エンジニアの勉強ブログ

STM32マイコン31 (CubeIDEの使い方:レジスタ確認)

CubeIDEの使い方(レジスタ確認)

1.目的

  • レジスタの意味について記載する。
  • CubeIDEやAtlicTrueStdioでのデバック時、breakした時のレジスタ状態を確認する方法について記載する。

  • 上記は、デバック時に問題が発生した時の原因追及の為の手がかりとなる。

目次

2. レジスタとは

 ・CPUが命令を実行するために取り出した情報を保持する記憶装置をレジスタという。

 ・特にSTM32マイコンでは、内部のメモリ空間に存在する特殊な記憶領域の事をいう。

 ・このレジスタは、ハードウェアの制御やデバイスの設定、データの読み書きなどで使用される。

 

3. レジスタの種類

 ・STM32マイコンでは、一般的には下記の種類のようなレジスタがある。

 (1) 汎用レジスタ(General-Purpose Registers)

  これらのレジスタは、一般的なデータ操作や演算に使用される。

  プログラムの実行中に一時的なデータを保存するために使用される。

 

 (2) ステータスレジスタ(Status Registers)

  これらのレジスタは、ハードウェアの状態や条件を示すために使用される。

  例えば、割り込みフラグやエラーフラグなどが含まれる。

 

 (3) 制御レジスタ(Control Registers)

  これらのレジスタは、ハードウェアの動作や機能を制御するために使用される。

  例えば、タイマやUARTの設定、クロックソースの選択などが制御される。

 

 (4) イベントレジスタ(Event Registers)

  これらのレジスタは、ハードウェアのイベントやトリガーの状態を保持する。

  例えば、タイマのカウンタが特定の値に達したことを示すイベントレジスタがある。

 

 (5) ペリフェラルレジスタ(Peripheral Registers)

  これらのレジスタは、各種ペリフェラルバイス(UART、SPI、I2Cなど)の制御やデータの送受信に使用される。

  各ペリフェラルごとに固有のレジスタが存在し、そのペリフェラルの機能や設定を制御する。

 

 ・データシートを参照すると、実際には、下記のようにGPIOを制御するGPIOレジスタや、IWDGを制御するIWDGレジスタなどがあり、

 GPIOレジスタの中でも機能によってポート設定レジスタや、ポート出力データレジスタなど、様々なレジスタがある。

 そのレジスタを制御することにより、機能が使える。

 

 

詳しいレジスタやその機能については、STM32のリファレンスマニュアルを参照。

参照データシート(STM32F103):リファレンス マニュアル (日本語) | STM32, STM8ファミリはSTの32bit/8bit汎用マイクロコントローラ製品

 

4. レジスタの確認方法

 ・CubeIDEやAtlicTrueStdioのデバッカには、このレジスタがどのような状態になっているか確認する方法がある。それは、SFRsビューを使用する。

 

 ・レジスタの確認(SFRs)ビューの使用(UM2609 5.2 SFRsビューの使用方法より)
   [SFRs]ビューには、プロジェクトで使用されている STM32 デバイス

   ペリフェラルレジスタ、ビット・フィールドに関する情報が含まれる。

  参照:http://UM2609(CubeIDEユーザーガイド)

  (これは、CubeIDEのユーザーガイドだが、AtlicTrueStdioも同じ)

 

 ・プロジェクトをデバッグする場合、レジスタやビット・フィールドにはターゲットから読み出された値が設定される。

 

 確認方法
  (1) クイックアクセスにSFRsと入力
  (2) SFRs(デバック)をクリックして選択。
  (3) レジスタ画面が表示される。
  (4) 参照したいレジスタの名前をクリックすると、

   その時のレジスタの内容が見ることが出来る。

 上記画像では、GPIOCのODRレジスタ(GPIO OUT)のレジスタを確認している。

 GPIOCのODR8は、PC8で、PC8がHighの時、0x1,Lowの時0x0となる。

 レジスタを使用したGPIOの設定については、下記を参照

 →STM32マイコン_10(レジスタ操作でLED点滅) - Project_OKI’s diary

  STM32マイコン_15(レジスタ操作でLED点滅2) - Project_OKI’s diary

  

 ※これにより、breakをした時に、その時のレジスタの状態を参照することが出来る。 

 

5. SFRsビューに関して

(1)[SFRs]ビュー下部には、選択した行に関する詳細情報が表示されます。
  Access permission には、次のような詳細情報が含まれます。
  • RO(読出し専用)
  • WO(書込み専用)
  • RW(読出し / 書込み)
  • W1(1 回書込み)
  • RW1(読出し /1 回書込み)

 

(2)[Read action] には、レジスタまたはビット・フィールドの読出し時に読出し動作が存在する場合にのみ、次の情報が表示される。
  • clear
  • set
  • modify
  • modifyExternal


(3) ツールバーの RD ボタン

 このボタンは、選択したレジスタの強制読出しに使用する。

 この機能は、レジスタまたはレジスタ内の一部ビット・フィールドにReadAction が設定されていても、レジスタを読み出せる。

 

 RD ボタンをクリックしてレジスタを読み出すと、 

 ビューに表示されている他のレジスタもすべて再読み出しされ、 

 すべてのレジスタの最新の状態が反映される。

 

(4) 基数フォーマット・ボタン(X16、X10、X2) 

 レジスタ表示の基数(2進数/10進数/16進数を変更するときに使用する。

 

(5) Configure SVD settings ボタン

 現在のプロジェクトの[CMSIS-SVD Settings]プロパティ・パネルを開く。

 

(6) Pin ボタン(「自動切り換えなし」オプション)

 [Project Explorer]ビューが他のプロジェクトに切り換わっても、

 現在表示されている SVD ファイルに対するフォーカスを維持する。

 

関連記事

過去の記事:

知らないと損するお金の話(ふるさと納税、確定申告とワンストップ納税どっちが得?) - Project_OKI’s diary

C言語基礎知識6(関数) - Project_OKI’s diary

C言語基礎知識7(構造体1) - Project_OKI’s diary

C言語基礎知識8(enum:列挙型) - Project_OKI’s diary

C言語基礎知識9(typedef) - Project_OKI’s diary

C言語基礎知識10(extern宣言) - Project_OKI’s diary

C言語基礎知識11(#define) - Project_OKI’s diary

 

組み込みC言語