아래 글은 STM32F411RE User Manual, Datasheet, Reference Manual를 기준으로 작성되었습니다.
사용 IDE : STM32CubeIDE
STM32CubeIDE는 HAL Driver라는 ARM 용 API를 사용합니다.
GPIO 출력관련 HAL_DRIVER 함수는 stm32cubeide 프로젝트 생성시
STM32F4xx_HAL_Driver -> stm32f4xx_hal_gpio.c에서 확인할수 있다.
1) HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
-> GPIOx의 Pin의 상태를 설정한다.
매개변수 설명
- GPIOx : 포트 지정
- GPIO_Pin : 핀 번호 지정
- PinState : 핀 상태(SET or RESET)
2) HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
-> GPIO의 상태를 반전(Toggle)시킨다.
매개변수 설명
- GPIOx : 포트 지정
- GPIO_Pin : 핀 번호 지정
3)HAL_GPIO_ReadPin
※ 사용 핀
1. PA5 : USER LED(LD2)
2, PC13 : USER PUSH BUTTON
1). USER BUTTON에 따라 USER LED2 토글
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_Delay(500);
2) USER BUTTON 클릭 시 입력 값에 따라 USER LED2 토글
GPIO_PinState isSet;
isSet = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13);
if(isSet == GPIO_PIN_RESET) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
else HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
위는 GPIO_PinState 구조체이다.
typedef enum
{
GPIO_PIN_RESET = 0,
GPIO_PIN_SET
}GPIO_PinState;
3) USER BUTTON 클릭 시 EXTI Interrupt 발생하여 USER LED2 토글
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_13){
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
}
}
/* USER CODE END 4 */
EXTI 인터럽트 발생 시 내부 인터럽트 핸들러(서비스 루틴) 발생
해당 핸들러에서 EXTI 콜백 함수를 수행하여 해당 핀에 대한 인터럽트를 수행한다.
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
/* EXTI line interrupt detected */
if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)
{
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
HAL_GPIO_EXTI_Callback(GPIO_Pin);
}
}
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(GPIO_Pin);
/* NOTE: This function Should not be modified, when the callback is needed,
the HAL_GPIO_EXTI_Callback could be implemented in the user file
*/
}
#define UNUSED(X) (void)X /* To avoid gcc/g++ warnings */
'Stm32 > 실제 구동(stm32cubeide)' 카테고리의 다른 글
ADC Multi Channel - Joy Stick (0) | 2024.07.10 |
---|---|
UART 실습[2] (0) | 2024.06.30 |
Timer Interrupt (0) | 2024.06.18 |
UART (Polling, Interrupt , DMA) [HAL-DRIVER 이용] (0) | 2024.05.08 |
[1]GPIO 입출력 레지스터 직접 제어 (0) | 2024.05.02 |