如果在STM32工程編譯時沒有添加USE_STDPERIPH_DRIVER,STM32F10X_HD時會出現如下錯誤:..\library\cortex_m3\stm32f10x.h(96): error: #35: #error directive: "Please select first thetarget STM32F10x device used in your application (in stm32f10x.hfile)"
這時候我們需要在“Target Options”中的“C/C++”選項卡中添加USE_STDPERIPH_DRIVER、STM32F10X_HD。這樣才能使編順利通過。

那么這個錯誤是怎么產生的呢?

這是由于程序編譯的過程中調用stm32f10x_conf.h頭文件。為什么我們沒有在“main.c”中包含"stm32f10x_conf.h",而在編譯之后卻被包含進了"main.c"中,"stm32f10x_conf.h"文件相當于一個開關文件,如果要用到STM32固件庫驅動標準外設,則外設驅動頭文件是必不可少的,如“stm32f10x_gpio.h”。在"stm32f10x_conf.h"中我們通過代碼#include"stm32f10x_gpio.h"來實現這個操作。其實單從字面意思理解就是“使用標準外設驅動”,在C/C++預定義中加入“USE_STDPERIPH_DRIVER”就是允許“使用標準外設驅動”了。至于加入的“STM32F10X_HD“同樣能在文件”stm32f10x.h“通過如上所述的方法通過功能查找來進行解釋,其實它也是對于對應硬件的某些定義起開關作用罷了。
今天碰到了下面圖(1)這個問題,導致問題的直接原因是 工程沒有包含 stm32f10x_tim.h這個文件,而stm32f10x_tim.h 包含在stm32f10x_conf.h這個文件中,stm32f10x_conf.h又包含在stm32f10x.h這個文件中。做了兩個嘗試:(1)直接將stm32f10x_tim.h添加到該文件中,錯誤消除。(2)將stm32f10x.h添加到文件中,錯誤沒有消失。為什么?見圖(2)

圖(1)
如下圖所示,stm32f10x.h這個文件的最后有句
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif 即只有在將USE_STDPERIPH_DRIVER配置在圖(3)所示的選項中時,stm32f10x.h 才包含stm32f10x_conf.h
這個文件。而之前圖3的選項中已經進行了配置,猜想可能是字符串有誤,所以直接從stm32f10x.h文件中復制粘貼過去,錯誤消失,問題解決。

圖(2)

圖(3)
|