天天看點

【STM32】 GPIO_EXTILineConfig詳解

GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)函數

用于配置EXIT外部中斷/事件的GPIO中斷源,傳入的參數是GPIO和相應的IO口

官方源碼+個人注釋

/**
  * @brief  Selects the GPIO pin used as EXTI Line.
  * @param  GPIO_PortSource: selects the GPIO port to be used as source for EXTI lines.
  *   This parameter can be GPIO_PortSourceGPIOx where x can be (A..G).
  * @param  GPIO_PinSource: specifies the EXTI line to be configured.
  *   This parameter can be GPIO_PinSourcex where x can be (0..15).
  * @retval None
  */
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
{
  uint32_t tmp = 0x00;
  /* Check the parameters */
  assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource));
  assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));

  /*将外部中斷配置寄存器對應4位清除*/
  tmp = ((uint32_t)0x0F) << (0x04 * (GPIO_PinSource & (uint8_t)0x03));
  AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;

  /*為外部中斷配置寄存器對應4位指派*/
  AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((uint32_t)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (uint8_t)0x03)));
}
           

外部中斷配置寄存器有4個,每個寄存器可以配置4個IO口

【STM32】 GPIO_EXTILineConfig詳解

每個GPIO都有16個IO口,每個外部中斷配置寄存器隻能配置4個IO口,是以16個IO口分為四組

【STM32】 GPIO_EXTILineConfig詳解

紅色框表示寄存器的序号,藍色框内表示IO口在寄存器中的位置

 tmp = ((uint32_t)0x0F) << (0x04 * (GPIO_PinSource & (uint8_t)0x03));

AFIO->EXTICR[GPIO_PinSource >> 0x02]

以上兩個語句表示将寄存器對應四位清除

以下語句表示将指定值指派給寄存器對應四位

AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((uint32_t)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (uint8_t)0x03)));

繼續閱讀