32F429IDISCOVERY TrueSTUDIO에서 PWM 사용하기

2019. 8. 1. 18:46임베디드/32F429IDISCOVERY

이전의 TIM7 타이머 업데이트 인터럽트를 이용해 LED를 1초 주기로 켜고 끄는 실습을 했었다. 이번에는 Basic 타입이 아닌 General Purpose의 PWM 출력을 이용해볼 것이다

 

 

위 그림과 같이 PWM 주기는 ARR 레지스터와 PWM으로 맞추고, 추가적인 CCR 레지스터로 PWM 듀티비를 맞출 수 있다. CCR 레지스터 전의 HIGH, CCR 값부터 ARR까지가 LOW가 일반적인 PWM 신호가 된다. 설정을 통해 HIGH, LOW를 충분히 바꿀 수 있다 

 

 

위에서 의미하는 채널은 PWM 출력의 개수가 되면서 CCR 레지스터의 개수가 된다. 이번에는 TIM3번의 PWM 채널을 사용할 것이다.

 

1. RCC를 초기화해서 외부 클럭으로 타이머를 동작시킬 것이다. TIM3는 APB1 버스에 연결되어 있다

 

 

 

2. PWM을 초기화할 것인데, 100Hz의 펄스, 초기에는 듀티를 50%로 설정할 것이다 

 

 

지금 APB1의 클럭이 84MHz다. 따라서 1/84M * 42000 * 20 = 0.01로 100Hz 펄스를 만들 준비가 됐다. 그리고 듀티는 CCR 레지스터로 제어하게 되는데 아래 Pulse란에 써주면 되는데 ARR 레지스터가 42000이니 그에 대한 반을 기입하면 된다

 

그리고 코드를 생성하도록 한다. 초기에 정한 CCR 값으로만 제어하고 싶다면 코드 작성은 매우 간단하게 된다. 아래 코드로 HAL_TIM_PWM_Start로 시작하면 된다

 

 

시간에 따라서 밝기를 조절하고 싶다면 다음과 같이 ccr을 변경하는 코드를 추가하면 된다

 

 

전체코드