目录

一、前言

二、CMSIS标准

三、CMSIS文件

1、Include文件

2、Source文件

四、总结


一、前言

使用过ARM单片机的朋友肯定听说过CMSIS,可以说CMSIS是开启ARM单片机的金钥匙,是不是想到单片机的启动文件了呢,对的,启动文件只是CMSIS的一部分,你是不是跟我一样对它感到既熟悉又陌生呢?

二、CMSIS标准

CMSIS ( Cortex Microcontroller Software Interface Standard ),翻译过来是ARM Cortex™ 微控制器软件接口标准 。这个标准是谁提的呢?提的这个标准是用来干什么的呢?这里不得不说说ARM和STM32、TI这些公司的关系了,ARM 是一个做芯片标准的公司,它负责的是芯片内核的架构设计,而TI、ST这样的公司,他们并不做标准,他们是芯片公司,他们是根据 ARM 公司提供的芯片内核标准设计自己的芯片。所以,任何一个做 Cortex M3 芯 片 ,他们的内核结构都是一样的,不同的是他们的存储器容量, 片上外设 IO 以及其他模块的区别。

标准是谁提的呢?ARM跟芯片厂商共同提出的,目的就是为了不同芯片厂商生产的Cortex-M3芯片能在软件上基本兼容,各芯片厂商就得按照这个标准去编写自己芯片内核的驱动程序,比如系统函数的命名、芯片初始化启动流程等;STM32的官方库(标准库、HAL库、LL库)就是按照这个标准写的。

这个标准是用来干什么的呢?如下图它向下负责与内核和各个外设直接打交道,向上提供实时操作系统用户程序调用的函数接口。分为 3 个基本功能层:

核内外设访问层:ARM 公司提供的访问,定义处理器内部寄存器地址以及功能函数。

中间件访问层:定义访问中间件的通用 API, 也是 ARM 公司提供。

外设访问层:定义硬件寄存器的地址以及外设的访问函数。

三、CMSIS文件

看完上面的介绍是不是已经晕菜了,看完跟没看一样没看到实际的代码。下面就打开任意一工程下的CMSIS,我以STM32F4xx为例,在路径 \CMSIS\Device\ST\STM32F4xx 下,有Include、Source两个文件,我们主要用到了这两个文件下的微控制器专用头文件、启动代码 。

1、Include文件

在该文件中主要使用了stm32f4xx.hstm32f429xx.h(不同的芯片这个文件不同),如下图

(1)在stm32f429xx.h 头文件包含了该芯片所有外设的寄存器定义和封装内存操作,直接操作这些寄存器就可以控制外设了,使用STM32任何型号的芯片都需要包含这个头文件。

(2)在stm32f4xx.h中会根据芯片型号宏标识符(我这里是STM32F429xx )选择对应的头文件(stm32f429xx.h),如果定义了USE_HAL_DRIVER宏标识符,还会将HAL库外设驱动包含进来,具体包含关系为:

2、Source文件

在该文件中主要用到了 system_stm32f4xx.c、startup_stm32f429xx.s、stm32f429xx_flash.icf。如下图:

startup_stm32f429xx.s

启动文件的作用主要是进行堆栈的初始化,中断向量表以及中断函数定义等。会设置系统复位后,直接调用 SystemInit函数进行系统初始化。还有一个很重要的作用就是系统复位后引导进入 main函数。

system_stm32f4xx.c

主要是声明和定义了系统初始化函数 SystemInit 以及系统时钟更新函数 SystemCoreClockUpdate。SystemInit函数的作用是进行时钟系统的一些初始化操作以及中断向量表偏移地址设置,但它并没有设置具体的时钟值

stm32f429xx_flash.icf

定义了芯片的FLASH和RAM的起始和结束地址、以及大小

STM32单片机的启动流程:

四、总结

CMSIS就是定义了一套芯片外设控制及编写规范的标准。我们在移植一个新的工程时,只需要修改添加:

1、添加system_stm32f4xx.c、startup_stm32f429xx.s、stm32f429xx_flash.icf

2、添加stm32f4xx.h

3、修改全局宏标识 STM32F429xx

CMSIS到底是个什么东西相关推荐

  1. Android 系统到底提供了哪些东西,供我们可以开发出优秀的应用程序(文末送书)

    Android 系统到底提供了哪些东西,供我们可以开发出优秀的应用程序. 作者:坚果 公众号:"大前端之旅" 华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体 ...

  2. Python到底是个什么东西

    Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了. Python到底是个什么东西 ...

  3. 相机的 高清到底是一个什么东西

    高清到底是一个什么东西?可能很多人还只能依稀的知道1080P什么的.当你在广告中看到数字电视机时,总会说支持1080i/1080P这样标准,先不提现在市面上销售的电视机有几个能达到这样一个要求.我们来 ...

  4. “暗通道”到底是个什么东西

    对于图像去雾领域的研究者来说,何凯明博士的"暗通道先验(DCP)"可谓是奉若圭臬,接触这个概念一年了,但一直没有深挖,一直都是"拿来主义",看大家粗略地一概而过 ...

  5. Memory Compression这到底是个什么东西?

    Memory Compression这到底是个什么东西? Memory Compression这个进程,经过我的查询说是内存压缩功能,作用是压缩内存让内存占用更低,但是为什么这个进程疯狂占用我的内存, ...

  6. 优漫动游室内设计到底需要学习哪些东西?

      室内设计这个专业,很多校外培训学校都有这个课程,但是,课程内容都会不一样,有的只有软件,有的只有理论,让人不明觉厉.今天,我就来讲下,室内设计到底需要学习哪些东西.   软件类软件包括CAD,3D ...

  7. 框架到底是个什么东西?

    学程序入门阶段,我们听到最多的几个词中,框架就是其中之一,什么前端框架,后端框架,D4框架,Vue框架,ssm框架等等. 那么框架到底是个什么东西呢? 其实框架就是让写代码这个过程变得更简单的东西. ...

  8. 大数据面试:面试官要求我了解过Presto——Presto到底是个什么东西

    前言 大家好,我是程序员manor,我希望自己能成为国家复兴道路的铺路人,大数据领域的耕耘者,平凡但不甘于平庸的人. 事情是这样的 我在实习僧App上发现一家公司非常匹配我的需求~ 城市匹配 技能匹配 ...

  9. 微软研究院洪小文:人工智能到底是个什么东西?我们应该怎样看待它?

    雷锋网(搜索"雷锋网"公众号关注)按:大众似乎都比较喜欢关心一些更具惊悚性和颠覆性(不管是好的还是坏的)的话题,在人工智能领域的表现,就是大众更多会倾向于相信一些"AI灭 ...

  10. 手机程序员常说的webview到底是个啥东西

    好像安卓和IOS程序员最常说的关于他们专业的名词就是webview,但是这个webview到底是个啥玩意? 先从安卓程序员用的webview入手,就几个webview的函数 WebView.loadU ...

最新文章

  1. 什么是结构风险?在决策树类相关算法中通常有哪些正则化参数来控制模型的结构风险?解读一下
  2. 《HiWind企业快速开发框架实战》(0)目录及框架简介
  3. Java 异常java.lang.IllegalArgumentException: Illegal group reference
  4. 2---信息系统集成专业技术知识(精简题目)
  5. 在控制台中输出 出现SIGBAT或者EXC_BAD_ACCESS的原因的方法
  6. .NET Core 和 DevOps
  7. java 装饰器_JAVA装饰器模式
  8. python处理era5_ERA5数据python批量下载程序
  9. pytorch 数据类型
  10. 第14天:逻辑运算符、if、for语句
  11. 《深入实践Spring Boot》阅读笔记之二:分布式应用开发
  12. SendMessage函数完全使用手册 (解读WM_)
  13. 画出优秀手绘线稿的必备条件,首先要满足和避免这些线条
  14. 有源晶振和无源晶振的比较
  15. AW9523B IIC驱动
  16. Fibonacci数列通项公式推导
  17. ORACLE数据依赖及范式
  18. 什么是Redis缓存穿透?redis面试题及答案(附面试题大全)
  19. java 链表逆序 递归,java用递归和非递归实现链表逆序
  20. 数据库整理-数据库特点

热门文章

  1. 内存和flash区别
  2. 细节至上——Splus微博设计之界面篇(转)
  3. 找出冲突的Windows快捷键
  4. 常用电感封装与电流关系
  5. Creative Audigy 2 ZS
  6. MATLAB函数step()对单位负反馈系统求阶跃响应
  7. zebradesginer zpl代码_斑马打印机连三菱PLC与VB.NET
  8. 照片编辑工具 Affinity Photo for Mac 1.7.1
  9. Unity人物动画扩展
  10. 50岁的哆啦A梦“撞”上63岁的卡西欧,阿里云数据中台告诉你火花能有多大