STM32에서 펄스 카운터는 주로 타이머 모듈을 사용하여 펄스 신호의 개수나 펄스 폭 등을 측정합니다. 제너럴 퍼포스 타이머 또는 어드밴스드 컨트롤 타이머의 입력 캡처(Input Capture) 모드를 활용하면, 외부에서 들어오는 펄스 신호의 펄스 폭을 측정하거나 펄스 발생 빈도를 카운트할 수 있습니다. 이를 위해 타이머의 클럭 분주를 설정하고, 특정 입력 채널을 캡처 모드로 설정한 뒤, HAL 라이브러리의 HAL_TIM_IC_Start() 함수를 호출하여 캡처 기능을 시작하고, HAL_TIM_ReadCapturedValue() 함수로 캡처된 값을 읽어 펄스 개수나 폭을 계산할 수 있습니다.
펄스 카운터 구현 단계
-
1. 타이머 및 입력 채널 설정:
- 타이머 선택: 펄스 카운터로 사용할 제너럴 퍼포스 타이머(예: TIM2, TIM3) 또는 어드밴스드 컨트롤 타이머를 선택합니다.
- 타이머 모드: 입력 캡처 모드(Input Capture Mode)로 타이머 채널을 설정합니다.
- 입력 핀 할당: 캡처할 펄스 신호가 연결될 타이머의 특정 채널을 지정된 GPIO 핀에 할당합니다.
-
2. 클럭 및 prescaler 설정:
- RCC 클럭 설정: MCU의 시스템 클럭을 설정하고, 타이머에 공급될 클럭을 활성화합니다.
- Prescaler(분주비) 설정: 타이머의 클럭 주파수를 조절하기 위한 Prescaler 값을 설정합니다. 이 값에 따라 펄스 카운트의 분해능이 결정됩니다.
-
3. 펄스 카운터 시작:
- HAL 라이브러리 사용: STM32CubeMX 또는 HAL 라이브러리를 사용하여 타이머를 초기화합니다.
- 캡처 시작: `HAL_TIM_IC_Start()`와 같은 함수를 호출하여 설정된 입력 채널의 캡처 기능을 활성화합니다.
-
4. 펄스 값 읽기 및 처리:
- 캡처 값 읽기: HAL_TIM_ReadCapturedValue() 함수를 사용하여 캡처된 펄스 값을 읽습니다. 이 값은 입력 신호의 펄스 폭, 펄스 간격 등을 나타냅니다.
- 펄스 카운트 계산: 캡처된 값들을 이용하여 펄스 개수를 세거나, 펄스 폭을 계산하여 원하는 데이터를 얻습니다.
-
5. 인터럽트 활용 (선택 사항):
- 타이머 인터럽트: 타이머의 캡처 이벤트 발생 시 인터럽트를 활성화하면 실시간으로 펄스 변화를 감지할 수 있습니다.
- NVIC 설정: 인터럽트 서비스 루틴(ISR)을 통해 펄스 값을 처리하고 카운트를 갱신합니다.
-
개념:이 모드는 직교 인코더용으로 설계되었지만, 타이머 채널 중 하나를 펄스 입력으로 설정하여 단순 펄스를 계산하는 데에도 사용할 수 있습니다. 타이머의 카운터 레지스터는 각 펄스 에지(설정에 따라 상승 또는 하강)에 따라 증가 또는 감소합니다.
-
구현 단계(STM32CubeIDE):
- 타이머 선택: 사용 가능한 일반용 또는 고급 제어 타이머(예: TIM2, TIM3)를 선택합니다.
- 타이머 모드 구성: CubeMX 구성에서 타이머를 "인코더 모드"로 설정합니다.
- GPIO 핀 할당: 타이머의 입력 채널(예: 채널 1 및/또는 채널 2)에 적합한 GPIO 핀을 선택하고 선택한 타이머에 대한 올바른 대체 기능 매핑을 사용하여 이를 "대체 기능 푸시-풀"로 구성합니다.
- 프리스케일러 및 주기 설정: 프리스케일러 및 주기 레지스터를 구성합니다. 간단한 펄스 계산의 경우, 주기를 최대값(예: 16비트 타이머의 경우 0xFFFF)으로 설정하여 연속 계산을 허용할 수 있습니다.
- 타이머 활성화: 인코더 모드에서 타이머를 시작하거나 HAL_TIM_Encoder_Start()이와 유사한 저수준 함수를 사용합니다.
- 카운터 읽기: 타이머의 카운터 레지스터(예: __HAL_TIM_GET_COUNTER(&htimx))에서 현재 펄스 카운트를 읽습니다.
-
개념:이 모드에서 타이머는 지정된 입력 핀에서 특정 에지(상승, 하강 또는 둘 다)가 감지될 때마다 내부 카운터 값을 캡처합니다. 연속적인 펄스 에지에서 카운터 값을 캡처함으로써 펄스 수를 확인할 수 있습니다.
-
구현 단계(STM32CubeIDE):
- 타이머 선택: 사용 가능한 타이머를 선택하세요.
- 입력 캡처 구성: 타이머 채널 중 하나를 "입력 캡처 직접 모드" 또는 "입력 캡처 간접 모드"로 설정합니다.
- GPIO 핀 할당: 선택한 입력 캡처 채널에 해당하는 GPIO 핀을 선택하고 "대체 기능 푸시풀"로 구성합니다.
- 입력 캡처 극성 설정: 펄스 신호에 따라 캡처할 에지(상승, 하강 또는 둘 다)를 선택합니다.
- 입력 캡처 인터럽트 활성화: 선택한 채널에 대한 입력 캡처 인터럽트를 활성화합니다.
- 인터럽트 핸들러 구현: 함수 내에서 HAL_TIM_IC_CaptureCallback()(HAL을 사용하는 경우) 캡처된 카운터 값을 읽습니다. 캡처된 연속된 값을 비교하거나 인터럽트 내에서 소프트웨어 카운터를 증가시키면 펄스 수를 추적할 수 있습니다.
- 타이머 시작: 또는 유사한 것을 사용하여 입력 캡처 모드에서 타이머를 시작합니다 HAL_TIM_IC_Start_IT().
// Encoder Mode Initialization (CubeMX generated)
TIM_HandleTypeDef htimx; // Replace x with your timer number
// In main() or a dedicated init function
HAL_TIM_Encoder_Start(&htimx, TIM_CHANNEL_ALL);
// Read pulse count
uint32_t pulse_count = __HAL_TIM_GET_COUNTER(&htimx);
// Input Capture Initialization (CubeMX generated)
TIM_HandleTypeDef htimx; // Replace x with your timer number
// In main() or a dedicated init function
HAL_TIM_IC_Start_IT(&htimx, TIM_CHANNEL_x); // Replace x with your channel
// In your TIM Input Capture Callback function
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIMx && htim->Channel == HAL_TIM_ACTIVE_CHANNEL_x) // Replace x with your timer/channel
{
// Increment a software counter or process captured values
pulse_counter++;
}
}
참고: 특정 레지스터 이름, 함수 호출 및 구성 옵션은 STM32 시리즈 및 선택한 개발 환경(예: STM32CubeIDE, Keil MDK, IAR Embedded Workbench)에 따라 약간씩 다를 수 있습니다. 자세한 내용은 해당 마이크로컨트롤러의 STM32 참조 설명서와 선택한 라이브러리 설명서를 참조하십시오.
참고사이트는 관련이 없더라도 한 번 찾아보기 바람

'STM32' 카테고리의 다른 글
| stm32cube에서 코드 작성 방법 (0) | 2025.10.29 |
|---|---|
| stm32cube와 ST-Link V2 연결 케이블 (0) | 2025.10.29 |
| STM32 U8G2 그래픽 라이브러리 사용하는 방법 (0) | 2025.09.14 |
| STM32 MAX485 사용한 RS485 통신 (3) | 2025.08.27 |
| U8G2 그래픽 라이브러리를 STM32로 포팅 2부: SSD1306 OLED 디스플레이 (1) | 2025.08.26 |
| STM32 타이머 애플리케이션: PWM 입력 모드 (1) | 2025.08.25 |
| 새로운 AI 가속 STM32N6 시작하기 (1) | 2025.08.22 |
| STM32 중급 과정 ADC 개요 8 (0) | 2025.08.22 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩