Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stm32f10x.h"
- #define PinDioda GPIO_Pin_5
- #define PinPrzycisk GPIO_Pin_13
- #define LineDioda GPIOA
- #define LinePrzycisk GPIOC
- #define ClockGPIOA RCC_APB2Periph_GPIOA
- #define ClockGPIOC RCC_APB2Periph_GPIOC
- void NVIC_EXTIInit(void);
- void GPIOInit(void);
- void EXTI15_10_IRQHandler(void);
- volatile int zapal = 0;
- int main(void)
- {
- GPIOInit();
- NVIC_EXTIInit();
- while (1) {
- }
- }
- void NVIC_EXTIInit(void)
- {
- EXTI_InitTypeDef EXTIInit;
- NVIC_InitTypeDef NVICInit;
- //Wybór konfigurowanego przerwania
- NVICInit.NVIC_IRQChannel = EXTI15_10_IRQn;
- //Priorytet grupowy
- NVICInit.NVIC_IRQChannelPreemptionPriority = 0x00;
- //Podpriorytet
- NVICInit.NVIC_IRQChannelSubPriority = 0x00;
- //Włączenie obsługi
- NVICInit.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVICInit);
- //Ustawienie źródła przerwania
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
- //EXTI_StructInit(&EXTIInit);
- //Wybór linii 13
- EXTIInit.EXTI_Line = EXTI_Line13;
- //Ustawienie generowanego przerwania, możliwe jest wybranie zdarzenia
- EXTIInit.EXTI_Mode = EXTI_Mode_Interrupt;
- //Wyzwolenie zboczem opadającym, bo przycisk zwarty do masy
- EXTIInit.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
- //Włączenie przerwania
- EXTIInit.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTIInit);
- }
- //Obsługa przerwania
- void EXTI15_10_IRQHandler()
- {
- //Zidentyfikowanie źródła przerwania
- if (EXTI_GetITStatus(EXTI_Line13) != RESET)
- {
- //Podanie głównego kodu wykonywanego w procedurze obsługi przerwania
- //Jeśli przycisk został wciśnięty
- if ((GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0) && (zapal == 0))
- {
- GPIO_SetBits(GPIOA, GPIO_Pin_5);
- zapal = 1;
- }
- else if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0)
- {
- GPIO_ResetBits(GPIOA, GPIO_Pin_5);
- zapal = 0;
- }
- //Koniec wpisywania głównego kodu wykonywanego w przerwaniu
- //Wyzerowanie flagi obsługi przerwania
- EXTI_ClearITPendingBit(EXTI_Line13);
- }
- }
- //Inicjalizacja pinów dla przycisku i diody
- void GPIOInit(void)
- {
- GPIO_InitTypeDef GpioInit;
- RCC_APB2PeriphClockCmd(ClockGPIOA, ENABLE);
- RCC_APB2PeriphClockCmd(ClockGPIOC, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
- GPIO_StructInit(&GpioInit);
- GpioInit.GPIO_Pin = PinDioda;
- GpioInit.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(LineDioda, &GpioInit);
- GpioInit.GPIO_Pin = PinPrzycisk;
- GpioInit.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(LinePrzycisk, &GpioInit);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement