Использование внешнего прерывания на порту B stm32f030

Я использую плату обнаружения STM32F0308. Я хочу использовать внешнее прерывание на PIN11 PORTB. Проблема в том, что я не могу вызвать PORTB. Микроконтроллер по-прежнему использует PIN11 PORTA. Я знаю, что контакты портов соединены вместе, но я указываю, что PORTB по-прежнему микро использует PORTA. Я думаю, что в этой строке кода есть какая-то проблема

SYSCFG->EXTICR[3] = SYSCFG_EXTICR3_EXTI11_PB;  

Вот код

#include"stm32f0xx.h"
volatile int portBPin10Counter;

void EXTI4_15_IRQHandler(void)
{
  if(EXTI->PR & EXTI_PR_PR11)
  {
     EXTI->PR |= EXTI_PR_PR11;
     portBPin10Counter++;
  }
}

int main(void)
{
  RCC->AHBENR |=RCC_AHBENR_GPIOBEN;

  GPIOB->MODER &= ~GPIO_MODER_MODER11;
  GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR11;

  SYSCFG->EXTICR[3] =SYSCFG_EXTICR3_EXTI11_PB;

  EXTI->RTSR |= EXTI_RTSR_TR11;
  EXTI->IMR |= EXTI_IMR_MR11;

  NVIC_EnableIRQ(EXTI4_15_IRQn);
  NVIC_SetPriority(EXTI4_15_IRQn,1);

  while(1)
  {
  }
}

person Vikas Singh    schedule 07.11.2017    source источник
comment
Вы можете посмотреть, как это делают HAL.   -  person JMA    schedule 07.11.2017


Ответы (1)


Вам нужно включить часы для SYSCFG. У меня нет файлов F0 под рукой, просто смотрю руководство:

RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;

В противном случае запись в SYSCFG->EXTICR не имеет никакого эффекта.

person A.K.    schedule 07.11.2017