升级库
光盘中所带的例子是3.10的,另外还有一个3.12的,我 试着将3.12的库替代原来的库,还真有问题,下面就简述问题及解决方法。
(1)将库文件解压
库文件名是:stm32f10x_stdperiph_lib.zip,解压后放在任意一个文件夹中。
(2)由于原作者做了很好的规划,每一个项目中都分成三个文件夹,并且在source文件夹中又做了3个文件夹,其中APP文件夹是放自己写的文件的,其他的两个是从库中复制过来的,因此,想当然地把3.1.2版本中相同的两个文件夹:
CMSIS和STM32F10x_StdPeriph_Driver直接复制过来,以为一切OK,结果一编译,出来一堆错误。
其中有错误:
Source\App\main.c(7): error: #20: identifier "GPIO_InitTypeDef" is undefined
....
还有大量的警告:
Source\STM32F10x_StdPeriph_Driver\src\stm32f10x_flash.c(130): warning: #223-D: function "assert_param" declared implicitly
看了看,在APP文件夹中还有一些不属于自己的东西:
stm32f10x_conf.h,stm32f10x_it.h,stm32f10x_it.c,打开一看,果然是3.10版本的,没说的,换。。。。,找到STM32F10x_StdPeriph_Lib_V3.1.2\Project\Template文件夹,用里面的同样的文件替换掉这几个文件,这回应该万事大吉了吧。
再一看,依然如故,,没办法了,只好细细研究了。通过观察,发现原来可以编译通过的工程,在main.c下面挂满了.h文件,而这个通不过的,则少得很。
这是编译能通过的工程
这是编译通不过的工程
显然,有些文件没有被包含进来。一点一点跟踪,发现大部分的头文件都包含在stm32f10x_conf.h中,而这个文件又出现在stm32f10x.h中,其中有这样的一行:
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif
看来,是这个USE_STDPERIPH_DRIVER没有被定义啊,于是,人为地去掉条件:
//#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
//#endif
再次编译,果然就OK了。可是,可是,也不能就这么去掉啊,怎么办呢?万能的网啊,一搜果然就有了。
到设置 C/C++页面
在那个define中加入“USE_STDPERIPH_DRIVER,STM32F10X_HD”
当然,去掉条件编译前面的注释,回到原样。
再次编译,一切顺利。可是,原来的工程例子也没有加这个啊,怎么回事呢?再次打开原来的例子,找到stm32f10x.h,可以看到有这么一行:
而新的stm32f10x.h中则是这样的:
原来那个3.1.0版的stm32f10x.h被人为地修改了一下,所以,不在define中定义也不要紧,而新升级的3.1.2则不行了。
至此,简单的升级搞定。
用户1467915 2011-6-8 11:37
teach51_109853927 2010-8-23 17:49
用户1649549 2010-8-23 09:15
teach51_109853927 2010-7-8 13:45
用户806954 2010-7-8 12:56
用户1441023 2008-12-21 17:06