HAL Driver 중에 GPIO에 대해서 소개하겠습니다.

 

 

stm32f1xx_hal_gpio.c

 

 

  • void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)

      CubeMX로 생성한 코드는 아래와 같이 GPIOx 페리페럴을 초기화한다.

 

      GPIO Mode

          GPIO_MODE_INPUT: 입력모드

          GPIO_MODE_OUTPUT_PP: 출력 (Push Pull) 모드

          GPIO_MODE_OUTPUT_OD: 출력 (Open Drain) 모드

          GPIO_MODE_AF_PP: 대체 기능(Alternate Function), (Push Pull)모드

          GPIO_MODE_AF_OD: 대체 기능(Alternate Function), (Open Drain)모드

 

          GPIO_MODE_ANALOG: 아날로그 모드

 

          GPIO_MODE_IT_RISING: 외부 인터럽트(External Interrupt)모드, Rising Edge

          GPIO_MODE_IT_FALLING: 외부 인터럽트(External Interrupt)모드, Falling Edge

          GPIO_MODE_IT_RISING_FALLING: 외부 인터럽트(External Interrupt)모드, Rising & Falling Edge

          

          GPIO_MODE_EVT_RISING: 외부 이벤트(External Event)모드, Rising Edge

          GPIO_MODE_EVT_FALLING: 외부 이벤트(External Event)모드, Falling Edge

          GPIO_MODE_EVT_RISING_FALLING: 외부 이벤트(External Event)모드, Rising & Falling Edge

            * Event모드는 인터럽트 발생시키지 않고 저전력모드에서 Wake-up하는데 사용된다.

          

      GPIO Pull

          GPIO_NOPULL

          GPIO_PULLUP

          GPIO_PULLDOWN

 

      GPIO Speed

          GPIO_SPEED_FREQ_LOW

          GPIO_SPEED_FREQ_MEDIUM

          GPIO_SPEED_FREQ_HIGH

/* GPIO 초기화 */
void MX_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    /* GPIOD APB2 Clock ENABLE */
    __HAL_RCC_GPIOD_CLK_ENABLE();
    
    /* Configure GPIO pins : PD13 PDPin */
    GPIO_InitStruct.Pin = GPIO_PIN_13;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
    
    /* 외부 인터럽트(EXTI) 설정 */
    HAL_NVIC_SetPriority(EXTI9_5_IRQn, 1, 0);
    HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
}

 

  • void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)

      GPIO 설정을 초기화 한다

 

  • void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

      GPIOx의 Pin의 상태를 설정한다.

      GPIO_PinState에는 GPIO_PIN_RESET(0) 과 GPIO_PIN_SET(1) 이 있다.     

/* HAL_GPIO_WritePin 예시 */
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET); // GPIO OUTPUT LOW
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_SET);   // GPIO OUTPUT HIGH

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, 0); // GPIO OUTPUT LOW
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, 1); // GPIO OUTPUT HIGH

 

  • GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

      GPIOx의 GPIO_Pin의 상태를 가져온다. 이때 GPIO Pin의 mode는 GPIO_MODE_INPUT 이어야 한다.

GPIO_PinState state;

state = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_5); // GPIOE5 의 상태를 읽는다

 

  • void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

      GPIO의 상태를 반전(Toggle)시킨다.

HAL_GPIO_TogglePin(GPIOE, GPIO_Pin_5); // GPIOE5 핀의 출력 상태를 반전시킨다.

 

  • HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

      GPIO Pin의 설정을 고정시킨다.

반응형

+ Recent posts