CAFE

한국직업능력교육원

[ARM 실습 97] TIM2 Ch1 Capture Interrupt 방식 주파수 측정 & 펄스폭 측정-4

작성자송명규|작성시간26.06.17|조회수5 목록 댓글 0

// 완료 콜백

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)

{

if(htim->Instance == TIM2)

{

if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)

{

/* * [오버플로우 보정 최적화]

* uint32_t 데이터 타입 특성상 cap_new < cap_old

* 뺌셈을 하면 자동으로 오버플로우가 계산되어 올바

* 따라서 조건문(if-else)이 필요 없습니다.

*/

cap_new = TIM2 -> CCR1; //레지스터 직접 코딩

//cap_new = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);

 

period_cnt = cap_new - cap_old;

cap_old = cap_new;

 

// 0으로 나누기 방지 및 비정상적인 값(예: 노이즈로 인한 0) 필터링

if (period_cnt > 0)

{

// 타이머 클록이 1MHz(1us)이므로 카운트당 1us

freq = 1000000.0f / (float)period_cnt;

printf("FREQ = %.2f Hz, T= %.3f ms \r\n", freq, (1/freq));

}

else

{

freq = 0.0f;

}

}

}

}

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼