wojtek327

Untitled

Nov 26th, 2020
436
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "stm32f10x.h"
  2.  
  3. #define PinDioda        GPIO_Pin_5
  4. #define PinPrzycisk     GPIO_Pin_13
  5. #define LineDioda       GPIOA
  6. #define LinePrzycisk    GPIOC
  7. #define ClockGPIOA      RCC_APB2Periph_GPIOA
  8. #define ClockGPIOC      RCC_APB2Periph_GPIOC
  9.  
  10. void NVIC_EXTIInit(void);
  11. void GPIOInit(void);
  12. void EXTI15_10_IRQHandler(void);
  13.  
  14. volatile int zapal = 0;
  15.  
  16. int main(void)
  17. {
  18.  GPIOInit();
  19.  NVIC_EXTIInit();
  20.  
  21.  while (1) {
  22.  }
  23. }
  24.  
  25. void NVIC_EXTIInit(void)
  26. {
  27.  EXTI_InitTypeDef EXTIInit;
  28.  NVIC_InitTypeDef NVICInit;
  29.  
  30.  //Wybór konfigurowanego przerwania
  31.  NVICInit.NVIC_IRQChannel = EXTI15_10_IRQn;
  32.  //Priorytet grupowy
  33.  NVICInit.NVIC_IRQChannelPreemptionPriority = 0x00;
  34.  //Podpriorytet
  35.  NVICInit.NVIC_IRQChannelSubPriority = 0x00;
  36.  //Włączenie obsługi
  37.  NVICInit.NVIC_IRQChannelCmd = ENABLE;
  38.  NVIC_Init(&NVICInit);
  39.  
  40.  //Ustawienie źródła przerwania
  41.  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
  42.  
  43.  //EXTI_StructInit(&EXTIInit);
  44.  
  45.  //Wybór linii 13
  46.  EXTIInit.EXTI_Line = EXTI_Line13;
  47.  //Ustawienie generowanego przerwania, możliwe jest wybranie zdarzenia
  48.  EXTIInit.EXTI_Mode = EXTI_Mode_Interrupt;
  49.  //Wyzwolenie zboczem opadającym, bo przycisk zwarty do masy
  50.  EXTIInit.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
  51.  //Włączenie przerwania
  52.  EXTIInit.EXTI_LineCmd = ENABLE;
  53.  EXTI_Init(&EXTIInit);
  54. }
  55.  
  56. //Obsługa przerwania
  57. void EXTI15_10_IRQHandler()
  58. {
  59.  //Zidentyfikowanie źródła przerwania
  60.  if (EXTI_GetITStatus(EXTI_Line13) != RESET)
  61.  {
  62.   //Podanie głównego kodu wykonywanego w procedurze obsługi przerwania
  63.   //Jeśli przycisk został wciśnięty
  64.  
  65.   if ((GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0) && (zapal == 0))
  66.   {
  67.    GPIO_SetBits(GPIOA, GPIO_Pin_5);
  68.    zapal = 1;
  69.   }
  70.   else if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0)
  71.   {
  72.    GPIO_ResetBits(GPIOA, GPIO_Pin_5);
  73.    zapal = 0;
  74.   }
  75.  
  76.   //Koniec wpisywania głównego kodu wykonywanego w przerwaniu
  77.   //Wyzerowanie flagi obsługi przerwania
  78.   EXTI_ClearITPendingBit(EXTI_Line13);
  79.  }
  80. }
  81.  
  82. //Inicjalizacja pinów dla przycisku i diody
  83. void GPIOInit(void)
  84. {
  85.  GPIO_InitTypeDef GpioInit;
  86.  
  87.  RCC_APB2PeriphClockCmd(ClockGPIOA, ENABLE);
  88.  RCC_APB2PeriphClockCmd(ClockGPIOC, ENABLE);
  89.  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  90.  
  91.  GPIO_StructInit(&GpioInit);
  92.  GpioInit.GPIO_Pin = PinDioda;
  93.  GpioInit.GPIO_Mode = GPIO_Mode_Out_PP;
  94.  GPIO_Init(LineDioda, &GpioInit);
  95.  
  96.  GpioInit.GPIO_Pin = PinPrzycisk;
  97.  GpioInit.GPIO_Mode = GPIO_Mode_IPU;
  98.  GPIO_Init(LinePrzycisk, &GpioInit);
  99. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×