사용 MCU: STM32F103RETx
컴파일러: Truestudio 9.3.0
목표: Timer8의 4번 채널을 사용해서 3KHz의 클럭을 생성
저는 Output Compare기능을 클럭 신호와 같이 일정 시간마다 출력을 토글시켜주어야 할 때 사용합니다.
아래는 클럭 설정입니다. 최대 클럭 72MHz로 설정합니다.
타이머를 설정합니다.
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 |