10. [STM32F103 3.timer #2]

2020. 11. 16. 19:10STUDY/stm32f072,103

TIMER 잘 모르겠다.

 

일단 그냥 구동되는지 확인(인터럽트 방식)

 

1. timer2 를 이용한다(advaned timer가 아니라서) 

 

2. led on / off 하는 것으로 추가하여 오실로스코프로 파형을 측정

 

 

 

1. setting(그냥 timer2는 apb1 ubs이기 때문에 64MHz 기억하자)

 

 

2. timer2 사용한다고 설정(interrupt 방식)

-clock source : internal clock로 setting(하지않으면 아래 두개 그림처럼 error 뜸)

 

 

error 화면

 

 

 

error 화면

 

3. code generate(alt + k)

 

4. code 추가(led on/off) 

- interrupt start(main.c)

  HAL_TIM_Base_Start_IT(&htim2);

 

- led toggle(stm32f1xx_it.c)

HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);

 

 

 

 

5. compile -> download -> run(ctrl+b->f11->f8)

 

6. 확인

 

주파수 64MHz = 64,000,000Hz

Prescaler = 6400(실제 기입할때는 1을 빼줌 - 이유는 나중에 찾아봐야겠음)

Counter period = 10(실제 기입할때는 1을 빼줌 - 이유는 나중에 찾아봐야겠음)

 

계산식

 

64,000,000 / 6400 = 10000

 

freq. = 10000 / 10 = 1000Hz = 1KHz

 

사진상 주파수 500Hz는 led toggle 시키는 것으로 1ms 마다 toggle 된다 즉 1KHz가 너무 잘 나온다.

 

 

ps. timer에는 polling 방식과 interrup 방식 두개가 있는데 이 차이점을 알기 전에 일단 timer 동작하는지 보고 polling 방식도 test 할 예정이다. 

측정한 주파수가 500Hz나와서 왜 반이 나오지 생각했는데 toggle 시켜서 그런것으로 확인되어 설정 값대로 잘나오는것 확인하였다

그리고 1을 빼는것은 단순한것인데 다시 한번 찾아봐야겠다. 5까지 면 0,1,2,3,4,5 까지 가면 6이 되기 때문에 1을 빼지 않을까 한다.