#include "stm32f4xx.h"
void GPIO_Konf(void)
{
GPIO_InitTypeDef gpio;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
gpio.GPIO_Pin = GPIO_Pin_1;
gpio.GPIO_Mode = GPIO_Mode_OUT;
gpio.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOE, &gpio);
}
void Przerwanie (void) {
GPIO_InitTypeDef gpio;
NVIC_InitTypeDef nvic;
EXTI_InitTypeDef exti;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG|RCC_APB2Periph_EXTIT, ENABLE);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD, EXTI_PinSource0);
gpio.GPIO_Pin = GPIO_Pin_0;
gpio.GPIO_Mode = GPIO_Mode_IN;
gpio.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOD, &gpio);
exti.EXTI_Line = EXTI_Line0;
exti.EXTI_LineCmd = ENABLE;
exti.EXTI_Mode = EXTI_Mode_Interrupt;
exti.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
EXTI_Init(&exti);
nvic.NVIC_IRQChannel = EXTI0_IRQn;
nvic.NVIC_IRQChannelPreemptionPriority = 0x00;
nvic.NVIC_IRQChannelSubPriority = 0x00;
nvic.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvic);
}
void EXTI0_IRQHandler(void) {
if (EXTI_GetITStatus(EXTI_Line0) != RESET) {
GPIO_SetBits(GPIOE, GPIO_Pin_1);
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
int main(void)
{
GPIO_Konf();
Przerwanie();
while(1){
}
}
Witam
Mam problem z działaniem przerwań zewnętrznych. Używam STM32F407 na płytce Discovery i chciałem się nauczyć obsługi biblioteki Standard Peripheral Library. Napisałem ten kod, wszystko się kompiluje bez błędów ale dioda nr.1 podpięta do portu E nie świeci się po wciśnięciu przycisku. Myślałem że trzeba wywołać funkcję EXTI0_IRQHandler() gdzieś w funkcji main() na przykład w pętli while ale widzę, że w kursie na forbocie ta funkcja też nie jest nigdzie wywoływana. Układ z przyciskiem i diodą jest zmontowany poprawnie. Będę wdzieczny za wszelkie wskazówki.