STM32F746G-DISCO 보드의 타이머는 PWM(Pulse Width Modulation)기능을 제공하여 간단히 1초마다 50% duty를 갖는 펄스를 발생시키는 테스트를 해 보았습니다.
일반적인 타이머 사용은 아래 게시글을 참고해 주시기 바랍니다
2024.07.05 - [Hardware/STM32] - [STM32F746G-DISCO] Timer 사용하기
PWM을 사용하기 위해 회로도를 살펴보니 아두이노 포트 D3번이 TIM3_CH1번으로 PWM으로 사용할 수 있습니다.
STM32CubeIDE에서 새 프로젝트를 생성하여 핀 초기화후 RCC/SYS/TIM3/USART1만 설정하였습니다.
클럭은 HCLK는 200MHz, APB1는 100MHz로 설정하였고 TIM3의 PWM 설정은 아래를 참고하시면 됩니다.
원하는 타이머 시간 = APB1 clock/((Prescaler+1)* (AutoReload Register+1))로 계산할 수 있으며 Precaler와 AutoReload Register는 16bit 값으로 0 ~ 65535까지 사용할 수 있습니다.
코드를 생성 후 main 함수의 초기화 부분에 TIM3를 초기화합니다.
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_1);
/* USER CODE END 2 */
PWM의 한 펄스가 종료될때마 PWM_PulseFinishedCallback이 호출되는데 PWM이 종료되는 시간간격을 표시해 보았습니다.
/* USER CODE BEGIN 0 */
static uint32_t old_tick = 0;
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
uint32_t new_tick;
if(htim->Instance == TIM3){
new_tick = HAL_GetTick();
printf("TIM3 expired!!!(%d ms)\r\n", (int)(new_tick - old_tick));
old_tick = new_tick;
}
}
/* USER CODE END 0 */
코드를 실행해 보면 터미널상에 1초 간격으로 PWM callback 함수가 호출됨을 알 수 있습니다.
D3번 핀에 Logic Analyzer를 연결하여 PWM 신호를 측정해 보았습니다.
Logic Analyzer로 측정해 보니 설정한 대로 50%의 duty를 가진 PWM 신호가 정상적으로 출력되었습니다.
'Hardware > STM32' 카테고리의 다른 글
[STM32F746G-DISCO] SDMMC 사용하기(feat. FATFS) (0) | 2024.07.10 |
---|---|
[STM32F746G-DISCO] RNG(Random number generator) 사용하기 (0) | 2024.07.10 |
[STM32F746G-DISCO] Timer 사용하기 (0) | 2024.07.09 |
[STM32F746G-DISCO] LTDC 사용하기 (0) | 2024.07.09 |
[STM32F746G-DISCO] SDRAM 사용하기 (0) | 2024.07.08 |
댓글