STM32F3Discover GPIO input

前回はGPIOを使った出力でした。
今回は入力をしてみましょう。

と、いっても前回でGPIOはほとんどやってしまったのですごく簡単です。
前回ちゃんと見た人ならまず、ピン設定を入力にするにはどうしたらいいかわかるはずです。
MODERを0にします。これで入力になり、対応するピンに掛かる電圧の大きさからIDRの対応するビットが0か1になります。
ちなみに今使ってる基板にはUSER用のボタン(多分青色)があって、これはA0につながっています。
回路図を見ればわかりますが、ボタンにつながったA0はボタンを押すと電源電圧、離すとGNDになります。
今回はA0のONOFFをLEDのONOFFにしちゃいます。
やることとしては、GPIOAのクロックをONにする。モードを入力にする、プルアップ・プルダウンをなしにするでOKですね。
前回は出力だったのでOTYPERやODRを設定しましたが、入力ならなしです。

[c]

#include "stm32f30x.h"

void SystemInit(void)
{

}

int main(void)
{
// connect AHB
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
RCC->AHBENR |= RCC_AHBENR_GPIOEEN;
GPIOA->MODER = 0x00000000;
GPIOA->PUPDR = 0x00000000;
GPIOE->MODER = 0x00010000;
GPIOE->OTYPER = 0x0000;
GPIOE->PUPDR = 0x00000000;
GPIOE->ODR = 0x0100;
while(1){
GPIOE->ODR = GPIOA->IDR << 8;
}
}

[/c]

これが今回のプログラム。

while文の無限ループの中で GPIOAのIDRを8bit左にシフトしてGPIOEのODRに入れています。
ボタンはA0で、LEDはE8なのでIDRを8bit左シフトすることで ボタンのONOFFがちょうどLEDの出力になるようにしています。
(もちろん他のビットも一緒にシフトしているのでもし、他のところにもボタンがあったらODRに反映されます。今回は無視しています)

今回はあっさりと終了

コメントを残す