[STM32F767] Systick Timer 활용

Wook's Notepad·2022년 4월 13일
0

Systick Timer를 활용해 0.5초마다 LED를 켰다 끄고, LED가 켜진 횟수를 count 하여 TFT-LCD상에 출력하는 간단한 프로그램을 구성해보았습니다.

Systick Timer에 대한 개념은 추후 추가

아래는 코드입니다.

#include "stm32f767xx.h"
#include "OK-STM767.h"

void SysTick_Handler(void);         /* SysTick interrupt function */

volatile unsigned int count = 0;
volatile unsigned int LED_flag = 0;

void SysTick_Handler(void)         /* SysTick interrupt function */
{
  LED_toggle();               // toggle LED
  LED_flag++;
  
  if(LED_flag % 2 == 1){
    count++;
    TFT_xy(21,15);
    TFT_unsigned_decimal(count,1,3);
  }
 }

int main(void)
{  
  Initialize_MCU();                     // initialize MCU and kit

  RCC->AHB1ENR |= 0x00000004;             // port C clock enable(GPIOCEN = 1)

  GPIOC->MODER &= 0xFFFFFCFF ;                  // set PC4(LED) to output
  GPIOC->MODER |= 0x00000100;
  GPIOC->ODR &= 0xFFFFFFEF;              // PC4(LED) = 0
  
  Delay_ms(50);               // wait for system stabilization
  Initialize_TFT_LCD();            // initialize TFT-LCD module

  TFT_string(1, 4, White,Magenta, " SysTick 타이머 인터럽트 이용 LED 점멸 ");
  TFT_string(1,10, White, Magenta, " 0.5초 간격으로 LED 점멸");
  TFT_string(1,15, Yellow, Magenta, "LED 깜빡거린 횟수 : 000");

  SysTick->LOAD  = 13499999;           //  0.5초 계산하기 :: 2Hz = 27MHz / ( 13499999 + 1 )
  SysTick->VAL    = 0;                    // SysTick Counter 초기화
  SysTick->CTRL  = 0x00000003;         // 216MHz/8 = 27MHz로 SysTick 타이머 초기 설정


  while(1){
      SysTick->LOAD = 13499999; //  0.5초 계산하기 :: 2Hz = 27MHz / ( 13499999 + 1 )     
  }
}

헤더파일은 위 키트 판매처에서 제공하는 헤더파일을 활용하였습니다.
0.5초마다 LED가 Toggle, 즉 점등 여부가 전환되기 때문에 LED가 켜진 횟수를 count 하기 위해서 LED_flag 라는 임의의 변수를 하나 만들었습니다.

Systick Timer의 counter가 0이 되어 인터럽트가 발생하면, Systick_Handler 내의 명령들이 수행되게 됩니다.

Systick_Handler 내부에 LED 점등 횟수를 계산하여 TFT_LCD상에 출력하는 코드를 추가해두었습니다.

LED_toggle 함수는 Exclusive OR 연산자 ^ 를 활용하여 특정 비트를 반전시키는 역할을 합니다.

Systick Timer와 TFT_LCD, GPIO에 대해 공부하면서 위 내용들을 묶어 연습해볼 수 있는 간단한 프로그램이었습니다 !

아래 블로그는 함께 공부하는 친구의 블로그입니다.
https://blog.naver.com/tiger1877

0개의 댓글