固件库结构

  本文使用的固件库是STM32F10x_StdPeriph_Lib_V3.5.0,可以在官网获取。该固件库包含四个文件夹和一个库的说明文档,如下图所示,stm32f10x_stdperiph_lib_um这个英文的帮助文档非常有用,可以很方便地了解某个库函数的使用方法。

Project

  Project文件夹是一些写好的官方例程,便于学习和开发。

Libraries/CMSIS/CoreSupport

  Libraries文件夹下包含了固件库的源代码和启动文件,是固件库的核心所在。如果想要自己建库,就必须包含该文件下大部分源代码。Libraries下包含了CMSISSTM32F10x_StdPeriph_Driver这两个子文件夹,前者是内核相关文件,后者是各种外设的驱动文件。

  CMSIS的组织结构如下图所示,包含了CoreSupportDeviceSupport。其中CoreSpport下是core_cm3的源文件和头文件,与内核寄存器映射相关,一般不需要用户了解和更改。

  

Libraries/CMSIS/DeviceSupport

  DeviceSupport下包含了三个重要的文件,如下图所示。stm32f10x.h实现了片上外设寄存器的映射,例如GPIO寄存器、NVIC中断寄存器等等。此外,它还include了一些重要头文件,例如stdint.h——定义了各种数据类型、core_cm3.hstm32f10x_conf.h——外设头文件的管家,include了大部分外设驱动头文件、system_stm32f10x.h等。所以,一般在用户文件main.c里只要include stm32f10x.h就可以实现大部分头文件的包含。

  system_stm32f10x的源文件和头文件实现了STM32上电时的RCC时钟配置。

  

  DeviceSupport下的startup就是启动文件了,根据设备类型,启动文件有很多种,如下图所示,其中基本型芯片的启动文件有startup_stm32f10x_ld.sstartup_stm32f10x_md.sstartup_stm32f10x_hd.sstartup_stm32f10x_xd.s,分别匹配16~32k、64~128k、256~512k、512~1024k的Flash容量。以STM32F103C8为例,其FLASH容量为64k,因此启动文件选择startup_stm32f10x_md.s

Libraries/STM32F10x_StdPeriph_Driver

  回头看STM32F10x_StdPeriph_Driver,其下的内容就纯粹很多了,只包含incsrc文件夹,分别是外设头文件和源文件的集合。

自定义工程模板

工程文件组

  由于固件库默认使用的设备型号跟我们自己的芯片会有差异,这时候就需要自己来新建工程模板。首先,新建文件结构如下图所示,Doc存放工程代码的说明文档,Libraries跟官方和固件库相同,Project存放工程文件,User存放用户修改创建的代码文件。

  

  

  先从官方固件库中拷贝Libraries,然后还需要从官方固件库的例程中拷贝三个文件:stm32f10x_conf.hstm32f10_it.cstm32f10_it.h。这三个文件所在位置如下左图所示,拷贝到User文件夹下后如右图所示。

                  

  接下来,打开keil5软件,新建工程,选择设备,这里以STM32F103C8为例,如下图所示:

  添加工程文件夹,效果如下:

              

  分别为各文件夹添加源代码文件,只要添加.c和启动文件即可,结果如下:

  最后,我们还缺最重要的main.c文件,可以自己创建一个,并且添加到工程目录中的USER下,main.c内容如下:

#include "stm32f10x.h"

int main()
{
while();
}

配置魔术棒选项

  Output选项卡,将输出文件定位到工程目录的Output文件夹下(如果不存在,可以新建一个),并且勾选HEX选项,如下图所示:

   

  

  C/C++选项卡下,选择头文件包含路径(将文件夹中含头文件代码的目录都添加进来),添加两个宏定义(否则需要在代码中更改添加),结果如下:

   

  

  Linker选项卡下配置实际使用的仿真器,这里我使用的是ST-Link。

  

  到此为止,进行编译,如果没有错误和警告,则大功告成。

STM32固件库和自定义工程模板的更多相关文章

  1. 第9章 初识STM32固件库

    第9章     初识STM32固件库 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...

  2. 第9章 初识STM32固件库—零死角玩转STM32-F429系列

    第9章     初识STM32固件库 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...

  3. STM32固件库

    一.STM32固件库开发和传统寄存器开发方式的区别 二.CMSIS标准 CMSIS标准--Cortex Microcontroller Software Interface Standard,是ARM ...

  4. STM32F1固件库文件讲解与基于固件库新建MDK工程模板

    操作系统:win10 1.文件目录 (在cmd下用"cd 文件夹" 进入到要显示的文件夹,如cd d:\en.stsw-stm32054,然后输入tree 回车就会出现上图的目录结 ...

  5. STM32固件库文件分析

    STM32固件库文件分析 1.汇编编写的启动文件 startup/stm32f10x.hd.s:设置堆栈指针,设置pc指针,初始化中断向量,配置系统时钟,对用c库函数_main最后去c语言世界里. 2 ...

  6. STM32固件库详解

    STM32固件库详解   emouse原创文章,转载请注明出处http://www.cnblogs.com/emouse/ 应部分网友要求,最新加入固件库以及开发环境使用入门视频教程,同时提供例程模板 ...

  7. (一)STM32固件库详解(转载)

    本篇博文是转载自emouse,因为不能直接转载,所以是复制过来再发布的. emouse原创文章,转载请注明出处http://www.cnblogs.com/emouse/   1.1 基于标准外设库的 ...

  8. 在IAR(EWARM)中移植STM32固件库

    一.移植环境说明 (1).win10系统 (2).IAR(EWARM)7.7 (3).STM32标准固件库3.5.0 http://www.st.com/content/st_com/en/produ ...

  9. STM32固件库模板下载以及固件库学习方法

    固件库模板下载 固件库模板新建过程: 下载我们上节的固件库文件 电脑新建一个文件夹命名为Fwlib-Template,在此文件夹下分别新建DOC Libraries Project User 这四个文 ...

随机推荐

  1. 宝塔面板管理阿里云服务器FTP不能用

    # 宝塔面板管理阿里云,ftp不能用 解决方法 搜ftp点击设置 然后Ctrl+F搜索ForcePassiveIP 注意2在默认情况下是带#号的,去掉#号,后面的ip地址是阿里云的公网ip 重启,再次 ...

  2. C语言秋季作业4

    本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 作业连接 我在这个课程的目标是 熟练掌握for循环语句的运用 这个作业在那个具体方面帮助我实现目标 通过作业练习 参考文献 文 ...

  3. Spring注解开发系列专栏

    这个系列主要是讲Spring注解的使用,可以为后面SpringBoot的学习带来一定的帮助.我觉得从Spring直接过度到SpringBoot还是有点快,还是得需要一个演变的过程.从Spring开发, ...

  4. NodeJS+axios上传图片

    前端js部分 changeEvent (e) { ------ //change事件方法 let oFile = e.target.files[0] ------ //获取文件对象 let param ...

  5. linux下oracle调试小知识

    1.oracle 安装下的/u01/diag/rdbms/orcl/HOF/incident目录下是什么文件?答:每当一个错误发生的时候,oracle会创建一个incident,并且分配一个INCID ...

  6. ubuntu 中使用makefile组织c++多文件的简陋方法

    现有类定义Sales_item.hpp Sales_item.cpp 主函数my7_31.cpp(代码来源于c++primer 习题解答7_31) 希望使用makefile在Ubuntu中进行编译链接 ...

  7. Java虚拟机系列一:一文搞懂 JVM 架构和运行时数据区

    前言 之前写博客一直比较随性,主题也很随意,就是想到什么写什么,对什么感兴趣就写什么.虽然写起来无拘无束,自在随意,但也带来了一些问题,每次写完一篇后就要去纠结下一篇到底写什么,看来选择太多也不是好事 ...

  8. input输入框联想功能

    一直想找一个可以连接后台,可以根据后台内容的input输入框,可以实现联想功能,网上找到一个简单的静态页面的输入框联想,经过一番修改之后终于可以实现读取自己定义的数组的联想了,其实也比较简单就是格式的 ...

  9. Sea.js 手册与文档

    Sea.js 手册与文档 首页 | 索引 目录 何为 CommonJS 何为 CommonJS 模块 为何封装模块 何为 CommonJS? CommonJS 是一个有志于构建 JavaScript ...

  10. 如何快速打好Java基础?

    二哥,我是一名大学生,专业是电力工程,但想自学 Java,如何快速打好基础呢? 微信上 tison 向我提出了这个问题.我想我是有资格来回答的,从北京奥运会那年开始学 Java,到现在已经有 10 多 ...