시스템 클럭인란 1초에 mcu가 몇 hz로 발진하는지를 이야기한다.
- 만약 SystemCoreClock이 48MHz라면, MCU는 1초에 48,000,000번의 클럭 사이클을 실행한다.
- 즉, 기본적인 연산을 1초에 4800만번 시행한다는 이야기다.
시스템 클럭으로 타이머 만들기 예시
// MCU가 48MHz로 동작할 경우
// 1밀리초(ms)를 만들기 위해 필요한 클럭 사이클
uint32_t cycles_for_1ms = SystemCoreClock / 1000; // 48000
- mcu가 1초에 48mhz로 발진 하므로, 1milli 초를 만들기 위해서 0.001을 곱해준다.
- 48,000,000 * 0.001 = 48,000 mhz
- 따라서 48,000 mhz 마다 1milli 초가 됨을 알 수 있다.
이를 활용해서 for문이 48,000번 작동하므로써 1밀리초를 만든다.
void simple_delay_ms(uint32_t ms)
{
uint32_t cycles = (SystemCoreClock / 1000) * ms;
for(uint32_t i = 0; i <cycles; i++)
{
__NOP(); // 동작없음.
}
}
단, 이렇게 하면 1초를 만드는 동안 다른 작업을 할 수 없게된다.
딜레이 함수를 만들때는 보통 인터럽트을 쓴다는 사실을 명심하자.
반응형