1

stm32l152rb マイクロプロセッサを搭載した STM32L ディスカバリ ボードを入手しました。ライブラリをまったく使用せずに、アセンブリでそのボードをプログラムしようとしています。これまでのところ、リンカー スクリプトと、.data セクションを RAM にコピーし、bss セクションをゼロにする基本的なルーチンを作成することに成功しました。しかし、それとは別に、私は少し迷っています。

GPIo の構成方法を理解するための小さな実験として、GPIO ポート B のピン 7 に接続された緑色の LED を点灯させるボードのプログラムを作成したいと思います。データシートを読んで、次の 2 つのことを行う必要があると結論付けました。

  1. GPIO ポート B、ピン 7 を出力ピンとして構成する
  2. 上記のピンを高く設定します

しかし、この場所では、比喩的に、木を見て森を見ていません。使用可能な複数の IO モードのどれを選択すればよいかわかりません。これらすべての頭字語が私を混乱させます。これを行う方法に関する詳細な情報、指示、および場合によってはアセンブリの例を提供してくれる人に本当に感謝しています。

4

1 に答える 1

3

GPIO モジュールを使用する前に、次のことを行う必要があります。

  1. GPIO レジスタをリセットします。
    • RCC モジュール、レジスタAHBRSTR、ビットGPIOBRSTが 1 に設定 - 最初に高い
    • RCC モジュール、レジスタAHBRSTR、ビットGPIOBRSTを 0 に設定 - 最初にロー
  2. GPIO レジスタ クロックを有効にします。
    • RCC モジュール、レジスタAHBENR、ビットGPIOBENを 1 に設定 - クロックを有効にする

その後、GPIOレジスタの使用を開始できます

  1. GPIO モジュール、レジスタGPIOB_MODER、ビットフィールド [15:14] を 01 に設定 - 汎用出力モード
  2. GPIO モジュール、レジスタGPIOB_OTYPER、ビット 7 を 0 に設定 - 出力プッシュプル
  3. GPIO モジュール、レジスタGPIOB_OSPEEDR、ビットフィールド [15:14] を 00 ~ 400 kHz に設定 非常に低速
  4. GPIO モジュール、レジスタGPIOB_PUPDR、ビットフィールド [15:14] を 00 に設定 - プルアップなし、プルダウン

GPIOB_BSRR(セット/リセット) レジスタまたは GPIOB_ODR (出力) レジスタのいずれかを使用できるようになりました。

  • GPIO モジュール、レジスタGPIOB_BSRR、ビット 7 を 1 に設定 - GPIOB ピン 7 を設定 (ハイ)
  • GPIO モジュール、レジスタGPIOB_BSRR、ビット 23 を 1 に設定 - GPIOB ピン 7 をリセット (低)
于 2013-05-31T17:45:58.683 に答える