사용 MCU: STM32F103RETx

컴파일러: Truestudio 9.3.0

 

 

목표: Timer8의 4번 채널을 사용해서 3KHz의 클럭을 생성

 

 

저는 Output Compare기능을 클럭 신호와 같이 일정 시간마다 출력을 토글시켜주어야 할 때 사용합니다.

 

아래는 클럭 설정입니다. 최대 클럭 72MHz로 설정합니다.

MCU 클럭 설정

 

타이머를 설정합니다.

 

CubeMX에 Timers 카테고리에 TIM8을 선택 해 줍니다.

 

 

 

Clock Source를 Internal Clock으로 설정해서 내부 클럭에 의해 타이머가 카운트 되도록 설정하고

채널 4번에 클럭을 생성한다고 했으니 Channel4에 Output Compare CH4를 선택해줍니다.

그러면 다음과 같이 MCU 핀에 TMI8_CH4 라벨이 붙었습니다.

 

 

Output Compare Channel 4의 Mode를 Toggle on match를 선택하여 OC가 될 때 GPIO가 토글되도록 합니다.

 

Timer 주기를 선택해 줍니다.

3KHz의 주파수를 만들기 위해서 

 

72MHz / 1000 / 24 = 3000 가 나옵니다. 즉 숫자를 3000번 세면 Output Compare 인터럽트가 발생하여 토글 시키는데 그러면 GPIO 출력으로 나오는 클럭이 1500Hz가 되기 때문에  2를 더 나누어서 설정합니다

 

72MHz / 1000 / 24 / 2 = 1500 라서 

 

Prescaler 에 12 - 1,

Counter Period에 1000 - 1을 넣습니다

 

 

 

코드는 while에 들어가기전에 HAL_TIM_OC_Start(타이머 번호, 채널 번호) 값을 넣어 호출해주면 PC9번 핀에 클럭이 나오는 것을 볼 수 있습니다.

int main()
{
 ...
 MX_TIM8_Init();

 ...
 
 // Timer8 Output Compare 시작
 HAL_TIM_OC_Start(&htim8, TIM_CHANNEL_4);
 
 
 while(1)
 {
 
 
 }
}
반응형

'MCU > STM32:HAL' 카테고리의 다른 글

[STM32F]FSMC와 LCD  (0) 2021.02.28
[STM32F]FSMC로 LCD(SSD1963) 제어하기  (2) 2021.02.07
[STM32F][HAL] USART Interrupt  (0) 2020.12.23
[STM32F][HAL] DAC (Digital to Analog Converter)  (0) 2020.12.22
[STM32F][HAL] USB CDC (Virtual Port Com) 사용하기  (1) 2020.05.28
[STM32F][HAL] HAL_Delay  (0) 2020.05.21
[STM32F][HAL] ADC - ADC Calibration  (4) 2020.05.17
[STM32F][HAL]GPIO  (0) 2020.05.10

+ Recent posts