2

我正在使用 STM32F0308 探索板。我想在 PORTB 的 PIN11 上使用外部中断。问题是我无法调用 PORTB。单片机依然使用PORTA的PIN11。我知道端口的引脚被组合在一起,但我指定 PORTB 仍然是 micro 正在使用 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)
  {
  }
}
4

1 回答 1

2

您需要为 SYSCFG 启用时钟。我手头没有F0文件,只看手册:

RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;

否则,写入SYSCFG->EXTICR无效。

于 2017-11-07T19:21:58.433 回答