打印
[STM32F3]

f1和f4中的魔术棒里面的define中的问题

[复制链接]
1734|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
发现一个问题,这里在f103中,使用的v3.5的固件,这里
如果写错大小写了都不行,或者随便写的也是不行,
应该是和这里面有一句这个话有关给限制住了,

但是在f407中,这里 的情况是只要选的是f407,上面第一张图里面的那个后面那句话随便写,大小写,不写,stm32f40xxx,或者stm32f407xx,或者写stm32f3xxxx都可以,哪怕不写,只留一个use_stdperiph_driver,而其他的 不写也能编译过去,
在f103中,这句话use_stdperiph_driver必须要大写,不然也编译不过去,
在f407中也是同样的,这句话use_stdperiph_driver必须要大写,不然也编译不过去,
然后在f407中,后面那句话,STM32F40_41xxx,不写也能编译过去,不论大小写都行,写STM32F439XX也行,但是就是写STM32F446xx就会报错,写成stm32f446xx,
或者STM32F446xxx多了个x,也是还不会报错,写成STM32F446XX,后面的x大写,那也不报错,换句话说写啥都不报错,只要写成STM32F446xx就报错,还很注意这里面的大小写的呢。
我问题是这里的这个一句话也就是这个STM32F40_41xxx,到底有什么本质性的作用,是做什么用处的,怎么判断要用什么形式,哪个字母大写哪个小写?
这个东西是不是就是上stm32f4xx.h这个文件里面去看的?f1系列的就是上stm32f10x.h里面去看还是怎么回事?
那感觉f1系列的是只要没有出现stm32f10x.h里面的那个东西,如STM32F10X_MD,或者上面第二章图片里面的那个写的那些,都会出错,
但是在f4系列里面好像没有出现stm32f4xx.h里面的文件好像不影响编译,反而出现了里面的文件才会影响到了编译,

哪位大神能给点金的讲一下这里面的学问和道道,菜鸟在此不甚感激
沙发
摩天轮1111|  楼主 | 2015-5-21 17:35 | 只看该作者
刚刚试了下,在f4的工程里面,c++那个里面的那个define里面试了STM32F429_439xx,STM32F401xx,STM32F446xx,应该说是出现在stm32f4xx.h里面的都会报错,只有STM32F40_41xxx,不报错,当然要是这句话不写,或者乱写,或者在stm32f4xx.h里面没有的,也不会报错,
同时也试了如果是STM32F427_437xx报错,但是把设备改成了f427系列里面的,就不会报错了,同理其他的那个如STM32F401xx,STM32F429_439xx,对应的改下器件就可以了,但是有一点,那个
启动文件对他们好像没有影响,不论用谁的启动文件,或者乱着混着用,都不会影响编译不会导致编译报错,这个是属于这样用不要紧,还是说只是mdk这个软件里面的bug,不检查这个问题?小弟菜鸟,不是很清楚这里面的原理,望大神赐教

使用特权

评论回复
板凳
luofeng2g| | 2015-5-21 17:39 | 只看该作者
如你图上所示,f1的上面那句判断啊,没有定义以下中几个宏定义的任意一个,不就执行#error......   当然会报错!而你在设置里Define其实就是定义了其中的一个宏,库会跟据这个宏选择一系列供调用的函数!f4 没用过,不太了解

使用特权

评论回复
地板
摩天轮1111|  楼主 | 2015-5-21 17:41 | 只看该作者
luofeng2g 发表于 2015-5-21 17:39
如你图上所示,f1的上面那句判断啊,没有定义以下中几个宏定义的任意一个,不就执行#error......   当然会 ...

是的,我编辑帖子到后面也感觉到就是这个原因了,但是我后面疑惑的是那个启动文件,那个东西好像对编译没啥影响,这个事为啥,是软件的bug吗,还是?

使用特权

评论回复
5
luofeng2g| | 2015-5-21 17:43 | 只看该作者
摩天轮1111 发表于 2015-5-21 17:41
是的,我编辑帖子到后面也感觉到就是这个原因了,但是我后面疑惑的是那个启动文件,那个东西好像对编译没 ...

你说的是.S么?

使用特权

评论回复
6
摩天轮1111|  楼主 | 2015-5-21 17:50 | 只看该作者

是啊,就是那个东西,我发现把这个的用到那个上面,那个用到这个上面,并不对应的用,居然不报错,这个是为什么啊

使用特权

评论回复
7
luofeng2g| | 2015-5-21 18:09 | 只看该作者
本帖最后由 luofeng2g 于 2015-5-21 18:12 编辑

个人理解:启动文件是在你进main函数之前执行的,对于m3内核的,启动方式都是直接复位来启动!你可以看看.s文件,无非就是一些堆栈大小设置,向量表邪恶映射等!汇编部分的代码都是差不多的,只要这些配置都没有问题,或者说没有大的区别,我觉得应该是可以用的!!
  纯属个人看法

使用特权

评论回复
8
wowow| | 2015-5-22 07:57 | 只看该作者
1.C语言是区分大小写的。
2.那些宏有什么用,代码里你已经看到了。按你的芯片型号,在stm32f4xx.h找到对应的宏来用就是了。
3.启动文件同一个序列一般是一样的。是必不可少的,对其功能需要有一定的了解。

使用特权

评论回复
9
wind~风| | 2015-5-22 12:32 | 只看该作者
一般几个型号的芯片用同一个文档,但是程序有小部分细节上的差别,那个宏就是用来选择芯片型号的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

224

帖子

15

粉丝