舉例說明:
上圖是通過cubemx生成的工程,文件的包含關係如下:
1. main.c文件開頭就包含了main.h iwdg.h gpio.h,
由於 iwdg.h 和gpio.h中都對應聲明void MX_xxx_Init(void)(xxx表示外設名稱),所以main.c中就可以使用這些MX開頭的外設函數了,而在iwdg.c gpio.c等c文件中定義void MX_xxx_Init(void)的內容時需要用到各類外設寄存器等,外設寄存器等文件都在stm32f1xx_hal.h的後續包含文件中,而stm32f1xx_hal.h又被包含在main.h中,所以iwdg.h gpio.h中只需包含main.h即可,這樣c文件中就能定義void MX_xxx_Init(void)了,這樣在iwdg.c 和gpio.c中,他們包含的頭文件除了自身的頭文件,其他剩餘都是一樣的,如下圖:
2. gpio.c文件下包含了一堆頭文件,這些頭文件的包含關係始於gpio.h,下面梳理包含關係,其中依次爲表示“包含”關係:
其中,stm32f1xx_hal_conf.h中內容如下,使能外設頭文件引入外設的相關功能函數(函數聲明在外設頭文件中):
(gpio外設頭文件)stm32f1xx_hal_xxx.h中的內容
另外,stm32f1xx.h中的內容如下,這是keil中的設置定義的變量使能了圖中的頭文件: