OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13131|回复: 9

那个添加“宏定义全局标识符”是什么意思啊????

[复制链接]

5

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-1-26
在线时间
5 小时
发表于 2015-2-25 21:46:26 | 显示全部楼层 |阅读模式
5金钱
STM32F407库函数版 里面提到的添加“STM32F40_41XX,USE_STDPERIPH_DRIVER”是什么意思啊 ????
小白刚从51转过来 确实不懂啊!!!!

最佳答案

查看完整内容[请看2#楼]

我知道为什么要添加STM32F40_41XX,我自己用的芯片的头文件是stm32f10x.h  我库函数版 里面提到的添加“STM32F10X_HD,USE_STDPERIPH_DRIVER”当我查看system_stm32f10x.c 文件时,里面有一些这样的句子#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)  #define DATA_IN_ExtSRAM  #endif     ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

125

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2015-2-17
在线时间
9 小时
发表于 2015-2-25 21:46:27 | 显示全部楼层
我知道为什么要添加STM32F40_41XX,我自己用的芯片的头文件是stm32f10x.h  我库函数版 里面提到的添加“STM32F10X_HD,USE_STDPERIPH_DRIVER”当我查看system_stm32f10x.c 文件时,里面有一些这样的句子#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
 #define DATA_IN_ExtSRAM 
#endif     就是说我库函数那边添加“,STM32F10X_HD,USE_STDPERIPH_DRIVER”也就是我定义了STM32F10X_HD这个头文件,然后MDK就会判断if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL),因为我添加,STM32F10X_HD,USE_STDPERIPH_DRIVER”所以这个判断会是真的,然后就可以执行 #define DATA_IN_ExtSRAM了, 当然执行的不单单只是#define DATA_IN_ExtSRAM,还有很多地方用到#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
 #define ????
#endif 这种东东
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-2-26 12:39:42 | 显示全部楼层
1楼解释正确,这个就是条件判断进行编译的,不同的芯片使用到的代码不一样
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2015-8-6
在线时间
0 小时
发表于 2015-8-7 20:17:36 | 显示全部楼层
回复【2楼】前进的小兵:
---------------------------------
        如果是F411RE的芯片,全局宏定义标识符是什么?这个标识符是不是跟启动文件的名字有关系?
        F407ZG的启动文件是“startup_stm32f40_41xxx.s”,对应的全局变量标识符是“STM32F40_41xxx,USE_STDPERIPH_DRIVER.s”。
        F411RE的启动文件是“startup_stm32f411xe.s”,那对应的全局变量标识符是不是“STM32F411xe,USE_STDPERIPH_DRIVER”?
       
        求指教啊,在线等。
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2015-8-6
在线时间
0 小时
发表于 2015-8-7 20:18:11 | 显示全部楼层
回复【3楼】八度空间:
---------------------------------
        如果是F411RE的芯片,全局宏定义标识符是什么?这个标识符是不是跟启动文件的名字有关系? 
        F407ZG的启动文件是“startup_stm32f40_41xxx.s”,对应的全局变量标识符是“STM32F40_41xxx,USE_STDPERIPH_DRIVER.s”。 
        F411RE的启动文件是“startup_stm32f411xe.s”,那对应的全局变量标识符是不是“STM32F411xe,USE_STDPERIPH_DRIVER”? 
        
        求指教啊,在线等。
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-8-9 10:41:56 | 显示全部楼层
回复【5楼】惊涛拍岸:
---------------------------------
是的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

9

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2015-1-28
在线时间
44 小时
发表于 2015-8-10 10:05:22 | 显示全部楼层
真是越来越曲解了。

USE_STDPERIPH_DRIVER       表示该工程使用了固件库,所以任何固件库工程都应添加该字符,和启动文件没有关系。stm32f4xx.h文件开头注释中有说明。
STM32F40_41XX                        表示芯片型号,固件库的兼容用。
回复

使用道具 举报

22

主题

181

帖子

0

精华

高级会员

Rank: 4

积分
878
金钱
878
注册时间
2014-7-7
在线时间
311 小时
发表于 2015-8-10 10:20:34 | 显示全部楼层
#if !defined (STM32F40_41xxx) && !defined (STM32F427_437xx) && !defined (STM32F429_439xx) && !defined (STM32F401xx) && !defined (STM32F411xE)
 //#error "Please select first the target STM32F4xx device used in your application (in stm32f4xx.h file)"
 #define STM32F40_41xxx
#endif

#if !defined  (USE_STDPERIPH_DRIVER)
/**
 * @brief Comment the line below if you will not use the peripherals drivers.
   In this case, these drivers will not be included and the application code will
   be based on direct access to peripherals registers
   */
  #define USE_STDPERIPH_DRIVER 
  
#endif /* USE_STDPERIPH_DRIVER */


楼主看到以上代码了吗,在stm32f4xx.h文件的103行,如果你是M3,在stm32f103.h。
其中:
#define STM32F40_41xxx
#define USE_STDPERIPH_DRIVER 
是我个人添加的,也就是说,如果没有对这两个进行宏声明,那么编译就会报错,而原子的教程是另外一种方法,没有想让你修改这个文件
而是在编译器中进行声明。

以上是条件编译的做法,STM32F40_41xxx,表示你使用的是40x~41X的芯片,选型楼主知道吧?有stm32f405,stm32f407等,
所以以上条件编译是为了把型号区分开来,这样后面的固件库能够根据所对应的芯片编译合适的代码。楼主可以先看看条件编译的用法。

例如:
#if  0
hello 美女!
#else
hello 帅哥
#endif

因为是0,所以编译了hello 帅哥而没有编译hello 美女!
回复

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2015-7-2
在线时间
16 小时
发表于 2015-12-31 22:39:51 | 显示全部楼层
琉璃 发表于 2015-8-10 10:05
真是越来越曲解了。

USE_STDPERIPH_DRIVER       表示该工程使用了固 ...

STDPERIPH代表哪几个单词,大神给解释一下好吗
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
170
金钱
170
注册时间
2016-3-3
在线时间
36 小时
发表于 2016-4-10 09:54:01 | 显示全部楼层
听君一席话,省我十年书,谢谢大家,明白 了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 20:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表