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