Home > Study > C Language > ARM System Programming > [ex42] #4 듀얼 타이머 기반 LED 깜빡임 제어 및 UART 주기 출력 실습

[ex42] #4 듀얼 타이머 기반 LED 깜빡임 제어 및 UART 주기 출력 실습
Study Language

문제 설명


UART로 입력된 숫자(1~9)를 이용하여 LED 깜빡임 속도를 조절하고, 일정 주기로 UART를 통해 점(.)을 출력하는 프로그램을 작성하라.

  • 숫자 1~9 입력 시 TIM4 타이머의 주기를 조절하여 LED 깜빡임 속도 변경
  • 숫자 0 입력 시 LED 깜빡임을 멈춤
  • TIM2를 이용해 일정 주기로 UART에 점(.) 출력
  • 두 타이머는 독립적으로 동작하며, 깜빡임과 출력이 동시에 이루어짐

정답 코드


void Main(void)
{
   Sys_Init();

   char x;
   int n;
   int timer_run = 0;
   int led = 0;
   TIM4_Repeat(10);
   TIM2_Repeat(100);

   for(;;)
   {
      x = Uart1_Get_Pressed();
      if(x != 0) 
      {
         n = x - '0';
         Uart1_Printf("%d", n);

         // 0? timer_run = 0;
         if (n==0)
         {
            timer_run = 0;
         }
         // 1~9? TIM4_Change_Value(n * 10); timer_run = 1
         else
         {
            TIM4_Change_Value(n * 10); 
            timer_run = 1;
         }
      }

      if(TIM4_Check_Timeout() && timer_run == 1)
      {
         //LED반전
         LED_Display(led ^= 1);
      }
      
      if(TIM2_Check_Timeout())
      {
         Uart1_Printf(".");
      }  
   }
}

메모


printf 내부의 \n 습관화 필요