スイッチを追加する。

STM32マイコン徹底入門 (TECH I Processor)

STM32マイコン徹底入門 (TECH I Processor)

かっちまいました。
英語のデータシート読むの疲れたので。

2週間ばかり放置していましたが、再開してまずはスイッチを実装します。
PA12が開いているのでここをスイッチとします。

#define SWITCH_LED              GPIO_Pin_12

と定義。

USERBUTTONの初期設定を参考にすると、

  GPIO_InitStructure.GPIO_Pin = SWITCH_LED;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_init()にずらずらっと書くと見にくいので、GPIO_InitStructure.の構造体にそれぞれの要素を格納?する。
サンプルコードには、Speedを設定していましたが、本では無いのでコメントアウトしてみる。
GPIO_PuPdはプルアップ、プルダウン抵抗の設定?
でも、GIPO_Modeで設定するんじゃないの?


STM32L1XXXX Standard Peripherals Firmware Library

を参照すると、GPIO_Modeは、

GPIO_Mode_IN  GPIO Input Mode 
GPIO_Mode_OUT  GPIO Output Mode 
GPIO_Mode_AF  GPIO Alternate function Mode 
GPIO_Mode_AN  GPIO Analog Mode 

GPIO_PUPDは、

GPIO_PuPd_NOPULL   
GPIO_PuPd_UP   
GPIO_PuPd_DOWN   

と定義されています。
ようは、別々に設定できるみたいですね。
出力のときも、プルアップできるというわけではなさそうなにおいはする。


LD_BLUE_GPIO_PIN3をスイッチオンで点灯させると、


expression must be a modifiable lvalue

というエラーが出て途方にくれましたが、

if (GPIO_ReadInputDataBit(GPIOA,SWITCH_LED) = 0)

代入式になってただけです。正しくは、

    if (GPIO_ReadInputDataBit(GPIOA,SWITCH_LED) == 0)
      GPIO_LOW(GPIOA, LD_BLUE_GPIO_PIN3);
    else
      GPIO_HIGH(GPIOA, LD_BLUE_GPIO_PIN3);


GPIO_ReadInputDataBitでビットごとの情報を読み取れます。
PICだともっと短く記述できるのにとか思ったら負けです。


スイッチ実装までいけました。
なんとかPICぐらいには使いこなせそうかな・・・


RCCとかいまだに呪文な部分があるので、早めに把握したい。
C言語に対しては多少アレルギーぬけてきた。



USERBUTTONはプルダウンなので、プルダウンにします。