大家好,我是烟火。目前BMS软件工程师在职,利用自由时间,输出一些基础知识合集,一方面巩固,另一方面写博客作为成长记录。

人间清醒:
明明有能力可以变成更优秀的人 遇见更好的人 过更喜欢的生活 如果因为懒惰放弃了这种机会就太可惜了

一个完整的STM32工程到底由哪些文件组成?

应该是标准库文件+应用层代码。

接下来就以STM32入门教程的工程模板为例子进行梳理。

keil界面工程树。
我们看到整个项目只有一个Target1 也就是这个项目只有一个工程

(Keil一个项目可以包含多个工程的)

如下图所示整个项目包含了5个工程文件,可以通过设置选择特定的工程去运行。

本地磁盘中的项目


.uvprojx:工程文件(Keil V5)
User ,Start,Library文件夹是我们自己提前在项目中创建的,用来存放应用程序,和标准库文件。

而DebugConfig和Listings,Objects是我们在创建工程时自动生成的,用来存放一些调试文件。
Listing Files链接类型文件;
Object and HEX Files目标和Hex类型文件;
Debugger Files调试类型文件;

作为一个标准项目工程必须包含以下文件

汇编启动文件


就是startup_stm32f10x_md.s
该文件包含了STM32F10x微控制器的启动代码。它初始化设备并设置中断向量表。

启动代码执行以下任务:

  • 将堆栈指针设置为堆栈顶部。
  • 调用 SystemInit() 函数初始化系统。
  • 调用 main() 函数。

中断向量表在文件开头被定义。它包含每个中断的中断服务例程(ISR)的地址。ISR必须在应用程序代码中定义。

该文件应该被包含在项目中并与应用程序代码链接。

整个项目在上电的第一时间是运行的这个文件。

stm32f10xx.h

这是针对基于ARM Cortex-M3的STM32F10x微控制器系列的头文件。它包含了微控制器所支持的所有寄存器和外设的定义。该文件还包括用于配置和控制这些外设的宏和函数。

1 定义了HSE时钟频率的值

2 定义了启动HSE时钟的超时时间,HSI时钟频率的值

3 根据不同的芯片定义中断向量表结构体

4 包含一些头文件


这三个头文件的作用非常重要。下文进行讲解。

5 对一些数据类型进行重命名

6 为每个外设声明一个结构体类型,结构体中是外设的所有寄存器

7 内存地址分布

8 对每一个外设的基地址进行相应的结构体类型指针的强制类型转化,然后进行宏定义,这样就可以很轻松的对外设的寄存器进行操作。

9 对外设寄存器的位进行定义定义一些宏函数来方便开发人员对寄存器进行操作

10 定义USE_STDPERIPH_DRIVER


定义USE_STDPERIPH_DRIVER,包含了conf.h头文件。这一步非常重要。

core_cm3.h

CMSIS是Cortex微控制器软件接口标准(CortexMicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系列的一个标准,主要是为了提供通用api接口来访问内核和一些片上外设,提高代码的可移植性。

CMSIS有三个层:核内外设访问层CorePeripheral Access Layer(CPAL),中间件访问层Middleware Access Layer(MWAL),设备访问层(DevicePeripheral Access Layer)。

CPAL用于访问内核的寄存器和组件,如NVIC,调试系统等。该层是由ARM实现的。

MWAL用于对中间件的访问,现在该层还未实现。(也不知道所谓的中间件是什么东西)。

DPAL用于定义一些硬件寄存器的地址和一些外设访问函数,由芯片制造商实现。

CPAL层的实现就是Core_cm3.c文件,DPAL层的实现就是system_stm32f10x.c文件。

Core_cm3.c里有一些汇编关键字的宏定义,支持不同的编译器,还提供了访问内核寄存器的函数。在CMSIS升级到2.0版本时CMSIS的软件结构做了一些调整,去掉了core_cm3.c。ST的固件库也相应做了修改。在新的版本里只需要包含core_cm3.h,core_cmFunc.h,core_cmInstr.h,不需要core_cm3.c文件了。

提供了使用 NVIC的一些函数

外设基地址

stm32f1xx_conf.h

包含ST库的外设文件

此处定义

宏定义

system_stm32f1xx.h文件说明

system_stm32f1xx.h就是对一些时钟相关的函数进行声明,具体的函数实现在system_stm32f1xx.c中。

系统时钟设置

时钟函数

外设头文件

在STM32的开发中,外设头文件是非常重要的一种文件类型。它们是一组在C语言中定义的预编译指令,用于向编译器提供关于特定外设的信息。外设头文件的作用如下:

  1. 定义常量

外设头文件中定义了很多常量,这些常量可以用来设置外设的配置参数。比如,可以使用TIM2外设头文件中定义的常量来配置TIM2定时器的时钟分频系数。

  1. 定义数据类型

外设头文件中定义了很多数据类型,这些数据类型可以用来设置外设的寄存器。比如,可以使用GPIO外设头文件中定义的数据类型来设置GPIO的输入输出状态。

  1. 定义函数

外设头文件中定义了很多函数,这些函数可以用来操作外设。比如,可以使用DMA外设头文件中定义的函数来配置DMA通道的传输方式。

一份标准的STM32工程模板都需要哪些文件?(B站江科大自化协)相关推荐

  1. 计算机考试怎么考申论,公务员考试申论评分标准,这些你都知道吗?

    原标题:公务员考试申论评分标准,这些你都知道吗? 距离2019年多省公务员考试还剩两三天时间,很多考生对公务员考试的阅卷规则和答题格式并不清楚,其实了解阅卷规则和评分标准,对大家答题更有帮助.下面华图 ...

  2. 一份标准的渗透测试报告是什么样的?(附报告模板)

    一个完整的渗透测试工作流程中,实际有近一半时间都用在如何编写报告上,渗透测试工程师的工作,不仅需要具备高超的渗透测试水平,同样也需要把一个深奥的技术点解释的通俗易懂,即使是完全不懂安全的人也可以理解. ...

  3. 5.STM32外设都有哪几类寄存器?(详解)

    STM32外设都有以下几类寄存器:

  4. 标准的网页浏览器都提供一个功能:保留最近浏览过页面的历史记录。通过后退或向前按钮就能在历史记录之间跳转。现在,请你模拟这个功能,接收如下三条指令:1. BACK:回退功能,即回退到上一个访问的

    标准的网页浏览器都提供一个功能:保留最近浏览过页面的历史记录.通过后退或向前按钮就能在历史记录之间跳转. 现在,请你模拟这个功能,接收如下三条指令: 1. BACK:回退功能,即回退到上一个访问的页面 ...

  5. VS2008中自定义C++工程模板与修改新建文件默认编码的办法

    转自:http://blog.csdn.net/vagrxie/article/details/4665035 一.   需求 网上讲VS(以下VS均特指VS2008)自定义模板的不少,不过大部分都是 ...

  6. python标准库os.path中用来_Python标准库os.path中用来判断指定文件是否存在的方法是_____________。...

    Python标准库os.path中用来判断指定文件是否存在的方法是_____________. 答:exists() 通常,我们称脾为( ? ?) 答:后天之本 智慧职教: 生物与非生物的主要区别在于 ...

  7. STM32使用FreeMASTER+J-LINK+.axf文件显示数据波形

    STM32使用FreeMASTER+J-LINK+.axf文件显示数据波形 软件下载安装 FreeMster可以在NXP的官网直接下载,免费!当然下载前需要登录/注册账号.我现在用的是2.5版本的Fr ...

  8. 为什么C++模板函数的声明与实现都放在.h文件中

    引用C++primer的话:C++支持两种模板编译模式包含模式(Inclusion   Model )和分离模式(Separation Model) 1. 包含编译模式 在包含编译模式下,在每个模板被 ...

  9. php 上传sb2,基于标准的http来实现Android多文件上传

    实现多文件的上传,基于标准的http来实现. 多文件上传MyUploader类的实现: /** * * 同步上传多个文件 * 基于标准的http实现,需要在非UI线程中调用,以免阻塞UI. * */ ...

最新文章

  1. MySQL优化篇:explain性能分析
  2. R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(双分类变量分组可视化)实战(dot plot)
  3. python学习费用-在上海学Python贵吗?Python培训费用是多少
  4. 收藏/一文弄清楚强弱电机房位置大小及布置如何选择?
  5. Python中列表和字符串的反转
  6. css --- [学习笔记]背景图片小结 css三大特性
  7. ubuntu安装LDAP
  8. drools规则中调用其它规则_Makefile文件中包含哪些规则?
  9. 命名空间“System.Web”中不存在类型或命名空间名称“Optimization”解决方法
  10. 在网页HTML中嵌入QQ、MSN、旺旺、Gtalk快速对话框代码
  11. 安装DEEP LEARNING TOOL 0.4.3 EARLY ADOPTER
  12. php图片大马加后门,一次对php大马的后门的简单分析
  13. 开源办公系统:支持在线Office在线编辑、文档协同
  14. 风投围猎移动互联网:初现估值泡沫与马太效应
  15. Fishermen Gym - 101964E(二分+前缀数组)
  16. 华硕路由域名访问_动态域名是什么?
  17. ppp lcp协商报文有哪些_课后分享PPP协议第十三周
  18. excel文档打不开怎么修复?
  19. 关于Python控制打印机如何横向打印EXEL
  20. Outlook2007設置未讀郵件為紅色

热门文章

  1. 东莞面包车狂奔伤多人 10余警车围堵开枪撞停
  2. 【应用分身多开商店】苹果如何快捷不越狱实现多开应用?
  3. css绘制卡券优惠券_CSS 实现优惠券样式
  4. 酒店餐饮管理系统项目设计实现与源码
  5. 计算机毕业设计Java学校旧书交易网站(源码+系统+mysql数据库+lw文档)
  6. oracle触发器insert
  7. 东北大学计算机学院盲审,本学期硕士研究生学位论文匿名评审(即盲审)安排的通知...
  8. Element el-tag 标签详解
  9. 剪贴板中html文件格式,HTML 剪贴板格式
  10. 勤哲excel服务器 mysql_Excel Server Tutorial