問題描述及原因探究:
在AVR程序編寫的過程中,如果使用了延時函數,在包含 util/delay.h 頭文件後,編譯會報一個警告——
F_CPU not defined for \<util/delay.h\>
該警告出現的原因是因爲單片機在進行延時時需要通過其所使用的晶振頻率來計算時間,從而保證延時的準確性。如果沒有爲延時函數提供正確的頻率的話,延時會出現不準確的情況。
當然,如果沒有進行宏定義的話,delay.h中會自行添加一個頻率,“#define F_CPU 1000000UL”,但是該頻率並非我們所使用的頻率會導致程序延時錯亂。
解決辦法:
查看單片機上晶振的頻率,然後根據該頻率值,在包含延時頭文件 “util/delay.h”前先進行宏定義,如:
#define F_CPU 7372800UL
#include <util/delay.h>
注:
頻率數值後面的 UL 表示該數值爲 unsigned long 類型, 不要省去。