单片机学习笔记2--了解嵌入式与单片机开发模式(基于百问网STM32F103系列教程)
第二篇 了解嵌入式与单片机开发模式
第1章 常见处理器概念
1、MUC
微控制器(Micro-Controller Unit,MCU)俗称单片机。
它将CPU和各种功能的外设全部整合到一起,只需要供电或加上极少的外围电路即可工作。
MCU = CPU + RAM + FLASH + 外设 + …
2、MPU
微处理器(Micro-Processor Unit,MPU)。
可以认为MPU是个功能更加强大的CPU,他只负责运算,其他啥也不干,所以用MPU开发需要自己加RAM、FLASH等。
MPU ≈ CPU。
MPU的数据处理、运算能力比MCU强大,所以在数据量庞大、执行任务情况复杂的时候用MPU,一般通常运行Linux、Android等非实时操作系统,应用在高端应用市场。但是MPU成本比MCU高,对于一些功能单一、成本要求低的场景,必须使用MCU,常用运行裸机或实时性操作系统,应用在中、低端应用市场。
虽然MCU没有MPU强大,但是在大多数场景下,MCU还是够用的,所以是用MCU还是MPU开发,要根据具体情况合理选择。
随着技术的发展,MPU和MCU的界限也日趋模糊。
3、DSP
DSP(Digital Signal Processing)通常有两个含义,一种是数字信号处理技术;一种是数字信号处理器。
DSP可以为处理器同时提供指令和数据并且在一个指令周期内执行更多的指令,而且他还有专门的指令和硬件结构,使得DSP芯片在计算处理上,远超同主频的MCU或MPU。
DSP就像他的名字一样,为进行数字处理而生,在数字信号处理领域广泛应用。
4、FPGA
现场可编程门阵列(Field-Programmable Gate Array,FPGA),由可编程互连连接的可配置逻辑块 (CLB) 矩阵构成的半导体器件。
通俗理解FPGA就是一个可以通过编程改变内部硬件结构的芯片。
MCU、DSP、MPU在出厂时,所有的硬件结构就已经被设置好了,不能再修改了,他们利用软件来开发。而FPGA内部的结构是可以改变的,通过硬件描述语言改变FPGA的内部结构,可以将FPGA变为MCU等,所以,MCU他们能够实现的功能,FPGA理论上都可以实现,反之则不一定。
5、总结
在复杂的嵌入式系统往往是复合架构,多种类型的处理器共同工作。一般来说,在控制、显示、数据处理量不大、任务相对不复杂的情况下用MCU;在任务复杂,数据处理量大等情况用MPU;需要进行信号处理或者通讯的时候用DSP;在大量高速数字信号处理或想要实现特定功能的用FPGA。
第2 章 嵌入式基础知识
2.1什么是嵌入式
2.1.1概念及应用领域
官方来说嵌入式系统是以应用为中心(即可以实现特定的功能),以计算机技术为基础,能够根据用户需求(功能、可靠性、成本、体积、功耗、环境等)灵活裁剪软硬件模块的专用计算机系统。
也可以这样理解:在其它电子产品或设备中,加入(嵌入)一个小小的"计算机"。目的是为了,人机交互、采集传感器数据、处理数据、控制执行机构和通信。这个小小的"计算机",就是嵌入式系统。它由各种"单片机"或叫微控制器再加上其它外围电路组成。要求这个小小"计算机",体积小、功耗低、成本低、实时性强、可靠性高。
嵌入式系统的应用十分广泛,涉及多个领域,如:通信、手机、数字电视、打印机、生化分析仪、汽车导航系统、无人机等,可以简单认为,现在几乎绝大部分带电路的产品都可以认为是嵌入式系统的应用。
2.1.2发展方向
嵌入式系统的开发根据对运行情况复杂程度、实时性的要求、数据处理量大小等要求,可以简单的分为三大类。
1、无操作系统**(裸机)开发:做一些简单的控制**,处理的任务比较简单,接触的模块相对较少,对实时性要求不高。
2、运行实时操作系统(RTOS)开发:处理的任务比较复杂,对实时性要求较高,数据处理量较大
3、Linux/Android的开发::处理的任务非常复杂,大量的数据进行运算,涉及到的协议非常复杂。
前两个用一般用MCU开发,最后一个用一般用MPU开发。
从裸机到RTOS再到Linux/Android,开发的难度越来越大,涉及到的知识越来越多,对硬件资源的要求也越来越高。
2.2什么是ARM
2.2.1ARM由来
ARM起源于一家简称CPU的电子仪器公司,后来更名为Acron,转折点是他们研发出了第一个基于精简指令集的微处理器命名为ARM“Acorn RISC Machine”,然后与苹果公司合作,成立新的公司就叫ARM“Advanced RISC Machines“,就是现在常说的ARM公司。
由于商业生态、商业竞争等原因ARM公司现在只负责架构设计和授权,不涉及芯片的设计生产。
由上总结,ARM具有以下三种含义:
- ARM是一家全球半导体行业技术领先的公司,主要业务是设计RISC嵌入式处理器;
- ARM是一类微处理器芯片或产品的统称,即所有采用ARM公司提供方案开发的RISC处理器;
- ARM是一项技术的名称,即采用RISC的处理器体系结构;
2.2.2ARM处理器类别

1、 ARM Cortex-A:应用程序系列。该系列有内存管理单元(Memory Management Uint,MMU),可以实现虚拟内存,每个进程都拥有自己独立的地址空间。该系列适用于高端消费电子领域,比如智能手机、平板电脑、智能电视、路由器等。
2、ARM Cortex-R:实时控制系列。该系列适用于高性能、高实时性应用,比如硬盘/固态驱动控制器、汽车领域的安全气囊等。
3、ARM Cortex-M:微控制器系列。该系列适用于低功耗、高性能、成本敏感的产品,比如家电产品、物联网等。
在性能上 Cortex-A > Cortex-R > Cortex-M。
针对不同的应用场景和需求,每个系列还会再细分,比如ARM Cortex-M就再分为ARM Cortex-M0、ARM Cortex-M3、ARM Cortex-M4等。后面的数字越大,性能越强。
2.3什么是STM32
STM32就是ST公司基于ARM Cortex-M系列内核设计的微控制器,专为高性能、低功耗、低成本场景设计。ST公司还提供基于库的开发模式,方便用户使用,能够大大的提高用户研发效率,使得ST公司在短短几年内就占据了单片机的大部分市场。
2.3.1STM32类型
如今STM32系列产品非常多,主要为ARM Cortex-M内核系列MCU,近几年ST公司也开始涉及ARM Cortex-A内核系列MPU。
根据内核和性能的不同,STM32目前有上图中多种不同的系列芯片,每一个系列又有多种类型适用于各种不同的场景功能开发。
2.3.2STM32命名规范
STM32的名字中,每个符号都有特定的含义,他们代表了该芯片的一些相关信息。就比如STM32F103ZE中32代表32位MCU/MPU,F代表该芯片是基础型芯片,103代表是STM32基础型,Z是144引脚,E代表有512KByte。
MCU命名规范:
MPU命名规范:
第3章 单片机开发方式
到目前为止,一般情况下单片机有四种开发模式,分别是使用汇编开发、C语言操作寄存器开发、标准库开发、HAL库开发,根据使用的语言不通,可以分为两类。
对于单片机的开发,实际上就是操作各种寄存器(实际地址 = 基地址 + 偏移地址),开发流程都是差不多的,大体分为以下几步:
1、根据功能需求或原理图,确定需要使用到哪些外设,哪些引脚。
2、查找相关手册,查看相关寄存器,明白需要配置哪些寄存器的哪些位。
3、编写代码,配置相关寄存器,实现功能。
4、下载代码,根据现象调试程序。
这里用LED闪烁为例,介绍四种开发模式的过程,根据原理图可知,红色LED连接在单片机PB0引脚上,低电平灯亮,高电平灯灭。

3.1、使用汇编语言开发
汇编语言是一种面向机器的低级语言,虽然汇编的执行效率是最高的,但是汇编语言的灵活性较差,可读性更差,使用者需要记住一些单词缩写的指令。在单片机刚出现的时候,都是使用汇编进行开发的。
下面介绍一下使用汇编开发的一般过程(以LED闪烁为例)。
首先要找到相关寄存器的地址,这里以GPIOB的ODR寄存器为例。

可以看到,GPIOB_ODR的实际地址 = 基地址 + 偏移地址 = 0x40010c00 + 0x0c,通过设置(0x40010c00 + 0x0c)这个地址的值来实现GPIO的输出。
从上面程序可以看到,用汇编开发的程序代码非常难懂,可读性极差,而且使用汇编开发对于开发者的要求很高,开发者需要熟练运用各种操作指令。一般都是在芯片容量非常小的情况下使用汇编开发。
3.2、使用C语言开发
C 语言是一种通用的、面向过程式的计算机程序设计语言。C语言对汇编语言进行了抽象,更符合人类思维习惯,开发效率高。对于单片机开发而言,最直观的区别就是C语言的可读性要比汇编好太多。
使用C语言后,只需定义指针变量指向对应寄存器,修改该指针变量的值,即可修改对应寄存器,操作上方便了很多。 同时可读性也大大提高。但是还是要查找手册,了解相关外设地址,一旦涉及到的外设较多,过程也会相当复杂。同时程序移植性不好。
汇编和操作寄存器这两种开发方式,适用于任何一款芯片,但需要阅读查找资料找到对应寄存器,过程繁琐且复杂而且编写代码也不容易。ST公司为了让用户更快上手开发,提供了两种基于库的开发方式,在库中将所有外设寄存器提前定义好,准备一些常用接口函数供用户使用,用户只需要调用特定的函数就可以了。
3.2.2、基于标准库的开发
标准库提供了大量的接口函数,用户只需要调用即可实现特定功能。
图中红框中的部分都是由标准库提供的,用户只负责调用即可。
使用标准库开发时用户无需关注底层外设寄存器的相关信息,直接调用官方提供的函数即可,操作简单,易上手,而且程序稳定性,可读性和移植性都较高。但是标准库的可移植性虽然有所提高,但是仍然不够完善,一个标准库只对应了一个系列的单片机,比如STM32F1系列的标准库和STM32F4系列的标准库对比,他们里面对应寄存器的信息都不一样,所以一旦更换了另一个系列的单片机,就要重新移植标准库,目前ST公司几乎已经跟停止对标准库的更新和研发。
3.2.3、基于HAL库的开发
为了解决不同系列芯片的移植性的问题,ST公司提供了另一种开发方式——HAL库开发。可以认为HAL库是标准库的加强版,目前支持STM32全系产品,可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。
可以看到,与标准库开发类似,用户只需要调用红框中厂家提供的接口函数即可实现功能,无需自己配置寄存器。
HAL库开发与标准库开发十分相似,但是HAL库是在标准库的基础上尽可能的将ST公司所有系列处理器的外设名称、库函数名称、库函数操作流程等都做了规范的统一。这样开发人员熟悉一款处理器的HAL库开发流程,那么对于ST公司所有系列的处理器的HAL库开发流程就都熟悉了,能够做到一通百通。
3.3四种开发模式差异

目前,主流的是基于两种库的开发,但是ST公司目前对于标准库已经几乎不更新、维护了,主要推行HAL库的开发,基于标准库开发以后可能会逐渐淘汰。
标准库和HAL库的本质还是通过C语言操作寄存器,只不过所有的操作都被封装成一个个的函数了,所以他们的代码量比较大,执行效率稍低,虽然执行效率稍低,但是对于绝大部分场景是能够满足需要的。
基于两种库开发模式是最容易上手且方便、快速的,对于想要快速开发或者入门学习的可以选择这两种方式。但是这样无法了解到程序内部的底层原理,对于后续提高帮助不大。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)