error: #5: cannot open source input file “stm32f10x_lib.h“:

一、问题概述

一个旧程序使用了keil 4.10版本,需要统一到keil 5.17上。结果发现使用5.17编译报错:
在这里插入图片描述
提示缺少stm32f10x_lib.h文件,查看了下工程目录,确实没有这个文件。而且对这个头文件完全没印象。可是为什么在4.10版本就能编译呢?
在这里插入图片描述

二、问题解决

网上查了一下,不少人遇到这个问题,一种解决方法是为工程添加一个stm32f10x_lib.h文件。不过我测试了下,找了一个stm32f10x_lib.h加进去,结果又报另一个头文件缺失:
在这里插入图片描述
把这个头文件加进去,又继续报一个新头文件丢失,于是放弃这种方式。
从工程结构和代码风格上看,应该是参考了原子的程序。找到原子的代码看一下,终于找到了最合适的升级方法:

  1. 将程序内包含的stm32f10x_lib.h全部替换为stm32f10x.h
  2. 将sys.c文件也更新替换下

这时再编译,配置中断时的中断线均未定义:
在这里插入图片描述
需要将后缀IRQChannel更改为IRQn即可。

三、stm32f10x_lib.h和stm32f10x.h

查询了下两个文件的区别:

stm32f10x_lib.h是ST公司V2.0版本的库函数使用的头文件,stm32f10x.h是ST公司V3.5之后统一使用的头文件,去掉了lib几个字,代表了新的版本,这个版本规范了代码,不需要包含那么多的头文件了。(链接

怪不得没有见过stm32f10x_lib.h这个头文件,我生君已老呀。刚学STM32的时候就是下载3.5版本标准库。

可以看下stm32f10x_lib.h文件,实际是通过宏定义包括不同的头文件,如:

#ifdef _NVIC
  #include "stm32f10x_nvic.h"
#endif /*_NVIC */

所以在刚开始报错的时候,手动为工程添加一个stm32f10x_lib.h文件,会继续报错找不到头文件。再看stm32f10x_nvic.h中则定义了中断线:

#define TIM1_CC_IRQChannel           ((u8)0x1B)  /* TIM1 Capture Compare Interrupt */
#define TIM2_IRQChannel              ((u8)0x1C)  /* TIM2 global Interrupt */
#define TIM3_IRQChannel              ((u8)0x1D)  /* TIM3 global Interrupt */

而stm32f10x.h文件中则是直接定义:

  TIM1_CC_IRQn                = 27,     /*!< TIM1 Capture Compare Interrupt                       */
  TIM2_IRQn                   = 28,     /*!< TIM2 global Interrupt                                */
  TIM3_IRQn                   = 29,     /*!< TIM3 global Interrupt                                */

所以在升级工程时,就有了将后缀IRQChannel更改为IRQn的修改。

  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值