如上圖,在STM32的Keil工程文件(Project)中一般都包含stm32f10x_it.c、stm32f10x_it.h和stm32f10x_conf.h這三個文件,但是在ST官方提供的標准庫“STM32F10x_StdPeriph_Lib_V3.5.0”中又找不到這三個文件,它們是做什么的,或起什么作用呢?
一、stm32f10x_conf.h文件
如上圖,打開stm32f10x_conf.h文件后發現其包含了stm32f10x芯片各外設的頭文件。也就是說在使用stm32f10x芯片的某一外設時,不僅要把這個外設的驅動文件添加到工程,還要把改外設的頭文件“包含到”stm32f10x_conf.h中。
如果不配置好stm32f10x_conf.h,當使用外設如ADC TIM USART時,就無法編譯通過。因為沒有在stm32f10x_conf.h里加入相應外設頭文件,根本不能調用固件外設庫,即使你把固件庫文件加入了工程里。當然,你可以在main.c里面全部加入需要的頭文件來解決,不過我覺得配置stm32f10x_conf.h簡單方便,有組織!
二、stm32f10x_it.c和stm32f10x_it.h
stm32f10x_it.c和stm32f10x_it.h是存放STM32工程中所有中斷函數的模板文件。在STM32工程文件中,如果你不用中斷,可以把這兩個文件都去掉。當然,你也可以把中斷函數放在其他的“xxx.c文件”中,這時stm32f10x_it.c和stm32f10x_it.h也可以去掉。之所以很多STM32工程中都包含這兩個文件,是為了以后建工程方便,一般教程類的文件都包含這兩個文件。
注意,中斷函數的名稱都是固定的,不能自己隨便編。因為編譯的時候要將對應的服務程序放在固定的中斷入口地址下,隨便起的名字編譯器不可能會認識,並且每一種不同型號的片子所對應的服務程序名不同,比如中容量的片子只支持到EXTI4_IRQHandler,EXTI5_IRQHandler好像就沒有了。所以,編寫中斷函數程序時,最好在stm32f10x_it.c和stm32f10x_it.h模板文件下編寫,即使不在stm32f10x_it.c和stm32f10x_it.h模板文件下編寫(在其他的“xxx.c文件”中編寫),也要參考stm32f10x_it.c和stm32f10x_it.h文件。
注意區分stm32f10x_exti.c和stm32f10x_exti.h文件。stm32f10x_exti.c和stm32f10x_exti.h文件是外設“外部中斷/事件控制器(EXTI)” 的驅動文件和頭文件。stm32f10x_it.c和stm32f10x_it.h是STM32工程文件中中斷函數的“集合”。