PWM 이랑 거의 비슷하다
TIM2를 사용할 거고, clock source - internal clock
prescaler는 6MHz로 작동해서 6000 으로 하여 1msec 주기의 tick을 사용한다.
Counter Period는 1000 으로 해서 1000 번의 tick이 모이면 (= 1초) timer interrupt가 발생하게 한다.
NVIC Settings에서 TIM2 global interrupt를 발생시키게 하고 프로젝트 갱신하고
아래의 함수들을 추가하면 끝
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static int pwm_val = 0;
static int dir = 1;
if(dir)
{
if(pwm_val < 10)
{
pwm_val++;
}
else
{
dir = 0;
pwm_val--;
}
}
else
{
if(pwm_val > 0)
{
pwm_val--;
}
else
{
dir = 1;
pwm_val++;
}
}
// printf("pwm_val[%d] dir[%d]\n", pwm_val, dir);
htim3.Instance->CCR1 = pwm_val;
htim3.Instance->CCR2 = pwm_val;
}
int main(void)
{
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(10);
}
/* USER CODE END 3 */
}
|
[링크 : https://eteo.tistory.com/73]
'embeded > Cortex-M3 STM' 카테고리의 다른 글
STM32 PWM 으로 LED 점진적으로 깜박이기 (0) | 2024.12.13 |
---|---|
stm32 gpio ext interrupt 모드 (0) | 2024.11.04 |
stm32f103 adc + dma (0) | 2024.11.04 |
stm32 adc 읽기(1개로 여러 개 채널) (0) | 2024.10.30 |
stm32 tim output compare(OC) mode (0) | 2024.07.12 |