Jump to content
mappy89

Код Во Внешнем Прерывании Не Срабатывает После Первого Выполнения

Recommended Posts

Кто работал в кейле с платой STM32F4xx, помогите понять, что я делаю не так =) Хочу помигать диодами, юзая внешее прерывание на кнопке PA0. Использую функции из библиотек "STM32F4xx.h", "EXTI_STM32F4xx.h", "GPIO_STM32F4xx.h".

Прерывание срабатывает, однако код внутри тупо зависает на первой итерации и дальше не идёт (флаг прерывание не забываю сбрасывать). Помогите определить, в чём проблема

Заранее спасибо


[size=5]#include <stdio.h>
#include <stdint.h>
#include "STM32F4xx.h"
#include "EXTI_STM32F4xx.h"
#include "GPIO_STM32F4xx.h"

void Delay(uint16_t Val)
{
for( ; Val != 0; Val--)
{
int look = Val;
__nop();
}
}
/*----------------------------------------------------------------------------
Main function
*----------------------------------------------------------------------------*/
int main (void) {
// SystemInit();

SystemCoreClockUpdate();					 /* Get Core Clock Frequency */
if (SysTick_Config(SystemCoreClock / 1000)) { /* SysTick 1 msec interrupts */
while (1);								 /* Capture error			 */
}

//тактируем ноги со светодиодами: PG13 и PG 14
GPIO_PortClock (GPIOG, true);
GPIO_PinConfigure(GPIOG, 13,GPIO_MODE_OUTPUT, GPIO_OUTPUT_PUSH_PULL, GPIO_OUTPUT_SPEED_2MHz, GPIO_PULL_DOWN);
GPIO_PinConfigure(GPIOG, 14,GPIO_MODE_OUTPUT, GPIO_OUTPUT_PUSH_PULL, GPIO_OUTPUT_SPEED_2MHz, GPIO_PULL_DOWN);

//тактируем ногу с кнопкой PA0
GPIO_PortClock (GPIOA, true);
GPIO_PinConfigure(GPIOA, 0,GPIO_MODE_INPUT, GPIO_OUTPUT_PUSH_PULL ,GPIO_OUTPUT_SPEED_2MHz, GPIO_PULL_DOWN);

//настраиваем регистры внешнего прерывания
EXTI_Setup();
EXTI_ConfigurePin (0, EXTI_PIN_PA);
EXTI_ConfigureLine (0, EXTI_MODE_INTERRUPT, EXTI_TRIGGER_RISING);

//настраиваем приоритет
NVIC_SetPriority (EXTI0_IRQn, 2);

//включаем переферию
NVIC_EnableIRQ (EXTI0_IRQn);
//включ прерывание
__enable_irq();

while(1) {								 /* Loop forever			 */


}
}
void EXTI0_IRQHandler(void) //обработчик прерывания
{
static volatile int i=0;

if (!i)
GPIO_PinWrite(GPIOG, 14, 1); //виснет на этом месте, жиод загорается и всё
else
GPIO_PinWrite(GPIOG, 14, 0);

i=1-i;



EXTI_ClearPendingBit(0);

}[/size]

Edited by admin

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...