寄存器版本或库函数版本编程时,库文件头.h的包含关系

2019-07-21 03:41发布

本帖最后由 warship 于 2018-7-24 21:44 编辑

我们知道,直接操作寄存器进行编程时,
是不依赖STM32的库函数的,
但对于最基本的头文件,
即使是直接操作寄存器也是必须包含的,
其中最最重要的一个头文件就是stm32f10x.h
这个头文件定义了所有外设基地址,
所有外设中寄存器的名称、偏移量、长度、寄存器的位定义等等,
是我们直接操作寄存器进行编程的基础。

我们一般在我们自己的基础代码sys.c的sys.h中包含这个stm32f10x.h
然后,在我们所有其它模块中只须通过#include sys.h也就相当于包含了stm32f10x.h
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
warship
2019-07-21 10:24
本帖最后由 warship 于 2018-7-24 21:50 编辑

如果直接操作寄存器进行编程,也就到此为止了,无须定义USE_STDPERIPH_DRIVER这个宏。

接下来,说使用库函数的情况,因为有了USE_STDPERIPH_DRIVER这个宏定义,
看stm32f10x.h的第8296行:
#ifdef USE_STDPERIPH_DRIVER
  #include "stm32f10x_conf.h"
#endif
这一段的作用是:如果定义了宏USE_STDPERIPH_DRIVER
就把头文件stm32f10x_conf.h包含进来。

stm32f10x_conf.h这个头文件非常关键,它是所有外设头文件的总闸门,为什么呢?
打开stm32f10x_conf.h这个头文件,可以看到类似的段落(从第28行开始):
"stm32f10x_conf.h" 第28行开始
//#include "stm32f10x_adc.h"
//#include "stm32f10x_bkp.h"
//#include "stm32f10x_can.h"
//#include "stm32f10x_cec.h"
//#include "stm32f10x_crc.h"
//#include "stm32f10x_dac.h"
//#include "stm32f10x_dbgmcu.h"
//#include "stm32f10x_dma.h"
//#include "stm32f10x_exti.h"
//#include "stm32f10x_flash.h"
#include "stm32f10x_fsmc.h"
//#include "stm32f10x_gpio.h"
//#include "stm32f10x_i2c.h"
//#include "stm32f10x_iwdg.h"
//#include "stm32f10x_pwr.h"
//#include "stm32f10x_rcc.h"
//#include "stm32f10x_rtc.h"
//#include "stm32f10x_sdio.h"
//#include "stm32f10x_spi.h"
//#include "stm32f10x_tim.h"
//#include "stm32f10x_usart.h"
//#include "stm32f10x_wwdg.h"
//#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */
看到没有? 所有外设的配电闸刀都在这里,
需要用到哪个外设,就把这个外设相对应的那一行的注释去掉,也就包含了该外设的头文件。
不过,还要注意的是,要真正能够使用相应外设的驱动代码,
除了上面说的包含该外设的头文件外,
还得在工程中将库函数中的相应外设驱动的.c文件添加进来

一周热门 更多>