10. Physical Buttons
개요
물리적 버튼은 애플리케이션 개발 단계에서 TouchGFX Designer에서의 트리거로 사용할 수 있는 외부 이벤트 역할을 하거나, 애플리케이션 백엔드에서 이벤트로 사용될 수 있습니다.
Note
목표
이 섹션의 목표는 후속 TouchGFX HAL 및 애플리케이션 개발에서 사용할 수 있는 코드를 개발하는 것입니다.
확인
다음은 이 섹션에서 확인해야 할 사항입니다.
확인사항 | 확인근거 |
---|---|
MCU의 구성 여부 | MCU GPIO는 연결된 물리적 버튼의 상태를 판독하도록 구성되어야 합니다. |
연결 GPIO의 판독 가능 여부 | GPIO에서 물리적 버튼 상태를 판독하기 위한 코드가 개발되어 있으면 이 코드를 후속 TouchGFX HAL 개발에서 사용할 수 있습니다. |
읽기 작업이 예상대로 수행되는지 여부 | 애플리케이션 렌더링 시간에 폴링 시간이 포함되어 있습니다. 폴링에 너무 많은 시간이 소요되는 경우 다른 스레드로 옮기거나 인터럽트 기반으로 만들어야 합니다. |
전제 조건
- 물리적 버튼은 MCU의 GPIO에 연결되어야 합니다.
실행
아래 그림은 회로도가 물리적 버튼에서 어떻게 보이고, MCU에 어떻게 연결되어 있는지를 보여줍니다.
STM32CubeMX에서는 GPIO Port C Pin 13(PC13)을 System Core 범주의 GPIO 섹션에서 입력으로 구성할 수 있습니다:
아래 대화 상자에는 GPIO에 대한 내부 풀다운이 구성되어 있습니다. 외부 풀다운 저항이 있는 경우(위 그림 참조)에는 이것이 필요하지 않습니다. 이 경우, "No pull-up and no pull-down"을 선택할 수 있습니다.
STM32CubeMX에서 생성된 코드는 그에 따라 적절한 GPIO 포트(들)를 설정하게 됩니다. 이제 입력 핀을 읽을 수 있습니다.
main.c
uint8_t key;
if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) != GPIO_PIN_RESET)
{
key = 1;
}
예상대로 성능이 발휘되는지 여부
TouchGFX 애플리케이션과 동일한 스레드에서 코드가 실행되는 경우, 1ms 내에 물리적 버튼의 상태를 폴링하는 것이 가능합니다. 그렇지 않으면 렌더링이 너무 지연됩니다. GPIO에 직접 연결된 버튼을 사용하는 경우에는 문제가 되지 않지만, 예를 들어 I2C나 이와 유사한 통신에서 시프트 레지스터를 사용하는 경우에는 문제가 될 수 있습니다. 샘플링 속도가 만족스럽지 않은 경우에는 이후 단계에서 코드를 별도의 작업으로 옮기거나 인터럽트 기반으로 만드는 방법을 고려해보십시오.