개발/기술문의

LabVIEW/STM32 등 개발문의 -> jexe0716@gmail.com 으로 연락부탁드립니다.

STM32/HAL library

Systick / HAL_SYSTICK_Callback() 사용

jexe 2020. 10. 1. 22:10
반응형

STM32를 사용할 때 가장 만족하는 기능 중 하나가 Systick 이다.

Systick는 ARM Cortex-M에 지원하는 24bit Timer이다. 이녀석이 편리한 것은

CubeMX에서 내가 원하는 HCLK를 설정하면 알아서 Systick은 1ms 을 보장하는 세팅이 되어 있다.

그래서 일반 Timer와 달리, 이녀석을 통해 스케줄링을 설계한다.

 

아래의 글은 STM32F429ZI 에서 systick 사용하기 위한 예제이다.

 

Systick동작을 사용하기 위해서는 다음과 같은 코드 작성이 필요하다.

Core폴더-Src폴더-stm32f4xx_it.c 에 있는 void SysTick_Handler (void) 를 찾는다. 

주석 /* USER CODE BEGIN SysTick_IRQn 1 */ 아래에 HAL_SYSTICK_IRQHandler(); 를 작성한다.

(예전에는 그 부분이 자동코드생성되어 있었는데, 2019년 언젠가 갑자기 초기생성이 되지 않게 수정되었다. 그래서

반드시 이부분에 위 핸들러를 직접 적어줘야 동작한다. 이 부분을 놓쳐서 엄청 고생한 기억이 있다)

SysTick_Handler 수정

위 과정을 통해 우리는 HAL_SYSTICK_Callback 을 사용할 수 있게 된다.

이 함수는 1ms마다 인터럽트가 발생되어, 내가 원하는 스케줄링을 이 안에 만들 수 있다.

동작 검사를 위해 간단히 100ms마다 LED가 깜빡이게 작성해본다.

 

HAL_SYSTICK_Callback

위 코드를 컴파일하면 LED가 100ms마다 깜빡이는 것을 확인할 수 있다. 

 

100ms LED blink 동작

 

 

 

 

반응형

'STM32 > HAL library' 카테고리의 다른 글

I2C 통신을 이용한 DAC 제어  (0) 2021.01.14
DMA를 이용한 UART 통신  (0) 2020.12.30