Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F103RB прерывания от GPIO
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
MiklPolikov
Не работают прерывания от GPIO в STM32F103RB. Под отладкой вижу что регистр IDR меняется, в EXTI PR устанавливается флаг.
В обработчик программа не попадает.
Наверно, я что-то забыл включить. Подскажите пожалуйста, что.

Заранее спасибо !
CODE
//тактирование
RCC->APB2ENR |=RCC_APB2ENR_AFIOEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;

//вход настроен как вход с подтяжкой
GPIOC->CRL &= ~GPIO_CRL_MODE0;
GPIOC->CRL &= ~GPIO_CRL_CNF0_0;
GPIOC->CRL &= ~GPIO_CRL_CNF1_0;
GPIOC->CRL &= ~GPIO_CRL_CNF2_0;

//настройка прерывания
AFIO->EXTICR[0]|=AFIO_EXTICR1_EXTI0_PC;
EXTI->IMR |= (1<<0);
EXTI->FTSR |= (1<<0);
EXTI->RTSR |= (1<<0);
NVIC_SetPriority(EXTI0_IRQn , 10);
NVIC_EnableIRQ(EXTI0_IRQn );
__enable_irq();


//функция обработчик
void EXTI0_IRQHandler(void)
{
while(1){}
}
Zeal0t
Чистый C или C++ ?
Если ++ то обработчик нужно делать как extern "C"

Это к 3 разным ногам получается

GPIOC->CRL &= ~GPIO_CRL_MODE0;
GPIOC->CRL &= ~GPIO_CRL_CNF0_0;
GPIOC->CRL &= ~GPIO_CRL_CNF1_0;
GPIOC->CRL &= ~GPIO_CRL_CNF2_0;

по моему вот так нужно для 0 пина

GPIOC->CRL &= ~(GPIO_CRL_CNF0 | GPIO_CRL_MODE0); // clear
GPIOC->CRL |= (GPIO_CRL_CNF0_1); // in PP

ну и еще можно после этого
GPIOС->BSRR = GPIO_BSRR_BS0;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.