Всем привет! Разбираюсь с платкой 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) в эом же проекте прекрасно работают В чем тут может быть дело? Может я чего упустил ?
|