HAL Driver 중에 GPIO에 대해서 소개하겠습니다.
stm32f1xx_hal_gpio.c
- HAL_GPIO_Init
- HAL_GPIO_DeInit
- HAL_GPIO_WritePin
- HAL_GPIO_ReadPin
- HAL_GPIO_TogglePin
- HAL_GPIO_LockPin
- 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의 설정을 고정시킨다.
'MCU > STM32:HAL' 카테고리의 다른 글
[STM32F]FSMC와 LCD (0) | 2021.02.28 |
---|---|
[STM32F]FSMC로 LCD(SSD1963) 제어하기 (2) | 2021.02.07 |
[STM32F][HAL] USART Interrupt (0) | 2020.12.23 |
[STM32F][HAL] DAC (Digital to Analog Converter) (0) | 2020.12.22 |
[STM32F][HAL] OUTPUT COMPARE 사용하기 (0) | 2020.06.01 |
[STM32F][HAL] USB CDC (Virtual Port Com) 사용하기 (1) | 2020.05.28 |
[STM32F][HAL] HAL_Delay (0) | 2020.05.21 |
[STM32F][HAL] ADC - ADC Calibration (4) | 2020.05.17 |