OpenEdv-开源电子网

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

关于#include 头文件替换总结的两种方法

[复制链接]

20

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2012-8-24
在线时间
3 小时
发表于 2014-8-5 19:55:09 | 显示全部楼层 |阅读模式

    keil 升级版本后原头文件无法使用,做为资深小菜鸟,实在是头疼啊,无奈必须整出来,于是乎找了些资料和网站看,有的是对的有的是错的,有的说需要添加target  options 的C/C++选项卡的各种东西但后来发现没有必要啊……,于是整理出两个修改方法。留给自己以后用,也给需要的师弟师妹们,技术有限,有什么错误请指正!(交流QQ:806508634    XXL)
方法一:
1)将源文件#include <stm32f10x_lib.h>替换为#include "stm32f10x.h"(先编译按照错误提示..\SYSTEM\sys\sys.c(1): error:  #5: cannot open source input file "stm32f10x_lib.h": No such file or directory来替换)
2)替换完后编译,  出现错误代码E:\KEIL FOR ARM\ARM\Inc\ST\STM32F10x\stm32f10x.h(96): error:  #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"   #error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
       此时在target  options 的C/C++选项卡 Define中添加STM32F10X_MD后问题解决。
3)再次编辑后又会出现..\SYSTEM\usart\usart.h(3): error:  #5: cannot open source input file "stm32f10x_lib.h": No such file or directory,继续将没有替换的替换完
4)再次编译出现..\SYSTEM\sys\sys.c(68): error:  #136: struct "<unnamed>" has no field "IPR"
     这是因为KEIL 3.5的库许多定义都变了这里整理出一下定义(此处为借鉴正点原子)
     所有的USART1_IRQChannel,全部变成:USART1_IRQn。
     所有的XXX_IRQChannel,都需要改为:XXX_IRQn
     NVIC_VectTab_FLASH之类的定义,直接去掉。或者用其他的替换。或者自己定义。
     stm32f10x_map.h,不需要再包含了。
     IPR,全部要换成IP。
   只需要根据上面的整理修改错误代码即可
5)再次编译  此时会出现.\OBJ\TEST.axf: Error: L6218E: Undefined symbol IS_NVIC_OFFSET (referred from sys.o).错误。百度搜不到解决方法。自己试着发现只要将上面一个警告提示的地方..\SYSTEM\sys\sys.c(20): warning:  #223-D: function "assert_param" declared implicitly       屏蔽即可消除错误不知为什么,请高手指点。
6)再次编译可成功。
至此方法一总结完毕。
方法二:
1)将cortexm3_macro   stm32f10x_conf   stm32f10x_it  stm32f10x_map  stm32f10x_nvic  stm32f10x_type 五个文件夹拷贝靠自己的工程文件夹system下
2)将源文件#include <stm32f10x_lib.h>替换为#include <stm32f10x_map.h>、#include <stm32f10x_nvic.h>这两个头文件(可先编译,根据错误提示..\SYSTEM\delay\delay.h(3): error:  #5: cannot open source input file "stm32f10x_lib.h": No such file or directory来替换)
3)编译后,我发现出现了这个错误test.c(9): error:  #5: cannot open source input file "stm32f10x_map.h": No such file or directory错误提示,于是我在网上找结局方案。
    发现有人回答target  options 的C/C++选项卡 Define中添加USE_STDPERIPH_DRIVER,STM32F10X_HD.H,后来经过试验发现STM32F10X_HD.H是错的,不能有.H,有.出现新的问题(真坑爹啊),去掉.H后依然不行,问题没有解决
     后来才发现我的第一条没有添加………………  个人教训请大家仔细!!!
这样3)就不是问题了。
4)再次编译又会出现同样的错误..\SYSTEM\delay\delay.h(3): error:  #5: cannot open source input file "stm32f10x_lib.h": No such file or directory。继续替换,完成后编译通过。
至此方法二总结完毕。

    总结,再出现这个问题的时候很纠结,也查过不少资料,也包括想正点原子的原子哥请教。得到了很多方法,有的论坛上把这两种方法弄的很乱(也有可能是我的理解问题)现在终于捉摸清楚了,所以总结出以上两种方法。  
    其中方法一不需要拷贝"stm32f10x.h",因为新建工程里面有STM32F10x.s这个文件,但是需要在target  options 的C/C++选项卡 Define中添加STM32F10X_MD。运用方法二的时候需要手动向工程里添加cortexm3_macro   stm32f10x_conf   stm32f10x_it  stm32f10x_map  stm32f10x_nvic  stm32f10x_type 五个文件夹,一般添加在SYSTEM文件夹里。OK!
    此篇文章先给也被这个问题困扰的人!(PS:务必多做,为了一步一步总结出这两种方法,每种方法我分别又改了两遍,熟能生巧。)

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-5 22:33:32 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

87

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-4-2
在线时间
0 小时
发表于 2014-8-25 10:52:21 | 显示全部楼层
赞.................
回复 支持 反对

使用道具 举报

10

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2014-5-11
在线时间
10 小时
发表于 2014-10-21 16:27:54 | 显示全部楼层
赞,很好的总结,原先也弄过一次但是没总结,一直都用原子的例子直接建工程,后来又忘记了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-11-16
在线时间
0 小时
发表于 2014-11-16 21:13:09 | 显示全部楼层
第二部应该是STM32F10X_HD,USE_STDPERIPH_DRIVER,光写STM32F10X_HD,还会有很多错误,库函数版本
回复 支持 反对

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2015-1-8 09:38:48 | 显示全部楼层
楼主辛苦了,谢谢楼主分享,这个看起一目了然。楼主费心了。
回复 支持 反对

使用道具 举报

5

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2015-1-25
在线时间
7 小时
发表于 2015-3-17 14:26:41 | 显示全部楼层
楼主好人,希望能够解决我的问题,谢谢
专注
回复 支持 反对

使用道具 举报

16

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2015-8-9
在线时间
19 小时
发表于 2015-8-13 11:38:30 | 显示全部楼层
辛苦了,LZ大侠
犯错不可怕,可怕的是不敢面对它
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-3-26
在线时间
0 小时
发表于 2015-10-10 16:35:27 | 显示全部楼层
LZ你好,我想问方法一的第一步,将stm32f10x_lib.h替换成stm32f10x.h该如何操作,是直接在程序上删掉重写还是怎样!
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-3-26
在线时间
0 小时
发表于 2015-10-10 16:52:52 | 显示全部楼层
回复【9楼】〇號天霸:
---------------------------------
自己回复一下,已经解决问题。
我电脑里有keil3和keil5,想用keil5打开带有stm32f10x_lib.h的工程。keil会提示无法找到该头文件。
解决办法:
到keil3安装目录下找到stm32f10x_lib.h文件,具体路径参看http://www.openedv.com/posts/list/29355.htm#172652。之后把该文件拷贝到其他路径(注意keil在加载文件时要求文件路径中不能有空格,不然会报错)。然后在keil5中的option for target中选择C/C++选项卡,在include paths栏中添加刚才的路径即可!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2017-7-31
在线时间
3 小时
发表于 2017-7-31 20:13:01 | 显示全部楼层
非常感谢,已经解决,大爱楼主
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 13:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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