티스토리 뷰

반응형

3. TIM(Timer) Interrupt

           -이번 장은 Timer Interrupt에 대해 배운다.

           -Timer Interrupt는 주로 일정 시간마다 실행되어야 하는 소스가 있을 시 사용한다

           -아래 예제는 TIM10을 이용하여 1초마다 PG13LED On Off

 

CUBE MX 설정

Timer Interrupt가 발생하면 PG13이 켜지고 꺼지도록 PG13도 위와 같이 설정한다.


현재 Clock Configuration 상태는 위와 같을 것이다 기본 셋팅으로 예제를 돌릴 것이므로 빨간부분(APB2 timer clocks)가 위와 같다면 건드릴 필요없다.



NVIC Settings에서는 모든 인터럽트의 허용 여부를 설정할 수 있다.

 

Prescaler(PSC-16 bits value): TIM10APB2 CLK을 사용한다(DS9405 데이터시트의 block diagram 참고) 현재 APB2 Timer clockprescaler 16,000을 해준 것이다 (왜 위의 값은 15,999인데 16,000이냐면 링크 RM0090 데이터시트의 TIMx->PSC 레지스터 참고하면 적어준 값에 1을 더해준 값이 원하는 prescaler값이라고 나와있다)

Prescaler 0~65535의 값이 가능하다.

 

Counter Period: 몇 클럭을 카운터 하는지 설정하는 곳이며 현재 1000번을 센다

16Mhz / 16000 = 1Khz 이므로 1 카운터당 1ms 이다 그러므로 1000번은 1000ms = 1sec 이다

 

Sorce Code

/* USER CODE BEGIN 2 */

  HAL_TIM_Base_Start_IT(&htim10);

  /* USER CODE END 2 */

 

/* USER CODE BEGIN 4 */

 

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

  if(htim == &htim10){

     HAL_GPIO_TogglePin(GPIOG,GPIO_PIN_13);

  }

}

/* USER CODE END 4 */

실행 결과

PG13LED 1초마다 깜빡인다




반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함