Перейти к содержанию
    

Не срабатывает внешнее прерывание STM32F446

 

Всех приветствую. Проблема такая: при нажатии кнопки собственно нет захода в обработчик. При этом в дебаге вижу появление флага в PR13 в PR регистре. Прикрепил состояния регистров EXTI и SYSCFG.

Инициализация прерывания

void interrupt_init () {
	RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN;
	RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
	GPIOC->PUPDR |= GPIO_PUPDR_PUPDR13_1;

	SYSCFG->EXTICR[3] &= ~SYSCFG_EXTICR4_EXTI13;
	SYSCFG->EXTICR[3] |= SYSCFG_EXTICR4_EXTI13_PC;
	
	EXTI->FTSR |= EXTI_FTSR_TR13;
	EXTI->RTSR |= EXTI_RTSR_TR13;

	EXTI->IMR |= EXTI_IMR_IM13;

	__NVIC_EnableIRQ(EXTI3_IRQn);

}

Основной цикл и обработчик

int main(void)
{
	spi_init();	
	port_led_init();
	interrupt_init(); 

	while (1) {
		GPIOA->ODR |= GPIO_ODR_OD5;
		GPIOA->ODR = 0;
	}
}

void EXTI3_IRQHandler (void) {
  
		EXTI->PR |= EXTI_PR_PR13;

		spi_write(0xAB);
		spi_write(0x14);		
		
		for (int i =0; i<1000000; ++i) {
			GPIOA->ODR |= GPIO_ODR_OD5;
	}
		for (int i =0; i<1000000; ++i) {
			GPIOA->ODR = 0;
	}
	
}

1.PNG

2.PNG

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

36 минут назад, AHTOXA сказал:

Вектор не тот. У вас же не третье, а тринадцатое прерывание.

 

 

Как не тот? Всего же 5 векторов для обработки внешних прерываний. 13ый порт идет на EXTI3_IRQn.

3.PNG

Изменено пользователем Cianid

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вместо EXTI3_IRQHandler нужно использовать EXTI15_10_IRQHandler и там внутри разбирать от 13 линии это запрос или нет

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 минут назад, Cianid сказал:

13ый порт идет на EXTI3_IRQn

Чисто спортивный интерес: какие рассуждения привели вас к этому выводу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, Сергей Борщ said:

Чисто спортивный интерес: какие рассуждения привели вас к этому выводу?

скорее всего от того, что настраивается как SYSCFG->EXTICR[3] значит и прерывание тоже 3-е ))

p.s. угадал )

Изменено пользователем Zeal0t

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, Сергей Борщ сказал:

Чисто спортивный интерес: какие рассуждения привели вас к этому выводу?

13ый пин выбирается для прерывания в SYSCFG_EXTICR4 регистре, подумал, что ему в соответствие ставится EXTI3_IRQn вектор.

Изменено пользователем Cianid

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, раз с вектором вроде разобрались, добавлю, что чистить прерывание нужно не так:

EXTI->PR |= EXTI_PR_PR13;

, а вот так:

EXTI->PR = EXTI_PR_PR13;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, AHTOXA сказал:

Ну, раз с вектором вроде разобрались, добавлю, что чистить прерывание нужно не так:


EXTI->PR |= EXTI_PR_PR13;

, а вот так:


EXTI->PR = EXTI_PR_PR13;

 

Спасибо. Заработало. Не совсем очевидна оказалась логика группировки 5-9 и 10-15 запросов в 1 регистр. А зачем обнулять именно весь регистр?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там все биты помечены как "rc_w1". То есть, очищаются записью единички, а запись нуля не меняет состояние бита.

Цитата

read/clear (rc_w1) Software can read as well as clear this bit by writing 1. Writing ‘0’ has no effect on the bit value.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

37 минут назад, AHTOXA сказал:

Там все биты помечены как "rc_w1". То есть, очищаются записью единички, а запись нуля не меняет состояние бита.

 

Понял. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...