STM32-Project10-11:初识 STM32 标准库;新建库函数版工程;

一.固件库文件分析

1-汇编编写的启动文件
startup_stm32f10x_hd.s:设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、对用C库函数_main最终去到C的世界

2-时钟配置文件
system_stm32f10x.c:把外部晶振时钟HSE=8M,经过PLL倍频为72M。

3-外设相关的
stm32f10x.h:实现了内核之外的外设的寄存器映射
xxx:GPIO、USRAT、I2C、SPI、FSMC
stm32f10x_xxx.c:外设的驱动函数库文件
stm32f10x_xxx.h:存放外设的初始化结构体,外设初始化结构体成员的参数列表,外设固件库函数的声明

4-内核相关的
CMSIS - Cortex 微控制器软件接口标准
core_cm3.h:实现了内核里面外设的寄存器映射
core_cm3.c:内核外设的驱动固件库

如NVIC(嵌套向量中断控制器)、SysTick(系统滴答定时器)
misc.h
misc.c

5-头文件的配置文件
stm32f10x_conf.h:头文件的头文件,包含所有外设头文件:不用一个一个包含了。

其实这个头文件被stm32f10x.h包含了,因此只需要包含stm32f10x.h即可包含所有头文件
//stm32f10x_usart.h
//stm32f10x_i2c.h
//stm32f10x_spi.h
//stm32f10x_adc.h
//stm32f10x_fsmc.h
......

6-专门存放中断服务函数的C文件-----中断功能太多单独做成文件
stm32f10x_it.c
stm32f10x_it.h

中断服务函数你可以随意放在其他的地方,并不是一定要放在stm32f10x_it.c

#include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>

int main(void)
{
    // 来到这里的时候,系统的时钟已经被配置成72M。
}


二.固件库组成结构

 

  Libraries:文件夹下是驱动库的源代码及启动文件,这个非常重要,我们要使用的固
件库就在这个文件夹里面。
 Project :文件夹下是用驱动库写的例子和工程模板,其中那些为每个外设写好的例程
对我们非常有用,我们在学习的时候就可以参考这里面的例程,非常全面,简直就是
穷尽了外设的所有功能。
Utilities :包含了基于 ST 官方实验板的例程,不需要用到,略过即可。
stm32f10x_stdperiph_lib_um.chm : 库帮助文档,这个很有用,不喜欢直接看源码的可
以在合理查询每个外设的函数说明,非常详细。这是一个已经编译好的 HTML 文件,
主要讲述如何使用驱动库来编写自己的应用程序。说得形象一点,这个 HTML 就是告
诉我们: ST 公司已经为你写好了每个外设的驱动了,想知道如何运用这些例子就来向
我求救吧。不幸的是,这个帮助文档是英文的,这对很多英文不好的朋友来说是一个
很大的障碍。但这里要告诉大家,英文仅仅是一种工具,绝对不能让它成为我们学习
的障碍。其实这些英文还是很简单的,我们需要的是拿下它的勇气。
其中进入 Libraries 文件夹看到,关于内核与外设的库文件分别存放在 CMSIS
STM32F10x_StdPeriph_Driver 文件夹中。
1.CMSIS文件夹

 

CoreSupport 文件夹中有 core_cm3.c core_cm3.h 两个文件。 Core_cm3.h 头文件里
面实现了内核的寄存器映射,对应外设头文件 stm32f10x.h ,区别就是一个针对内核的外设,
一个针对片上(内核之外)的外设。 core_cm3.c 文件实现了一下操作内核外设寄存器的函
数,用的比较少。
我们还需要了解的是 core_cm3.h 头文件中包含了“ stdint.h 这个头文件,这是一个
ANSI C 文件,是独立于处理器之外的,就像我们熟知的 C 语言头文件 “ stdio.h ” 文件一
样。位于 RVMDK 这个软件的安装目录下,主要作用是提供一些类型定义。如下
typedef unsigned char uint8_t;
  typedef unsigned short int uint16_t;
  typedef unsigned int uint32_t;
typedef unsigned __int64 uint64_t;
这些新类型定义屏蔽了在不同芯片平台时,出现的诸如 int 的大小是 16 位,还是 32
的差异。所以在我们以后的程序中,都将使用新类型如 uint8_t uint16_t 等。
在稍旧版的程序中还经常会出现如 u8 u16 u32 这样的类型,分别表示的无符号的 8
位、 16 位、 32 位整型。初学者碰到这样的旧类型感觉一头雾水,它们定义的位置在
STM32f10x.h 文件中。建议在以后的新程序中尽量使用 uint8_t uint16_t 类型的定义。
2.STM32F10x_StdPeriph_Driver 文件夹

 

src 里面是每个设 备外设的驱动源程序,inc 则是相对应的外设头文件。 src inc 文件夹是 ST 标准库的主要内容
3. stm32f10x_it.c stm32f10x_conf.h system_stm32f10x.c 文件
文件目录: Project\STM32F10x_StdPeriph_Template
在这个文件目录下,存放了官方的一个库工程模板,我们在用库建立一个完整的工程
时 , 还 需 要 添 加 这 个 目 录 下 的 stm32f10x_it.c stm32f10x_it.h stm32f10x_conf.h
system_stm32f10x.c 这四个文件。
stm32f10x_it.c :这个文件是专门用来编写中断服务函数的,在我们修改前,这个文件
已经定义了一些系统异常 ( 特殊中断 ) 的接口,其它普通中断服务函数由我们自己添加。但
是我们怎么知道这些中断服务函数的接口如何写?是不是可以自定义呢?答案当然不是,
这些都可以在汇编启动文件中找到,在学习中断和启动文件的时候详细介绍
system_stm32f10x.c :这个文件包含了 STM32 芯片上电后初始化系统时钟、扩展外部
存储器用的函数,例如我们前两章提到供启动文件调用的“ SystemInit ”函数,用于上电后
初始化时钟,该函数的定义就存储在 system_stm32f10x.c 文件。 STM32F103 系列的芯片,
调用库的这个 SystemInit 函数后,系统时钟被初始化为 72MHz ,如有需要可以修改这个文
件的内容,设置成自己所需的时钟频率,但鉴于保持库的完整性,我们在做系统时钟配置
的时候会另外重写时钟配置函数。
stm32f10x_conf.h :这个文件被包含进 stm32f10x.h 文件。当我们使用固件库编程的时
候,如果需要某个外设的驱动库,就需要包含该外设的头文件: stm32f10x_ppp.h ,包含一
个还好,如果是用了多外设,就需要包含多个头文件,这不仅影响代码美观也不好管理,
现我们用一个头文件 stm32f10x_conf.h 把这些外设的头文件都包含在里面,让这个配置头
文件统一管理这些外设的头文件,我们在应用程序中只需要包含这个配置头文件即可,我
们又知道这个头文件在 stm32f10x.h 的最后被包含,所以最终我们只需要包含 stm32f10x.h
这个头文件即可,非常方便。

三.建立模板步骤

1.
新建本地工程文件夹
为了工程目录更加清晰,我们在本地电脑上新建一个“工程模板”文件夹,在它之下
再新建 6 个文件夹,具体如下:

在本地新建好文件夹后,把准备好的库文件复制到相应的文件夹下:

 2.

新建工程,创建组文件夹到工程,添加文件到组文件下

 

3.小细节处理

C/C++ 选项卡中添加处理宏及编译器编译的时候查找的头文件路径。如果头文件路
径添加有误,则编译的时候会报错找不到头文件。把有头文件的文件夹全部包含进去,软件只能识别头文件的上一级目录文件夹,Keil太蠢。

 

 

 

在这个选项中添加宏,就相当于我们在文件中使用“ #define ”语句定义宏一样。在编
译器中添加宏的好处就是,只要用了这个模版,就不用源文件中修改代码。
STM32F10X_HD 宏:为了告诉 STM32 标准库,我们使用的芯片类型是 STM32
型号是大容量的,使 STM32 标准库根据我们选定的芯片型号来配置。
USE_STDPERIPH_DRIVER 宏:为了让 stm32f10x.h 包含 stm32f10x_conf.h 这个头
文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dpq666dpq666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值