CAFE

한국직업능력교육원

[ARM 실습 94] TIM2 Ch1 Capture 주파수 측정 DMA방식(써큘러모드)

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

측정 주파수가 빠를경우 이 모드를 사용하면 훨씬더 효율적이고 빠르게 측정할 수 있습니다.

돌려보시면 속도차이를 확연히 느낄실 수 있을겁니다.

처리 속도가 엄청 빠름니다.

 

 

// 완료 콜백

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)

{

// DMA 방식

uint32_t diff;

uint32_t ic_Value0;

uint32_t ic_Value1;

 

if (htim->Instance != TIM2) return;

 

// 1. 값 복사 및 즉시 DMA 재시작 (신호 누락 방지)

ic_Value0 = Cap_Value[0];

ic_Value1 = Cap_Value[1];

//HAL_TIM_IC_Start_DMA(htim, TIM_CHANNEL_1, Cap_Value, 2); // &htim2 대신 htim 사용

 

// 2. 주파수 계산을 위한 차이값 구하기

// unsigned 32비트 연산 특성상 롤오버(오버플로우)가 발생해도 자동으로 정확한 차이가 계산됩니다.

diff = ic_Value1 - ic_Value0;

 

// 3. 주파수 계산 (0 나누기 방지)

if (diff != 0)

{

// 입력 캡처 타이머의 클럭 주파수가 1MHz(1,000,000Hz)로 분주(Prescaler)되어 있다고 가정함

freq = 1000000UL / diff;

printf("Freq = %.2f Hz\r\n", freq);

}

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

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼