본문 바로가기

개발환경/STM32CubeMX

타이머 설정 - STM32F030F4P6

MCU는 STM32F030F4P6을 사용하였고 관련 데이터 시트는 아래 첨부했습니다.

STM32F030F4P6_Reference Manual.pdf
11.46MB

 

STM32CubeMX 설정

그림1

 

1) 타이머 선택 및 활성화

범용 타이머인 TIM14를 선택한 뒤 Activated를 체크한다.

 

2) Prescaler(PSC)

타이머에 공급하는 입력 클럭의 속도를 조절한다.

분주기라고도 하는데 분주기라는 말 자체가 의미하듯이 클럭을 쪼갠다는, 즉 속도를 느리게 한다는 의미이다.

 그림1처럼 1000을 나누려고 한다면 -1을 해줘야 한다. 그 이유는 0부터 시작이기 때문이다(0~999).

그리고 이 말은 클럭을 1000번 보내면 카운터를 1개 올리겠다는 뜻이 된다.

 

3) Counter Mode

여기서는 카운터의 값이 증가하면서 카운팅을 하는 업 카운팅 모드를 선택했다.

범용 카운터의 모드

1. 업 카운팅 모드
카운터의 값이 증가하면서 카운팅을 하는 모드
카운터 CNT = 0부터 시작해서 CNT = ARR값까지 증가한 후 다시 0부터 카운팅을 시작하는 작업을 계속하여 반복 실행한다.
CNT = 0이 될 때 오버플로우, 업데이트 이벤트와 업데이트 인터럽트가 발생한다.

2. 다운 카운팅 모드
카운터의 값이 감소하면서 카운팅을 하는 모드
카운터 CNT = ARR부터 CNT = 0까지 감소한 후 다시 CNT = ARR부터 카운팅을 시작하는 작업을 계속하여 반복 실행한다.
CNT = ARR이 될 때 언더플로우, 업데이트 이벤트와 업데이트 인터럽트, 업데이트 인터럽트 플래그가 발생한다.

3. 업/다운 카운팅 모드
카운터의 값이 증가한 후 다시 감소하면서 카운팅을 하는 모드
카운터는 0부터 ARR값까지 증가한 후 다시 0까지 감소
이후에 동작으로는 증가->감소->증가->감소 계속 반복하면서 카운팅
업 카운팅 동작 시 CNT = ARR이 되면 오버플로우, 업데이트 이벤트, 업데이트 인터럽트가 발생한다.
다운 카운팅 동작 시 CNT = 0이 되면 언더플로우, 업데이트 이벤트, 업데이트 인터럽트가 발생한다.
업/다운 카운팅 모드를 Center Aligned 모드라고 한다.

4. 입력 캡쳐(Input Capture) 모드
외부의 입력 값이 들어오는 순간 그 때의 카운터 값을 캡쳐하는 동작을 하는 모드

5. 출력 비교(Output Compare) 모드
카운터의 출력 값이 캡쳐/비교기에 설정된 비교값(CCRx)과 일치할 때 인터럽트나 해당 핀에 출력이 발생하는 모드

6. PWM 출력 모드
펄스 폭을 변조하여 출력하는 모드

7. 원 펄스(One Pulse) 모드
외부 입력이 인가될 경우 이로부터 일정 시간이 지난 후에 펄스를 1번 발생시키는 모드로 펄스가 발생하는 시간과 지속하는 시간은 프로그래밍이 가능하다.

 

4) Counter Period(Auto Reload Register: ARR)

카운터를 어디까지 올릴지 결정한다. 이 말은 주기를 결정할 수 있다는 말이다.

예를 들어 4800이라고 하면 카운터는 0부터 4799까지 돌고 다시 0으로 돌아간다

그림1처럼 지금까지 PrescalerCounter Period를 각각 (1000 - 1), (4800 - 1)으로 설정했다.

이를 정리하면 아래와 같다.

Counter Period는 카운터가 0부터 4799까지 올라가는 것을 뜻한다. 즉 4800개의 단계를 만든다는 뜻이다.

그런데 한 단계가 올라가려고 하면 클럭 한 번이 뛸 때 올라가는 것이 아니고 클럭이 1000번이 뛰면 카운터 1이 올라가는 것이다.

그리고 4799가 되면 다시 0으로 돌아온다.

, 여기서 APB는 48MHz1초에 48,000,000번을 뛴다.

그런데 Prescaler999이므로 카운터가 1 올라가는데 1000번을 뛴다(0부터 999이므로).

그리고 Counter Period가 (4800 - 1)이므로 카운터는 0 ~ 4799까지 올라갔다 다시 0으로 돌아온다.

정리하면 내가 설정한 카운터가 0 ~ 4799까지 가는데 1000 * 4800을 뛰어야 한다.

한 주기를 도는데 4,800,000번 뛰어야 된다는 의미이고, 그 말은 48MHz 클럭에서 0.1초에 해당한다.

결론적으로 카운터가 0 ~ 4799까지 갔다가 다시 0으로 돌아오는데 걸리는 시간은 0.1초라는 뜻이다.

 

5) 인터럽트 설정

 인터럽트를 Enabled하여 0.1초마다 인터럽트가 발생하는 타이머를 완성한다.

 

6) 결론

범용 타이머인 TIM14를 사용하겠다.

타이머는 한 주기를 도는데 0.1초가 걸리며 그때마다 인터럽트를 발생시키겠다.

 

'개발환경 > STM32CubeMX' 카테고리의 다른 글

Debug 설정 - STM32F030F4P6  (1) 2023.11.18
ADC 설정 - STM32F030F4P6  (1) 2023.11.18
UART(RS-485) 설정 - STM32F030F4P6  (1) 2023.11.18
Clock 설정 - STM32F030F4P6  (0) 2023.11.18
STM32CubeMX에서 STM32CubeIDE로 코드 생성하기  (1) 2023.11.17