【ARM Cortex-M 开发实战指南(入门篇)】第8章 库开发简介

8.1 Cortex-M 库开发概述

我想如果稍微搞过嵌入式的,或多或少都学习过51单片机,51单片机比较简单,配置下寄存器就能实现我们想要的功能,也没有的什么库,但是当你学习Cortex-M之后,就会发现基于Cortex-M的各个MCU厂家都提供了不同的固件库,毕竟,32位的处理器寄存器很多,如果开发一个功能就需要配置大量的寄存器,这样开发起来效率就可想而知了,因此通过将寄存器封装,提供相应的API接口,这样开发起来的就非常方便,也便于移植,大大提高项目开发的进度和效率。因此学习Cortex-M一定要知道什么库开发,为何要使用库开发?

所谓库就是函数接口(API),开发者可调用这些函数接口来配置Cortex-M的寄存器,使开发人员得以脱离最底层的寄存器操作,有开发快速,易于阅读,维护成本低等优点。

库是架设在寄存器与用户驱动层之间的代码,库向下处理与寄存器直接相关的配置,向上为用户提供配置寄存器的接口。当我们调用库函数的时候不需要了解库底层的寄存器操作。

库开发相对寄存器的对比如下图所示。

LUk3h8.md.png

基于Cortex-M的MCU资源非常丰富,自然寄存器的数量和复杂度的增加,直接配置寄存器方式影响了开发效率和维护成本,如果使用库开发就能弥补这个缺陷。

以ST为例,从F1到F7系列都有相应的库,最开始是标准库,现在ST主推HAL,而且直接使用STM32CubeMX就能生成相应的初始化代码,应用开发者只需关注上层应用即可。

当然啦,国产的MCU就需要努力了,和ST的差距不是一点半点,不仅产品没有ST的丰富,相应的资源与配套工具也还没跟上,同志们,还需要努力呀。

虽然使用库开发好处很多,但是不同层度的封装将会牺牲CPU资源,但是这是值得的,因此本系列教程将会推出两个版本的代码:标准库和HAL库,值得注意的,国产的MCU一般都只有标准库,因此,文章中的实例大都会以ST的MCU为主。

8.2 Cortex-M库开发软件架构

虽然基于Cortex-M有不同的厂家,不同的厂家开发由基于不同的Cortex-M内核生产了不同系列的MCU,其主要为内核外的片上外设的差异,但是只要是基于Cortex-M开发的MCU,其开发流程都是一样的,掌握一家一个系列的MCU,其他的Cortex-M系列的MCU也就会很快上手。

值得注意的,虽然生产MCU的厂家很多,当时内核也就那么几种,最大区别就是外设的差异。但是不同的MCU在同内核,不同外设的会存在移植问题,为了解决不同芯片厂商的微控制器软件的兼容性问题,ARM与芯片厂商建立了CMSIS标准(Cortex Microcontroller Software Interface Standard)
CMSIS层位于硬件层与用户层(或操作系统)之间,提供了与芯片厂商无关的硬件抽象层,可以为接口外设、实时操作系统提供简单的处理器软件接口,这对软件的移植大有好处。

LUktXj.jpg

因此,基于CMSIS标准,固件库的文件主要分为两大类,一类是ARM提供的内核相关的文件,一类是芯片厂家提供的外设驱动文件。

看看STM32F1的固件库的目录。

LUkd7q.md.png

就两个文件夹,CMSIS是内核驱动文件,包含启动文件等内核相关的文件。STM32F10x_StdPeriph_Driver就是外设的驱动文件,包含头文件和源文件。

LUkBNV.jpg

至于其中的调用与逻辑关系,笔者在后文会逐步分析。

下面再看看GD32F1的固件库。

LUk6c4.md.png

其架构和STM32F1的一样的,只是这里多了USB的驱动而已,因此,只要学通一个系列的MCU,其他的都能快速上手。

Related posts

Leave a Comment