[현대오토에버SW스쿨4기] 임베디드 C프로그래밍 기초(4)

chaehun·2025년 2월 27일

수업 내용 정리




파란색 동그라미 -> system clock이 중요하다. 여기 후로는 증가는 없다. 나눗셈만있다.
AHB가 가장 큰 총괄 버스 여기서 2로 나누면 나머지는 다 그걸로 연산해야겠지. 여기서 내가 쓸 타이머의 클럭이 얼마냐 알 수 있다.



reload value를 만나면 0으로 초기화된다. -> up counter
UEV가 이벤트를 띄우면 interrupt handler한테 딱 말해주면 되겠다.
CCR -> capture/compare register
ARR -> auto-reload value (auto는 크게 중요하지 않다.)
PSC -> pre-scaler
CNT -> counter 값이 계속 증가함

파란색 동그라미는 input capture 기능 때문에 들어온 것.

ST-Link가 있어야 쓸 수 있는 클럭

SystemClock_Config 함수의 이 부분이 바뀌었다.
Tim7은 외부에서 클럭을 받을 수 없음.

타이머 특성에 맞게 초기화 해주는 코드
HAL_Delay는 1ms가 단위

TIM3도 새롭게 들어왔다.

1초 Interrupt Timer

1) Counter 모드 (Time-Base Unit): 카운터 값이 증가 또는 감소하면서 카운터(CNT) 값이 ARR(또는 0)이 될 때 인터럽트가 발생
Ex) APB = 8MHz, Prescaler = (800 - 1), ARR = (10000 - 1) -> 1Hz 이벤트 발생

  • 코드
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == htim3.Instance)
	{
		BSP_LED_Toggle(LED2);
	}
}	
HAL_TIM_Base_Start_IT(&htim3);

PWM을 이용한 LED 밝기 제어

  • 밝기 단계: 4단계
  • 1초에 1단계씩 rotation
    -> 1Khz PWM 생성
  • 수정 부분



0개의 댓글