寄存器版本或库函数版本编程时,库文件头.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 23:48
顺带来点题外话,
在我们说的最最重要的stm32f10x.h的开头部分,从第65行开始,有如下:
#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
在这里必须根据工程所用的芯片,选择一种宏定义,将其中的注释去掉,否则就会提示错误:
"Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
这是因为不同的芯片,有一些细小差异,包括寄存器的数量、定义等,需要根据不同的宏定义加以选择取舍。
这一段的下面,还附有详细的选择参考,什么型号的MCU选择什么样的宏定义参数。

但是,我们大家从来就没有修改过这里,但是系统为什么也没有提示错误呢?
这是因为:我们在工程配置“魔术棒”的C/C++选项卡中,手工添加了定义:STM32F10X_HD

一周热门 更多>