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

3 篇文章 0 订阅
2 篇文章 0 订阅

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

本文解决使用老版本库出现 找不到stm32f10x_lib.h 

 

keil 升级版本后原头文件无法使用,做为资深小菜鸟,实在是头疼啊,无奈必须整出来,于是乎找了些资料和网站看,有的是对的有的是错的,有的说需要添加target  options 的C/C++选项卡的各种东西但后来发现没有必要啊……,于是整理出两个修改方法。留给自己以后用,也给需要的师弟师妹们,技术有限,有什么错误请指正!(交流QQ:806508634    XXL)

方法一

下载我的头文件包“STM32F10x”并在include path中包含它  见截图

 图片1

图片2

头文件包下载地址:

http://pan.baidu.com/s/1b4mKDg

 


方法二:
1)将源文件#include <stm32f10x_lib.h>替换为#include"stm32f10x.h"(先编译按照错误提示..\SYSTEM\sys\sys.c(1): error: #5: cannot open source input file "stm32f10x_lib.h": No suchfile 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 targetSTM32F10x 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 sourceinput 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: Undefinedsymbol 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 sourceinput 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 sourceinput 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!
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值