STM32F4
[STM32F4xx] Polling us Delay 함수
트라이문
2018. 9. 5. 23:25
제가 stm32f411로 테트트하다 보니, 가끔 인터럽트를 사용하면 이상동작을 하는 경우가 있어서,
이전에 만든 DWT Delay 함수를 사용하지 못해서 Polling 으로 micro second Delay 함수를 또 찾아봤습니다.
정말 간단하게 만들 수 있었습니다. 아주 정확하지는 않겠지만,
system 클럭의 정보를 바탕으로 1clk 당 실행시간을 계산해서 us Delay를 만들어 내는 것으로 보입니다.
따라서 system clk 이 바뀌더라도 대충 맞는 그런그런 정도(아주 정밀하지는 않음)의 딜레이 함수입니다.
제가 구글링에서 참고한 사이트는 다음과 같습니다.
그리고 제가 사용자 함수를 모아 놓는 파일인 user_def.c 와 user_def.h 가 있는데,
user_def.h 파일에만 다음과 같은 함수를 정의해 놓습니다.
1 2 3 4 5 6 7 8 | __STATIC_INLINE void Pol_Delay_us(volatile uint32_t microseconds) { /* Go to number of cycles for system */ microseconds *= (SystemCoreClock / 1000000); /* Delay till end */ while (microseconds--); } | cs |
그리고 이 user_def.h 를 인클루드한 소스파일에서 다음과 같이 사용하면 됩니다.
1 2 3 | Pol_Delay_us(50); // Polling 50us //DWT_Delay_us(100); // DWT 100us //HAL_Delay(1); // HAL Library 1ms | cs |