CKS32-M0官方标准库简介

注:本文参考正点原子《STM32F4开发指南-库函数版本V1.1》改写

1. CKS32 固件库与 CMSIS 标准

ARM 公司为了能让不同的芯片公司生产的 Cortex-M 芯片能在软件(包括函数命名风格)上基本兼容,和芯片生产商共同提出了一套标准 CMSIS 标准(Cortex Microcontroller Software Interface Standard) ,翻译过来是“ARM Cortex™ 微控制器软件接口标准”。

基于 CMSIS 应用程序基本结构

CMSIS 分为 3 个基本功能层:

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

2) 中间件访问层:定义访问中间件的通用 API。由 ARM 提供,芯片厂商根据需要更新。

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

从图中可以看出,CMSIS 层在整个系统中是处于中间层,向下负责与内核和各个外设直接打交道,向上提供实时操作系统用户程序调用的函数接口。如果没有 CMSIS 标准,那么各个芯片公司就会设计自己喜欢的风格的库函数,而 CMSIS 标准就是要强制规定,芯片生产公司设计的库函数必须按照 CMSIS 这套规范来设计。其实不用这么讲这么复杂的,一个简单的例子,我们在使用 STM32 芯片的时候首先要进行系统初始化,CMSIS 规范就规定,系统初始化函数名字必须为 SystemInit,所以各个芯片公司写自己的库函数的时候就必须用SystemInit 对系统进行初始化。CMSIS 还对各个外设驱动文件的文件名字规范化,以及函数名字规范化等等一系列规定。上一节讲的函数GPIO_ResetBits 这个函数名字也是不能随便定义的,是要遵循 CMSIS 规范的。

2. 文件夹介绍


CKS32官方库目录树

2.1 CMSIS

CMSIS文件夹存放的是符合CMSIS规范的一些文件。

2.2 Libraries

Libraries 文件夹下面有 CMSIS 和 CKS32F0xx_StdPeriph_Driver 两个目录,这两个目录包含固件库核心的所有子文件夹和文件。

2.2.1 CKS32F0xx_StdPeriph_Driver

CKS32F0xx_StdPeriph_Driver 放的是 CKSF0xx 标准外设固件库源码文件和对应的头文件。

2.2.2 inc

inc 目录存放的是 cks32f0xx_ppp.h 头文件,无需改动。src 目录下面放的是 cks32f0xx_ppp.c 格式的固件库源码文件。每一个.c 文件和一个相应的.h 文件对应。这里的文件也是固件库外设的关键文件,每个外设对应一组文件。

Libraries 文件夹里面的文件在我们建立工程的时候都会使用到。

3. 关键文件介绍

STM32F4 标准外设固件库文件关系图

3.1 core_cm0.h 

位于Libraries\CMSIS\Include目录下。

CMSIS Cortex-M0 Core Peripheral Access Layer Header File(CMSIS Cortex-M0核心外围设备访问层头文件)。包括寄存器定义、函数定义以及操作指南。

3.2 system_cks32f0xx.h

位于Libraries\CMSIS\Device\Include目录下。

system_cks32f0xx.h 是片上外设接入层系统头文件。主要是申明设置系统及总线时钟相关的函数。与其对应的源文件 system_cks32f0xx.c 在目录Libraries\CMSIS\Device\Source 可以找到。这个里面有一个非常重要的 SystemInit()函数申明,这个函数在我们系统启动的时候都会调用,用来设置系统的整个系统和总线时钟。

3.3  cks32f0xx.h

位于Libraries\CMSIS\Device\Include目录下。

cks32f0xx.h 是 CKS32F0 片上外设访问层头文件。这个文件就相当重要了,只要你做CKS32F0 开发,你几乎时刻都要查看这个文件相关的定义。这个文件打开可以看到,里面非常多的结构体以及宏定义。这个文件里面主要是系统寄存器定义申明以及包装内存操作,对于这里是怎样申明以及怎样将内存操作封装起来的。同时该文件还包含了一些时钟相关的定义,FPU 和 MPU 单元开启定义,中断相关定义等等。

3.4 startup_cks32f0xx.s

位于Libraries\CMSIS\Device\Source目录下。

启动文件到底什么作用,其实我们可以打开启动文件进去看看。启动文件主要是进行堆栈之类的初始化,中断向量表以及中断函数定义。启动文件要引导进入main 函数。Reset handler routine 中断函数是唯一实现了的中断处理函数,其他的中断函数基本都是死循环。

; Reset handler routine

Reset_Handler    PROC

                EXPORT  Reset_Handler                [WEAK]

        IMPORT  __main

        IMPORT  SystemInit 

                LDR    R0, =SystemInit

                BLX    R0

                LDR    R0, =__main

                BX      R0

                ENDP

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 1 简介 STM32F10x标准外设库是一个完整的包,包含了所有标准外设的设备驱动,适用于STM32价值系列(高、...
    hackvilin阅读 6,337评论 0 13
  • STM32 创建库工程要准备一下工作: 下载标准库 MDK(Keil5)建立库工程 设置MDK环境 1.标准库 可...
    kinetis阅读 1,285评论 0 9
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,141评论 0 9
  • 鉴于我学习的资料内容比较多,刚开始使用keil来构建工程还是有点麻烦的,每次忘了点什么步骤就要从众多数据中找到构建...
    Jane_123阅读 38,798评论 1 19
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,082评论 1 32