keil 4.00。
在ST官网上下的固件包,用STM32F10x_StdPeriph_Lib_V3.4.0\Project\STM32F10x_StdPeriph_Template里的工程,编译正确。
以下尝试了两种新建工程的方法,均失败:
1。 将固件包里的例程和相应的CMSIS、StdPeriph_Driver拷到工程下,修改target options里的C/C++ include paths项为“..\;..\Src\App;..\Src\CMSIS;..\Src\Lib”,编译报错“D:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(23): error: #256: invalid redeclaration of type name "s32" (declared at line 470 of "Src\App\stm32f10x.h")”等。
2。 若在工程中添加的文件为固件包中的链接(而不是拷贝),完全按照template里的结构,并将include paths按照template进行修改,编译报错“Keil\ARM\INC\ST\STM32F10x\stm32f10x_conf.h(147): warning: #47-D: incompatible redefinition of macro "HSE_Value" (declared at line 511 of "STM32F10x_StdPeriph_Lib_V3.4.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h")”等。
推测KEIL安装目录下的为旧版lib,工程中使用的为新版,两者代码结构上有所不同。而编译器在编译了工程文件的同时,自动链接了KEIL安装目录下的文件,造成冲突。但是在选项中没找到配置是否链接KEIL安装目录下LIB的地方。不知推测是否正确,解决方法又如何。求指教。
------解决方案--------------------
你配置的路径可能有问题,那没有找到就直接用自带的库了。
..\inc;..\..\Libraries\STM32F10x_StdPeriph_Driver\inc;..\..\Libraries\CMSIS\Core\CM3;
我的配置信息参考下
------解决方案--------------------
错误说你重定义了类型,不知道是不是多次引入了同一个文件。。。
检查一下项目中的源文件