#include<stm32f10x_lib.h>和#include<stm32f10x.h>的区别,这确实是个好问题,所以在这里好好解答一下。
首先,我们看
#include<stm32f10x_lib.h>这个头文件。
#include<stm32f10x_lib.h>是ST公司V2.0的库函数使用的头文件,用MDK3.80A,打开Mini板例程-扩展实验1 自定义汉字显示实验,如图1所示:
![](https://i-blog.csdnimg.cn/blog_migrate/2930fc106cabe24736fac3f20ad70f71.png)
图1 stm32f10x_lib.h
只要你善于观察,这个图片,告诉我们好几个信息了:
1,文件的路径,也就是stm32f10x_lib.h,到底是在哪个位置,在图中1处就告诉你了。
2,文件的版本,图中2处,说明了,这是V2.0.1版本。
3,该文件包含的一些内容,也就是图中3处的内容。
图1,我们是用MDK3.80A打开的Mini板例程,因为MDK3.80A自带了这些头文件,所以可以打开。
但是,如果你用MDK4.7/MDK5打开,就没法找到了,这也就是为什么,我们老版本的例程,存在高版本的MDK编译的时候,报找不到stm32f10x_lib.h的错误的原因了。
而stm32f10x_lib.h里面,我们经过分析,实际可以用:stm32f10x_map.h和stm32f10x_nvic.h来替代,所以新版本的Mini板例程,都是用这两个替代stm32f10x_lib.h了,而
为了避免不同编译器,可能不会带这两个文件,而报错的问题,我们将这些相关头文件统一拷贝到了例程\SYSTEM\sys文件夹下,如图2所示:
图2 SYSTEM\SYS 文件夹里面的内容
所以,Mini板的最新例程,都是可以在MDK个版本下直接编译的。
新例程下载地址: http://www.openedv.com/posts/list/13912.htm
接下来我们再说说: #include<stm32f10x.h>这个头文件。
#include<stm32f10x.h> 是ST公司V3.5及以后版本统一使用的库函数头文件了,说白了就是把原来的stm32f10x_lib.h,换成了#include<stm32f10x.h>,规范了代码,不需要包含那么多的头文件了。
这里打开战舰板,寄存器例程-按键实验。
如图3所示:
图3 stm32f10x.h 这是我们用MDK5.10打开战舰板寄存器例程,按键实验,查看stm32f10x.h的内容,对比图1,应该看出些区别了。
MDK5界面大改,这里不多说,关键没法查看stm32f10x.h的路径了,不知道放在哪里。。。
怎么办呢?
俗话说,上天给人关闭一扇门的时候,一定会为他开启另外一扇门,你把鼠标,放到stm32f10x.h选项卡上,然后右键,是不是弹出了一个小窗口?如图4所示:
、
图4 拷贝全路径&打开包含文件夹
1,文件的路径,也就是stm32f10x_lib.h,到底是在哪个位置,在图中1处就告诉你了。
2,文件的版本,图中2处,说明了,这是V2.0.1版本。
3,该文件包含的一些内容,也就是图中3处的内容。
图1,我们是用MDK3.80A打开的Mini板例程,因为MDK3.80A自带了这些头文件,所以可以打开。
但是,如果你用MDK4.7/MDK5打开,就没法找到了,这也就是为什么,我们老版本的例程,存在高版本的MDK编译的时候,报找不到stm32f10x_lib.h的错误的原因了。
而stm32f10x_lib.h里面,我们经过分析,实际可以用:stm32f10x_map.h和stm32f10x_nvic.h来替代,所以新版本的Mini板例程,都是用这两个替代stm32f10x_lib.h了,而
为了避免不同编译器,可能不会带这两个文件,而报错的问题,我们将这些相关头文件统一拷贝到了例程\SYSTEM\sys文件夹下,如图2所示:
![](https://i-blog.csdnimg.cn/blog_migrate/e1bac30730acf3cd6530d85cce468274.png)
图2 SYSTEM\SYS 文件夹里面的内容
所以,Mini板的最新例程,都是可以在MDK个版本下直接编译的。
新例程下载地址: http://www.openedv.com/posts/list/13912.htm
接下来我们再说说: #include<stm32f10x.h>这个头文件。
#include<stm32f10x.h> 是ST公司V3.5及以后版本统一使用的库函数头文件了,说白了就是把原来的stm32f10x_lib.h,换成了#include<stm32f10x.h>,规范了代码,不需要包含那么多的头文件了。
这里打开战舰板,寄存器例程-按键实验。
如图3所示:
![](https://i-blog.csdnimg.cn/blog_migrate/1ed5f2b047431e1a8772ddd94d89bfac.png)
图3 stm32f10x.h
MDK5界面大改,这里不多说,关键没法查看stm32f10x.h的路径了,不知道放在哪里。。。
怎么办呢?
俗话说,上天给人关闭一扇门的时候,一定会为他开启另外一扇门,你把鼠标,放到stm32f10x.h选项卡上,然后右键,是不是弹出了一个小窗口?如图4所示:
![](https://i-blog.csdnimg.cn/blog_migrate/6cbe82a69b0f5e8a55a00f05c6e3bff4.png)
图4 拷贝全路径&打开包含文件夹
以上两个划红线的,大家自己试试,就知道什么情况了,我就不多说了。
同样,图3中,也告诉你stm32f10x.h的版本了。
另外,如何查看某个.c文件,包含了哪些头文件,见图3中3处的方法,点击.c文件前面的+号标记,就可以展开其包含的头文件了。
但是很多网友会问,明明我的delay.c只包含了#include "delay.h",怎么会包含这么多呢?
答案就是:头文件可以层层包含的... A包含B,B包含C,C包含D,D包含E,E包含F...
那么只要你包含了A,那么B,C,D,E,F,就都是会包含进来的。。。
同样,为了兼容不同版本的MDK,以避免MDK不自带头文件,带来的错误,我们将:stm32f10x.h和system_stm32f10x.h拷贝到了SYSTEM\SYS 文件夹下,这里大家查看战舰板最新例程就可以知道。
最后,再总结下:
1,stm32f10x_lib.h是2.0的ST库函数头文件,在我们开发板老版本的寄存器版本例程上面有用到,新版本例程一律没用了。
2,stm32f10x.h,是3.5的ST库函数头文件,在战舰板新版本例程,全部使用这个头文件了。
3,为了兼容不同的MDK版本,我们将这些所需的头文件,一律拷贝到了工程\SYSTEM\sys 文件夹了。
同样,图3中,也告诉你stm32f10x.h的版本了。
另外,如何查看某个.c文件,包含了哪些头文件,见图3中3处的方法,点击.c文件前面的+号标记,就可以展开其包含的头文件了。
但是很多网友会问,明明我的delay.c只包含了#include "delay.h",怎么会包含这么多呢?
答案就是:头文件可以层层包含的... A包含B,B包含C,C包含D,D包含E,E包含F...
那么只要你包含了A,那么B,C,D,E,F,就都是会包含进来的。。。
同样,为了兼容不同版本的MDK,以避免MDK不自带头文件,带来的错误,我们将:stm32f10x.h和system_stm32f10x.h拷贝到了SYSTEM\SYS 文件夹下,这里大家查看战舰板最新例程就可以知道。
最后,再总结下:
1,stm32f10x_lib.h是2.0的ST库函数头文件,在我们开发板老版本的寄存器版本例程上面有用到,新版本例程一律没用了。
2,stm32f10x.h,是3.5的ST库函数头文件,在战舰板新版本例程,全部使用这个头文件了。
3,为了兼容不同的MDK版本,我们将这些所需的头文件,一律拷贝到了工程\SYSTEM\sys 文件夹了。