ST标准外设库文件解析以及工程建立
STM32L4库学习总结

STM32L4库学习总结ST为开发者提供了非常方便的开发库。
到目前为止,有标准外设库(STD库)、HAL库、LL库三种。
前两者都是常用的库,后面的LL库是ST最近才添加,随HAL源码包一起提供,目前支持的芯片也偏少。
一般来说STD库和LL库是不兼容的。
标准外设库(Standard Peripherals Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。
这应该是目前使用最多的ST库。
几乎全部使用C语言实现。
但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。
标准外设库仍然接近于寄存器操作,主要就是将一些基本的寄存器操作封装成了C函数。
开发者需要关注所使用的外设是在哪个总线之上,具体寄存器的配置等底层信息。
不支持从STM32L0、L4和F7以后的芯片。
HAL是Hardware Abstraction Layer的缩写,中文名:硬件抽象层。
HAL库是ST为STM32最新推出的抽象层嵌入式软件,可以更好的确保跨STM32产品的最大可移植性。
该库提供了一整套一致的中间件组件,如RTOS,USB,TCP / IP和图形等。
HAL库是基于一个非限制性的BSD许可协议(Berkeley Software Distribution)而发布的开源代码。
ST制作的中间件堆栈(USB主机和设备库,STemWin)带有允许轻松重用的许可模式,只要是在ST公司的MCU 芯片上使用,库中的中间件(USB 主机/设备库,STemWin)协议栈即被允许随便修改,并可以反复使用。
至于基于其它著名的开源解决方案商的中间件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的用户许可条款。
可以说HAL库就是用来取代之前的标准外设库的。
相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。
STM32 LL 库使用指南说明书

STM32 LL库使用指南---By Fengzi熟悉STM32的都知道ST官方提供了非常方便好用的库函数供用户使用,多数人都使用过STM32标准外设库,STM32Cube库(即HAL库),这个LL库是什么鬼,却从来没听说过。
好吧,我承认这个名字是我自己XJB取的。
目录一、初识LL 库 (1)二、怎么使用LL库 (3)三、新建STM32LL库工程模板 (5)四、第一个程序——点亮LED (8)五、添加其他程序功能 (10)………………………………………………………………………………………………………………………………………………….一、初识LL 库最近论坛发的STM32L476RG Nucleo开发板到手了,准备学习玩耍,当然第一步就是下载资料,于是我下载STM32L4Cube 1.1.0版本,打开逐个查看,好像和以前一样的,没什么特别嘛,于是准备开始开发。
等等,好像还真发现了有点不一样:熟悉HAL库的都知道,该库的文件几乎都是以stm32xxx_hal_xxx.h/.c命名的,为了和以前的标准库有个区分,上图中那些是什么鬼前辈说,遇到问题赶紧查手册,于是我果断打开STM32L4Cube库的说明手册(UM1884):原来这个东西叫做Low Layer APIs,作为英文渣渣表示实在不习惯洋里洋气的高大上名字,于是擅自把他叫做【STM32LL库】了(不服的你咬我啊)。
从这里看好像是说这个东东比HAL库更接近硬件,到底什么鬼,还不清楚。
但是以前好像没见过这个东西啊,就算是STM32L4Cube的1.0.0版本中都没有。
看看Cube发行历史:原来LL库是在1.1.0版本才加上的,大概意思就是:1.LL APIs是寄存器级的编程,嗯,也就是说我们常说的直接操作寄存器吧。
2.LL APIs适用于xxx等一大堆外设3.LL APIs函数全部定义为static inline函数,放在对应的头文件中,用户使用需要包含相关头文件4.参考这两个文档看看LL库文件在Cube库中的位置,有20多个文件,全部以stm32l4xx_ll_xxx.h命名:STM32Cube_FW_L4_V1.1.0\Drivers\STM32L4xx_HAL_Driver\IncSTM32L4是面向低功耗市场的,同时不失高性能,功耗和性能往往是两个矛盾的东西,ST在硬件设计上想了各种办法来实现兼顾低功耗高性能(例如各种低功耗模式,LP外设等),而在软件层面,程序也讲求效率,LL库全是直接操作寄存器,直接操作寄存器往往效率较高,而且函数定义为内联函数,调用函数时不是堆栈调用,而是直接把函数的代码嵌入到调用的地方,利于提高代码相率,我想这也是ST在STM32L4系列中推出这个直接操作寄存器的LL库的原因之一吧。
STM32入门简易教程

器配置等详细信息。 3、 STM32F103RB 数据手册
a) 产品的基本配置(内置 FLASH 和 RAM 的容量、外设模块的种类和数量等); b) 管脚的数量和分配,电气特性,封装信息和订购代码等。 4、 STM32 开发板手册 与开发板配套的参考资料,有很多经验值得借鉴。 5、 stm32 固件库 a) 相关定义,文档约定和固件库规则; b) 库的架构,安装指南及使用实例; c) 每个外围模块的函数及解释。 6、 开发板原理图 必不可少的硬件电路参考。 7、 互联网 取之不尽的知识宝库。
意法半导体是市场上第一家提供基于 Cortex-M3 内核的无传感器的磁场定向电机控制
解决方案的厂商。这套工具证明 STM32 的内核和专用电机控制外设都有充足的处理能力来 优化驱动器的性能,最小化系统总体成本。STM 微控制器在 25 微秒内即可执行一整套无传 感器三相无刷永磁同步电机(PMSM)矢量控制算法,大多数应用任务占用 CPU 资源比率 小于 30%,为 CPU 执行其它应用任务(如需要)预留了充足的处理能力。永磁电机同步电 机控制解决方案的代码大小少于 16 千字节。
二、重要的参考资料
1、 Cortex-M3 权威指南 宋岩 译 权威资料的精简版,思路清晰,有条理,适合学 Cortex-M3 处理器的所有人。
2、 STM32 技术参考手册 a) STM32 微控制器产品的技术参考手册是讲述如何使用该产品的; b) 包含各个功能模块的内部结构、所有可能的功能描述、各种工作模式的使用和寄存
在性能方面,STM32 系列的处理速度比同级别的基于 ARM7TDMI 的产品快 30%,换 句话说,如果处理性能相同,STM32 产品功耗比同级别产品低 75%。同样地,使用新内核 的 Thumb 2 指令集,设计人员可以把代码容量降低 45%,几乎把应用软件所需内存容量降 低了一半。此外,根据 Dhrystones 和其它性能测试结果,STM32 的性能比最好的 16 位架构 至少高出一倍。
第三章 MDK软件入门 新建MDK工程 正点原子探索者STM32F4开发板 STM32F4开发指南

3.1 STM32 官方标准固件库简介
ST(意法半导体)为了方便用户开发程序, 提供了一套丰富的 STM32F4 固件库。 到底什么是 固件库?它与直接操作寄存器开发有什么区别和联系?很多初学用户很是费解,这一节,我们 将讲解 STM32 固件库相关的基础知识, 希望能够让大家对 STM32F4 固件库有一个初步的了解, 至于固件库的详细使用方法,我们会在后面的章节一一介绍。 固件库包光盘路径(是压缩包形式,大家解压即可) : \8,STM32 参考资料\STM32F4xx 固件库\stm32f4_dsp_stdperiph_lib.zip 同时,大家也可以到我们开源电子网 下载。 3.1.1 库开发与寄存器开发的关系 很多用户都是从学 51 单片机开发转而想进一步学习 STM32 开发,他们习惯了 51 单片机 的寄存器开发方式,突然一个 ST 官方库摆在面前会一头雾水,不知道从何下手。下面我们将 通过一个简单的例子来告诉 STM32 固件库到底是什么,和寄存器开发有什么关系?其实一句 话就可以概括:固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道, 向上提供用户函数调用的接口(API) 。 在 51 的开发中我们常常的作法是直接操作寄存器,比如要控制某些 ቤተ መጻሕፍቲ ባይዱO 口的状态,我们直 接操作寄存器: P0=0x11; 而在 STM32 的开发中,我们同样可以操作寄存器: GPIOF->BSRRL=0x0001; //这里是针对 STM32F4 系列 这种方法当然可以,但是这种方法的劣势是你需要去掌握每个寄存器的用法,你才能正确使用 STM32,而对于 STM32 这种级别的 MCU,数百个寄存器记起来又是谈何容易。于是 ST(意法 半导体)推出了官方固件库, 固件库将这些寄存器底层操作都封装起来, 提供一整套接口 (API) 供开发者调用,大多数场合下,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些 函数即可。 比如上面的控制 BSRRL 寄存器实现电平控制,官方库封装了一个函数: void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { GPIOx->BSRRL = GPIO_Pin; }
stm32f411标准库例程

stm32f411标准库例程STM32F411是一款高性能的32位微控制器,广泛应用于各种嵌入式系统中。
它具有强大的处理能力和丰富的外设资源,可以满足各种复杂的应用需求。
为了方便开发者使用STM32F411,STMicroelectronics提供了一套完整的标准库例程,本文将介绍一些常用的例程及其使用方法。
首先,我们需要了解一下STM32F411的标准库。
标准库是STMicroelectronics为STM32系列微控制器提供的一套软件库,包含了丰富的函数和驱动程序,可以方便地操作各种外设和实现各种功能。
标准库的使用可以大大简化开发过程,提高开发效率。
在使用标准库例程之前,我们需要先准备好开发环境。
首先,我们需要安装Keil MDK开发工具,这是一款专门用于ARM微控制器开发的集成开发环境。
其次,我们需要下载并安装STM32CubeMX软件,这是一款用于生成STM32项目代码的工具。
最后,我们需要下载并安装STM32CubeF4软件包,这是一套包含了STM32F411的标准库的软件包。
安装好开发环境后,我们可以开始使用STM32F411的标准库例程了。
下面以GPIO控制为例,介绍一下标准库例程的使用方法。
首先,我们需要在STM32CubeMX中配置GPIO外设。
打开STM32CubeMX软件,选择STM32F411芯片,然后点击"Pinout & Configuration"选项卡。
在这个选项卡中,我们可以看到芯片上的各个引脚,我们需要选择一个引脚作为GPIO输出引脚。
选择一个引脚后,点击右键,选择"GPIO_Output"选项,将该引脚配置为输出模式。
配置完成后,点击"Project"选项卡,生成代码。
生成代码后,我们可以在Keil MDK中打开生成的工程。
在工程中,我们可以看到生成的代码文件,其中包含了GPIO的初始化和控制函数。
STM32工程模板

你是问有官方固件库创建工程吧?我这里给你说说MDK的创建方法,如果你用的时IAR环境也差不多。
1.解压stm32f10x_stdperiph_lib.zip 可以从ST官方网站免费下载。
最新标准库版本为3.5.02.创建一个Demo文件夹2.1 新建子文件夹User,用于存放用户源程序2.2 新建子文件夹Project,用户KEIL工程文件2.3 在Project下依次创建Obj和List子文件夹,存放编译过程中产生的中间文件。
3. 复制源代码到Demo文件夹3.1 将stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.1.2Li braries文件整体复制到Demo文件夹下。
这就是ST的标准库,是以源代码形式提供的。
3.2 将库中的演示代码IOToggle中的文件复制到Demo\User文件夹.4. 新建一个Keil MDK工程4.1 启动Keil MDK,点击菜单New uVision Project,然后按向导进行操作4.2 选择CPU类型为STM32F103ZE (这是安富莱STM32开发板采用CPU类型)4.3 当提示是否复制启动代码时,请选择否。
(我们用最新的库中的启动代码,不用Keil软件自带的旧版本启动文件)4.4 根据自己的需要修改Target名字。
(名字任意)4.5 为了便于代码管理,在这个Project下创建几个Group (名字可以任意)User : 存放用户自己写的源代码RVMDK : 存放启动文件(汇编文件)StdPeriph_Driver : 存放ST标准库文件CMSIS : 存放CMSIS接口文件(这也是库的一部分)4.6 创建好Group后,我们开始依次添加文件。
5. 修改源代码。
我们将修改main.c 文件,换成我们自己跑马灯程序。
6. 配置工程, 点击“Options”按钮6.1 切换到Output。
选择Object文件夹。
STM32F10xxx标准外设库移植技术研究

文 件 夹 “ sr 中 添加 的文 件 是 上 面 2 中提 到 的 物 U e” )
理 文 件 夹 “ e” 的 “t 21 x ic 、 man ” Usr 中 s m3 f0 t ” “ i. 文 . C
件 夹 “ tr p 中添 加 的 文件 是 2 中提 到 的物 理 文 Sat ” U )
个 “ E DMEtt文本 文件 . 文 本文 件放 在 “ . R A . ” x 该 Us
e” r 目录 下 ( 文 本 文 件 可 作 为 编 程 日志使 用 ) 此 。在 “ VMD 文件 夹下 建立 “ i ” “ B ” R K” Ls 、O J 两个 文件 夹 。 t 将 标 准 外 设 “ T 2 1x Sd eih Li V3 S M3 F 0 t r b P p .
S M3 F 0 x T 2 1x x标 准外设 库 的流 程 。
1 下 载库 包 。 )
S M 3 F 0 tP r h Lb V31 可 从 ht: T 2 1x Sd ei i p .. 0 t / p/
“ OC 五个 逻 辑 目录 . 个逻 辑 目录可 通 过 最右 边 D ” 每
用 驱 动 程序 ;Lba e”文 件 夹 包 含 了标 准 外 设库 “ irr s i 驱 动 头 文 件 和 源 文 件 以 及 内 核 文 件 。 在 进 行 S M3 F 0 x T 2 1x x标 准 外 设 库 移 植 时 主 要 是 使 用 “ i L.
bais 文件 夹 中的 内容 。 rr ” e
“rjcke io rjc…”在 保 存 工程 文 件 Poetnw Uvs n poet . \ i
奋斗STM32开发板uIP1.0 以太网例程讲解

奋斗版 STM32 开发板例程文档———uIP1.0 ENC28J60 以太网例程uIP1.0 ENC28J60 以太网例程实验平台:奋斗版STM32开发板V2、V2.1、V3 实验内容:本例程演示了在奋斗STM32开发板上完成ARP,ICMP,TCP服务器、WEB 服务器以及UDP服务器,该实验学习了基于uIP1.0网络协议栈的程序编制。
预先需要掌握的知识1.ENC28J60ENC28J60是MICROCHIP公司的带SPI 接口的独立以太网控制器, 以太网控制器特性 • IEEE 802.3 兼容的以太网控制器 • 集成MAC 和10 BASE-T PHY • 接收器和冲突抑制电路 • 支持一个带自动极性检测和校正的10BASE-T 端口 • 支持全双工和半双工模式 • 可编程在发生冲突时自动重发 • 可编程填充和CRC 生成 • 可编程自动拒绝错误数据包 • 最高速度可达10 Mb/s 的SPI 接口 缓冲器 • 8 KB 发送/ 接收数据包双端口SRAM • 可配置发送/ 接收缓冲器大小 • 硬件管理的循环接收FIFO • 字节宽度的随机访问和顺序访问(地址自动递增) • 用于快速数据传送的内部DMA • 硬件支持的IP 校验和计算 介质访问控制器(MAC)特性 • 支持单播、组播和广播数据包 • 可编程数据包过滤,并在以下事件的逻辑“与” 和“或”结果为真时唤醒主机: - 单播目标地址 - 组播地址 广播地址 - Magic Packet - 由64 位哈希表定义的组目标地址 - 多达64 字节的可编程模式匹配(偏移量可由用户定义)淘宝店铺:1奋斗版 STM32 开发板例程文档———uIP1.0 ENC28J60 以太网例程• 环回模式 物理层(PHY)特性 • 整形输出滤波器 • 环回模式 工作特性 • 两个用来表示连接、发送、接收、冲突和全/ 半双工状态的可编程LED 输出 • 使用两个中断引脚的七个中断源 • 25 MHz 时钟 • 带可编程预分频器的时钟输出引脚 • 工作电压范围是3.14V 到3.45V • TTL 电平输入 • 温度范围:-40°C 到+85°C (工业级), 0°C 到 +70°C (商业级)(仅SSOP 封装) • 28 引脚SPDIP、SSOP、SOIC 和QFN 封装概述ENC28J60 是带有行业标准串行外设接口(SerialPeripheral Interface,SPI)的独立以太网控制器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章ST标准外设库和工程文件的建立在本章我们是基于ST公司 3.5版本的标准外设库来讲解,其它半导体公司的库函数是不一样的,所以不能完全的照搬,不过工程的建立需要哪些文件可以做一个参考。
2.1标准外设库文件介绍首先我们要先介绍一下这个ST公司这个官方的 3.5版本的标准外设库,了解其架构,便于我们以后学习利用。
知道其结构之后,在我们的学习过程中会方便很多。
首先我们要从官网下载其 3.5版本的外设库文件,然后解压。
打开标准外设库文件,如图2-1所示,我们看到四个文件夹,一个网页文件和一个chm文件(后面我们会称之为帮助文件)。
首先我们打开这个网页,我们可以看到是关于ST公司标准外设库各个版本的简单介绍,简单的介绍了不同的版本做了哪些改动,可以大概的浏览一下。
那个帮助文件,我们后边再做详细介绍。
图2-1接下来介绍这四个文件夹,第一个_htmresc文件夹里面是ARM和ST公司的两个logo,对于我们没用。
第二个文件是Libraries,这个文件夹比较重要,我们的外设库和内核的库文件都在这个里面。
打开Libraries,里面有两个文件夹,CMSIS和STM32F10x_StdPeriph_Driver。
CMSIS文件夹中存放的是内核的库文件,CMSIS文件夹中东西比较碎,后面我们要用到的文件后面会介绍。
STM32F10x_StdPeriph_Driver里面存放的是芯片外设的库文件,其中库文件分为源文件和头文件,分别存在src和inc文件夹。
第三个文件夹Project,里面有两个文件夹,STM32F10x_StdPeriph_Examples和STM32F10x_StdPeriph_Template,其中Examples文件夹中是基于STM32F10x各个外设的官方给的例程,当我们用到这些外设时,可以参考这些例程里面的外设的配置。
Template文件夹中是ST公司建的一个工程文件,基于五种开发环境建立的工程模板,我们常用的是MDK 和EWARM。
打开MDK文件夹,里面有一个建好的工程文件。
最后一个文件夹Utilities,里面是基于ST官方出的一些开发板封装成库的一些驱动文件(只针对他官方的开发板可以用)。
所以我们要用到的就是第二个和第三个文件夹,里面有我们需要的一些文件。
2.2 keil工程的建立首先我们在你要放置工程的盘符下面,要建立一个文件夹,文件名可以随便命名,在该文件夹下再创建四个文件夹分别是Libraries,Project,User,Doc。
文件夹名字也是随意的,可自由命名。
首先我们要把3.5版本库文件中的Libraries文件夹下的STM32F10x_StdPeriph_Driver文件夹放到我们建立的Libraries文件夹下。
在我们自己建的Libraries再建一个文件夹CMSIS,同时在CMSIS文件夹下创建Startup文件夹,把以下路径的文件放到CMSIS文件夹下。
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport中的两个文件(core_cm3.c和core_cm3.h)。
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下的三个文件(system_stm32f10x.c、system_stm32f10x.h、stm32f10x.h)。
把这五个文件放进我们自己创建的CMSIS文件夹下,STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\ startup\arm把该路径下的所有文件放入我们在CMSIS文件夹下的Startup文件夹下。
接下来是Project文件夹,在该文件夹下创建两个文件夹List和obj,用来存放产生的编译和链接文件。
同时Project文件夹存放的是我们的工程文件。
User文件夹下创建一个Main的文件,Main文件夹用来存放我们的主函数和中断服务程序以及配置文件。
在以后的工程中我们可以把我们自己编写的模块的驱动文件放在User文件夹下面。
我们要把库文件中Project\STM32F10x_StdPeriph_Template路径下的main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h四个文件放在上面的Main文件夹下。
Doc文件夹下创建一个TXT文档,命名为Readme.txt,用以记录程序的说明和修改。
最后的文件结构如图2-2所示,图2-2前期准备工作已经完成,接下来就开始新建我们的工程文件,打开keil软件,点击project,新建工程。
如图2-3所示图2-3接下来选择工程文件保存的路径,选择我们刚才建立的工程文件夹下的project文件夹。
点击保存,工程名字可以随便写,可根据你要编写的程序的功能来命名你的工程名字,比较方便记忆,在这里我们命名为project。
如图2-4所示图2-4然后是添加对应的芯片型号,我们的开发板使用的是STM32F103ZET6,所以在这里我们选择STM32F103ZE,我们可以看到左边是芯片的型号选择,右边是该芯片的一些信息,包含有什么外设以及内存大小等信息。
如图2-5所示图2-5点击OK之后,会提示你是否添加启动文件,在这里我们选择否,因为后面我们会自己添加。
如图2-6图2-6接下来就要添加各种文件,如图2-7所示,右键点击左侧上边的工程名字然后点击下面列表中的Manage Components选项,或者右上角的图标都可以。
图2-7接下来会弹出如图2-8所示的界面,我们在该界面中添加需要的各种文件。
图2-8我们可以看到在图2-8中,最右边是我们的工程名字,双击工程名,修改为project,中间的大方框是我们的工程的文件夹,为了方便我们文件分类,当我们的文件多了之后,需要建立文件夹进行分类,以便于管理。
可以看到上面的两个小图标,第一个是添加新文件夹,第二个是删除,后面的两个是移动文件夹的位置的。
在这里说明一下,这里我们添加的文件夹的名字和我们之前在电脑上建立的文件夹的名字是没有什么关系的,只不过为了方便记忆等原因,我们可能会采取命名方式差不多,大家根据自己的习惯可以自由命名。
最后一个大的方框是需要添加的文件。
在第二个方框中添加以下文件夹名字CMSIS,StdPeriph_Driver,Main,Doc。
对这四个文件夹做一个说明,第一个CMSIS里面存放的是内核文件,第二个StdPeriph_Driver是STM32的外设驱动库函数,第三个Main是用户文件,第四个Doc是程序的说明文件。
添加之后如图2-9所示图2-9首先选定第一个文件夹CMSIS,然后点击第三个方框下的Add Files,添加启动文件和一些内核文件。
选择刚才我们建立的工程文件路径Libraries\CMSIS\startup,如图2-10所示,下边的文件类型要选择All files,才可以显示出里面的文件。
我们可以看到有8个文件,我们只需要其中一个。
Ld是小容量的,flash大小为16-32KMd是中容量的,flash大小为64-128KHd是大容量的,flash大小为256-512KXl是超大容量的,flash大小为1M的Cl指的是互联型的,比如105,107系列等Vl指的是超值型系列的,这个只有STM32F100XX才用的我们用的芯片是STM32F103ZET6,在上面芯片选型的时候,从图2-5里面可以看出Flash大小为512KB,所以在这里我们选择hd,点击Add添加。
图2-10然后返回到上一级文件夹Libraries\CMSIS,添加system_stm32f10x.c和core_m3.c文件,如图2-11所示,双击文件名也可以添加。
图2-11点击close关闭,接下来首先选定图2-9界面中第二个方框中的第二个文件夹StdPeriph_Driver,然后点击Add File按钮,把上面所建立的工程文件夹的Libraries\STM32F10x_StdPeriph_Driver\src路径下的所有文件都添加进去,添加之后如图2-12所示。
这里的文件是STM32外设的驱动库函数,这里我们选择了全部添加。
以后熟练了,可以有选择性的添加,用到什么外设模块只添加对应的外设驱动函数,可以节省编译的时间。
图2-12然后选定第三个文件夹Main,点击Add Files,添加User\Main路径下的源文件(main.c和stm32f10x_it.c),如图2-13所示。
main.c是我们的所要写的主程序,stm32f10x_it.c文件里面是我们所要用到的中断服务函数。
图2-13最后选定第四个文件夹Doc,点击Add Files,添加Doc文件夹中的Readme.txt文件,主要是描述程序的修改和使用说明。
添加完毕,点击图2-8下方的的OK 按钮,则keil左侧的工程结构如图2-14所示。
图2-14源文件添加完毕之后,我们要添加头文件也就是.h文件。
点击工具栏中的Target Options 按钮,出现设置选项框,在弹出的对话框中选择Output选项卡,如图2-15所示,下面的复选框是选择是否产生hex文件,根据需要生成,没需要的话,可以不用选择。
然后点击上面的按钮,选择编译产生的文件存放的路径,这里我们选择Project\obj路径,然后点击下方的Ok按钮就可以了这里主要是为了让工程文件看起来比较有条理,把编译产生的文件放在一个文件夹中,不至于看起来工程文件比较乱,同时我们上面提到的hex文件也在该文件夹中,用到的时候我们可以在这个文件夹中找。
图2-15然后选择Listing选项卡,如图2-16所示,点击红色方框内的图标选择链接产生的文件存放的路径,这里我们选择Project\List。
图2-16然后选择C/C++的选项卡,如图2-17所示。
第一个方框中是宏定义的选项,在这里宏定义和在程序里面进行宏定义效果是一样的,后面会有用到。
再往下看红色方框是keil对程序的优化级别,一般我们选择不优化,当代码量较大时,可以选择优化,但是优化之后可能会造成程序不能正常运行,所以要慎重选择。
最下面的红色方框就是我们的头文件的路径。
点击最右边的按钮开始添加路径。
图2-17如图2-18所示,点击添加按钮,下面会出现添加路径的输入框,然后点击输入框右边的添加按钮会弹出路径窗口,然后依次添加图中标示的1、2、3三个文件夹路径,因为这三个文件家中存放的有我们要用的头文件。
图2-18添加完成之后,如图2-19所示图2-19点击OK键,添加完成。