реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Не могу понять почему не работают EXTINT, STM32F103
mempfis_
сообщение Jun 23 2015, 07:54
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Всем добрый день.

Есть проблема с настройкой внешних прерываний в STM32F103
Необходимо по заднему фронту кнопки зажигать/гасить светодиод. Кнопка висит на PB15.
Светодиод рабочий на 100 процентов также как и кнопка.
Код обработчика прерываний и настройки внешних прерываний.

Код
void EXTI3_IRQHandler(void)
{
  static unsigned int led_stat = 0;
  
  //if(EXTI->PR & EXTI_IMR_MR15)
  {
    EXTI->PR = EXTI_IMR_MR15; //clear pendig interrupt
    if(led_stat == 0)
    {
      led_stat = 1;
      SLED_SET(SLED_0_MSK);
    }
    else
    {
      led_stat = 0;
      SLED_CLR(SLED_0_MSK);
    }
  }
  
  _putcharDebug('\r');
  _putcharDebug('e');
  _putcharDebug('\n');
  
}


void extIntInit(void)
{
  RCC->APB2ENR |= RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPBEN;
  __no_operation();
  
  
  AFIO->EXTICR[3] = AFIO_EXTICR4_EXTI15_PB;
  EXTI->FTSR = EXTI_FTSR_TR15; //falling edge
  //EXTI->RTSR = SW2_EXT_INT_BIT_MSK; //risig edge
  
  NVIC_SetPriority(EXTI3_IRQn, EXTI3_IRQ_PRIO);
  NVIC_EnableIRQ(EXTI3_IRQn);
  
  EXTI->IMR = EXTI_IMR_MR15;
  //EXTI->EMR = EXTI_IMR_MR15;
    
}


Программа не большая - содержит 3 источника прерываний (UART1, TIM3, EXT3). UART1 и TIM3 работают без проблем.
Есть задача сканирования кнопок по таймеру.
При опросе кнопки в задаче сканирования кнопок зажигаются 3 светодиода - т.о. пин PB15 рабочий.
4й светодиод проверен и должен зажигаться только по прерыванию. Код настройки внешних прерываний составлен на основе документации, также сравнил с примерами из интернета и тем, что генерирует stm32Cube. Различий я не вижу.
При нажатии кнопки PB15 программа не виснет и не перезагружается, но и прерывание EXT3 не генерируется.

Может кто что подскажет по настройкам. Спасибо.



Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 23 2015, 08:15
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Файл случайно не *.cpp?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 23 2015, 08:22
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(AHTOXA @ Jun 23 2015, 11:15) *
Файл случайно не *.cpp?


Файл не cpp. Проект создан в IAR 5.40 и установлен Languadge C. Я не думаю что проблема в этом т.к. другие прерывания работают. Мне кажется проблема в настройках, но я уже 2 дня не могу разобраться в чём.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 23 2015, 08:53
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Разве пин 15 вводится на EXTI3?
Может, EXTI15_10_IRQHandler нужен (или как там его)?
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 23 2015, 09:00
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(adnega @ Jun 23 2015, 11:53) *
Разве пин 15 вводится на EXTI3?
Может, EXTI15_10_IRQHandler нужен (или как там его)?


Не пин 15 а PB15. По докам он относится к EXTI3.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 23 2015, 09:05
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(mempfis_ @ Jun 23 2015, 12:00) *
Не пин 15 а PB15. По докам он относится к EXTI3.

А у меня в доках английским-по-белому нарисовано, что к EXTI15.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 23 2015, 19:07
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(adnega @ Jun 23 2015, 11:53) *
Разве пин 15 вводится на EXTI3?
Может, EXTI15_10_IRQHandler нужен (или как там его)?


Спасибо. Вы были правы. Из-за спешки и невнимательности решил что exti3-0irqhandler отвечают за прерывания exti15-0. А за exti19-16 вектор exti15_10irqhandler. А ведь в самом файле с описанием векторов прерываний написано за какие exti отвечают конкретные хандлеры. Поспешиш людей насмешиш. Всем спасибо за помощь. Проблема полностью решена.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01395 секунд с 7
ELECTRONIX ©2004-2016