MCU/Learn STM32F103 basics
[stm32f103] 정확한 주기로 led 제어하기 - HAL_GetTick() 사용
mle21
2023. 9. 25. 06:00
반응형
led 제어만을 목적으로 하는 단순한 프로그램이 아니고서는 HAL_Delay 함수 사용은 자제하는 것이 좋다. 왜냐하면 HAL_Delay 함수 사용중에는 다른 작업을 할 수 없고 다른 작업이 많아서 지연이 발생할 경우 HAL_Delay 함수 실행 시점도 지연이 발생하기 때문이다. 좀 과장해서 설명하자면 500ms 마다 led가 점멸하도록 코딩했는데 지연으로 인해 1000ms 마다 led가 점멸할 수도 있다. 그래서 다른 작업에 영향을 주거나 받는 것이 최소화 될 수 있도록 아래와 같이 주로 코딩을 한다.
1. 기본 led 제어 설정은 아래를 참조하자.
[stm32f103] led 제어하기 - HAL_Delay() 사용
@@ GPIO_Output 설정과 HAL_Delay()를 사용하여 led를 제어해 보자. @@ 개발보드의 PC13에 led가 연결되어 있다. 1. 기본 cubemx 설정은 아래를 참조하자. [stm32f103] STM32CubeMX 필수 기본 설정 @@ 보드: stm32f103c8t6
t-shaped-person.tistory.com
@ HAL_GetTick() 함수를 사용하여 500ms 주기로 led 끄고 켜기
uint32_t before = HAL_GetTick();
while (1)
{
if(HAL_GetTick() - before >= 500)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
before = HAL_GetTick();
}
}
@@ 직전 실행 시간과 현재 시간의 차이를 매번 확인해서 실행하는 방식으로 다른 코드에서 일부 지연이 생겨도 led 제어 코드는 동일한 주기로 실행이 가능하다.
728x90