제가 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 |
'STM32F4' 카테고리의 다른 글
[STM32F4xx] Read Unique ID/Flash Size/#REV/Device Signature (0) | 2018.09.06 |
---|---|
[STM32F4xx] EEPROM Emulate Test (내부 Flash Mem 사용) (0) | 2018.09.06 |
[STM32F4xx] DWT us Delay 함수 (0) | 2018.09.05 |
[STM32F4xx] 타이머 인터럽트 동작 시 이상한 점. (1) | 2018.09.05 |
[STM32F4xx] CUBEMX ver 4.19 버전 갖고 계신분? (0) | 2018.09.05 |