在KEIL中建立STM32F4工程中我們經常采用的是一種多C多H檔案的形式,這樣寫的好處是可以把項目拆分成各個子產品,便于編寫和調試,也就是說每個子產品可以單獨運作和調試。還有一個好處是整個項目看起來具有具有條理,很容易根據每個檔案的名字判斷該子產品的作用,如果将整個項目都寫入main函數裡看起來非常臃腫。如圖一個工程分成了按鍵子產品,外部中斷,延時子產品:

.h和.c檔案有特定的格式如下圖LED燈的.h和.c檔案為例:
.h檔案包含函數、資料、類型的聲明還有宏定義,需要用到:
#ifndef __檔案名_H
#define __檔案名_H
函數聲明
#endif
這樣的結構,這是為了避免頭檔案被重複包含,如果頭檔案被重複包含可能會導緻程式在編譯、連結過程時崩潰。而.c檔案中需要包含.h檔案并寫出在.h檔案中定義的函數的作用。
另外還有一個值得關注的地方在#include後面,include是編譯預處理指令,就是将Include後面的檔案裡面内容複制粘貼到include目前位置.以前我們在學習C語言的時候,用的是尖括号<>,表示在标準庫中尋找檔案。而在工程中我們用的是單引号 ‘’,表示在目前目錄中尋找檔案。
還有就是關于全局變量的宏定義,全局變量是作用域從定義處開始到整個檔案起作用,而局部變量隻在目前檔案的函數裡起作用。那麼對于多C多H檔案而言想要将參數傳遞,比如說在溫度傳感器.c檔案裡初始化函數裡需要算出溫度的值,那麼在main函數裡需要用到這個參數,就需要用extern聲明全局變量,在main函數裡面定義這個參數。聲明全局變量不等于定義,聲明是不配置設定存儲空間的。
最後要注意的是STM32F4的庫函數中關于各個功能初始化函數都是通過結構體來完成的,比如說GPIO口的初始化中,GPIO口的結構體裡面包含四個成員變量,包含模式,頻率等。用結構體的一個原因就是結構體的可擴充性強,可以很友善的添加其他的成員變量,用起來很靈活。