사용보드 : STM32F429ZI
먼저 타이머를 사용할건데 16-bit 타이머 중에 고르면 충분하다. 65.535ms까지 제어가 되는데 그 이상의 지연이 필요하면 HAL_Delay() 함수를 쓰면 되니까 말이다.
여기선 TIM1을 쓴다.
TIM1는 APB2에서 클락을 공급받는다.
APB2 timer clock은 180MHz로 설정되어있다.
Prescaler 값은 180-1로 해서 1MHz(주기 1us) 클락을 얻고 Counter Period는 최대값으로 설정한다.
다음과 같이 코드를 작성한다.
/* USER CODE BEGIN 0 */
void delay_us(uint16_t us)
{
htim1.Instance->CNT = 0;
while(htim1.Instance->CNT < us){}
}
/* USER CODE END 0 */
// ...
int main(void)
{
// ...
HAL_TIM_Base_Start(&htim1);
// ...
while(1)
{
// ...
}
}
그리고 GPIO를 토글시키는 테스트코드를 돌려봤는데 10kHz 신호를 발생시키면 스코프에 9.93kHz로 찍히고 50kHz를 발생시키면 스코프에 46.6kHz로 찍혔다.
주기적으로 반복되는 작업을 하기 위해서는 타이머 인터럽트를 사용하는게 낫고 단순히 us단위의 시간지연을 발생할 필요가 있는 경우 사용할 수 있을 것 같다.
'임베디드 개발 > STM32 (ARM Cortex-M)' 카테고리의 다른 글
STM32 ] GY-61(ADXL335) 3축 가속도센서 (0) | 2024.06.18 |
---|---|
STM32CubeIDE 1.15.0에서 Build Analyzer가 동작하지 않을 때 (0) | 2024.06.13 |
STM32 ] TouchGFX, 하드웨어와 상호작용하기 (0) | 2023.07.18 |
STM32 ] TouchGFX 설치하고 여러 Widget과 Interaction 사용 해보기 (0) | 2023.07.17 |
STM32 ] TFTP Bootloader (0) | 2023.04.16 |