вторник, 12 сентября 2017 г.

Зажигаем/тушим светодиод по кнопке

#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

int main(void)
{
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //Включаем тактирование порта A

   GPIO_InitTypeDef led; // светодиод
   led.GPIO_Speed = GPIO_Speed_50MHz;
   led.GPIO_Mode  = GPIO_Mode_Out_PP;
   led.GPIO_Pin   = GPIO_Pin_0;
   GPIO_Init(GPIOA, &led);

   GPIO_InitTypeDef button; // кнопка
   button.GPIO_Speed = GPIO_Speed_50MHz;
   button.GPIO_Mode  = GPIO_Mode_IPU;
   button.GPIO_Pin   = GPIO_Pin_1;
   GPIO_Init(GPIOA, &button);

   //GPIO_ResetBits(GPIOA, GPIO_Pin_0);

    while(1)
    {
      if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == 0)
      {
          if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0) // проверяем состояние светодиода
          {
              GPIO_SetBits(GPIOA, GPIO_Pin_0); // зажигаем светодиод
          }
          else
          {
              GPIO_ResetBits(GPIOA, GPIO_Pin_0); // тушим светодиод
          }
      }
    }
}

! Не всегда светодиод меняет свое состояние по кнопке из-за дребезга контактов. Нужно с ним как-то бороться.