先说这个问题,咱们都知道,咱们在挑选运用哪些外围的的时分,是去更改从官方模版中复制过来的stm32f10x_conf.h文件的27-48行,把咱们要用的外围的头文件包括进来,不必的外围的头文件注释掉,可是你是否发现咱们底子没有在用户主程序文件中包括stm32f10x_conf.h这个文件。那咱们的修正这个文件怎样进入主程序文件的呢?答案只要一个,它包括在stm32f10x.h这个文件中,由于在用户主文件中咱们榜首句就运用了#include”stm32f10x.h”,所以应该是stm32f10x.h这个文件包括了stm32f10x_conf.h,直接的包括进了用户主程序文件中。(其实咱们去看看固件库的文件结构图就理解了确实是这样,咱们估测是对的,拜见下图1)
图1. STM32F10xxx规范外设库体系结构
2. 有了上面的知道咱们翻开stm32f10x_conf.h中查找“stm32f10x_conf.h”,咱们在8291-8293行看见这么几句代码:
#ifdef USE_STDPERIPH_DRIVER
#include “stm32f10x_conf.h”
#endif
咱们看到问题所在了吧?这个条件编译便是说:假如界说了USE_STDPERIPH_DRIVER符号,那么就包括stm32f10x_conf.h,没有界说就不包括。那不必说了,咱们想运用固件库,所以就应该预界说USE_STDPERIPH_DRIVER这个符号,KEIL供给了编译前预界说符号的方法,便是上面说到的在项目设置“option for targe”=>“C/C++”标签=>“define”处加USE_STDPERIPH_DRIVER。如下图2所示:
图2. Keil开发环境(C/C++预设置窗口)
3. 咱们必定看见上面符号预设置区我还加入了另一个符号STM32F10X_HD,是由于咱们会发现49-58行:需求咱们指定期间的类型
#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)
/* #define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */
/* #define STM32F10X_LD_VL */ /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */
/* #define STM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium density devices */
/* #define STM32F10X_MD_VL */ /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */
/* #define STM32F10X_HD */ /*!< STM32F10X_HD: STM32 High density devices */
/* #define STM32F10X_HD_VL */ /*!< STM32F10X_HD_VL: STM32 High density value line devices */
/* #define STM32F10X_XL */ /*!< STM32F10X_XL: STM32 XL-density devices */
/* #define STM32F10X_CL */ /*!< STM32F10X_CL: STM32 Connectivity line devices */
#endif