Всем привет!
Разбираюсь с платкой STM32DISCOVERY
Там имеется кнопка которая подключена к порту PA0
Надо сделать чтоб по нажатию происходило прерывание
Пользуюсь библиотекой STM32F10x_StdPeriphDiver (CMSIS)
Я делаю так:
1) В подключенном к проекту файле startup_stm32f10x_md_vl.s есть строка DCD EXTI0_IRQHandler ; EXTI Line 0
поэтому в программе вставляю обработчик void EXTI0_IRQHandler(void)
2) Затем настраиваю порт PA0 как вход подтянутый к нулю
3)Включаю тактирование RCC_APB2Periph_GPIOA порта A
4)Тут же включаю тактирование RCC_APB2Periph_AFIO, так как это альтернативная фунция порта
5) Настраиваю блок EXTI и разрешаю прерывание в NVIC:
void EXTI_INIT(void)
{
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //говорим что вывод PA0 используется как внешний вывод прерывания
GPIO_EventOutputConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //неуверен что это нужно ???
EXTI_InitStructure.EXTI_Line = 0; //используем линию 0 (она для портов PA0 - PG0)
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //режим хардварного прерывания
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //прерывание по нарастанию импульса
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //??? это я вообще непонял зачем нужно ???
EXTI_Init(&EXTI_InitStructure); //передаем настройку в функцию инициализации
EnableIRQ(EXTI0_IRQn); //разрешаем прерывание в NVIC //использую линию EXTI0_IRQn так как она ля портов PA0-PG0
}
Все сделал но прерывание не срабатывает ?
Другие прерывания (от USART и от SYSTICK) в эом же проекте прекрасно работают
В чем тут может быть дело? Может я чего упустил ?