이번시간에는 타이머, PWM(Pulse Width Modification), HAL(Hardware Abstraction Layer)을 사용하는 방법을 알아볼 것이다. 우선 세가지 개념에 관해 알아보자.
Tim
er 변수 계산법
Timer의 변수를 설정하는법은 타이머 자체의 Clock을 바탕으로 구할 수 있다.
Nucleo F103RB Board에 내장된 Oscillation Clock은 공식 Documentation에서 찾을 수 있다.
이제 STM32Cube IDE를 실행하자. 이전과 같이 프로젝트는 동일한 보드, 맘에드는 프로젝트 명으로 설정하면 된다.
이제 해야할 일은 PA5를 Timer 2에 의해서 컨트롤 될 수 있도록 해야한다. 이제 우측의 Timer창에서 Timer2를 선택한다. 그 다음 Clock Source를 Internal Clock으로 설정한다. 그리고 Channel1에 PWM Generation CH1을 선택해준다.
그 다음 할 일은 PA5핀에 GPIO_Output을 설정해주는 것이다. 참고 PA5핀은 내부 LED핀이다.
하면 이렇게 된다. NVIC Setting에서 TIM2 global interrupt Enable을 잊지 않는다
이제 간단하게 Clock을 조정해보자. 상단의 Clock Configuration으로 들어간다.
기본적으로 8MHz로 설정되어있으며 원하면 72MHz까지 조정이 가능하다. Clock을 조정하는 경우는 사용자작업의 강도에 따라 정하면 된다.
PLLMul을 x16으로 설정하고 나머지를 그림과 같이 설정하면 끝난다.
다음은 TIM2의 Parameter을 설정할 차례이다.
다음과 같이 설정한다. 아래의 사진처럼
우선 Prescaler는 63999으로 설정한다. 실제로 계산되는 값은 PSC + 1이기 떄문이다.
Counter Period는 999로 설정하여 1초마다 카운트 될 수 있도록 한다.
설정이 끝났으면 main.c로 이동하여 92번째 줄에 다음과 같이 작성한다.
어느때와 같이 Ctrl + Space를 누르면 편하게 코딩이 가능하다.
그다음은 stm32f1xx_it.c로 이동하여 TIM2_IRQHandler으로 이동한다.
다음과 같이 작성하고 Build and Debug! 코드의 뜻은 GPIO 포트로 타이머의 Clock과 Counter Period에 따른 인터럽트를 발생시킨다.
Debug을 실행하고 Resume을 누르면 다음과 같이 자동으로 깜빡이는것을 볼 수 있다.
'Embedded > STM32' 카테고리의 다른 글
STM32 외부 인터럽트 (1) | 2021.03.01 |
---|---|
STM32F103RB 시작하기 (Cortex-M3) (0) | 2021.03.01 |