STM32单片机概述及特性介绍
单片机介绍
单片机是单片微型计算机的简称,MCU是是Microcontroller的简称,也就是嵌入式微控制器。采用集成电路技术将具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、定时器/计时器、多种I/O口和中断系统等功能集成到一块硅片上。可以说单片机就是一个小而完善的微型计算机系统。
SoC(System on Chip):片上系统SoC的定义多种多样,由于其内涵丰富、应用范围广等特点,非常难给出其准确定义。一般来说,SoC称为系统级芯片,也有称片上系统(即指他是一个产品),是一个有专用目标的集成电路,其中包含完整系统并有嵌入式软件的全部内容。同时它又是一种技术,用来实现从确定系统功能开始到软硬件划分并完成设计的整个过程。总而言之,SoC就是定制功能版本的MCU。
单片机型号
51单片机
ATC89C51
ATMEL公司
STC89C51
属于宏晶科技
32单片机
STM32
属于意法半导体
GD32
属于兆易创新GD
32位处理器:处理的数据最大位宽为32位
处理器的位数:CPU单次运算最大处理数据的位数
硬件基础
电路基础
电的类比
一般我们把电子知识想复杂了,实际电就可以理解为是水,电的特性和水的特性是类似的,因为电是看不见的,所以我们理解起来有困难。
电可以认为是看不见的水 电流类似于水流 电压类似于水压
电流
水流量计( 1单位流量= 1吨/小时=1T/H)
电流表(安培 1A= 1库伦/秒)
电流表实际就可以看成是水流表,就是计算水的流量,电的流量的意思。我们水管中流出了多少水,很容易理解,实际电在电线中流动,可以看成水的流动是一样的 。
电压
我们可以认为水压表测量水对水管的压力,电压表是测量电对电线的压力。水是从水压高的地方流到水压低的地方,电也是从电压高的地方流到电压低的地方。
电路
水到处流动 形成小河、小溪之类。电到处流动,形成什么,就是电路。水走的路是水路,电路这样就好理解了。
类比电路图
电子元器件
电路图中有很多元件,我们可以把很多元件看成水路中的很多元件就容易理解。
电阻
电阻实际是大小不同的水管让水流的小一点,慢一点,这样后面的器件,不至于受到大电流冲击搞坏了 。电阻无方向,电阻就是阻碍电的流动,你可以想象一个水管里有水垢,水垢越多,水阻越大,水流越小。同理,电阻越大,导体对电流的阻碍作用越大,电流越小。
实物图
电路符号
电容
电容是可以理解成一个装水的容器(水桶、池塘、湖泊、水库),水要通过池塘、湖泊,首先需要灌满它才能过得去。所以这部分水(电能)可以被这些容器保存下来,这是
电容的储能作用
,另外很明显,无论前面的水流多么湍急,到了湖泊就要先灌满它,湖泊开口再向下游流水,自然流水就缓慢一些,所以
它也有缓冲的作用
。大波浪到了湖泊变平稳,实际变成了小波浪,波的形状都变了,这就是
过滤的作用
,只允许特定的波通过。
所以电容在电路中是储能、缓冲、减压、过滤器件。
同一颗电容在电路中摆放的位置不同,作用不同,也就是在这个电路中它主要起漏斗的作用,但是在另外的电路中,它就是做储能了。因为后面的元件需要是稳定的电流, 你可以这样想象我们拿着水桶往水缸里倒水的时候,水面上起的水花是很大的,这样的水花,对后面的器件是有损伤的。
实物图
电路符号
二极管
二极管实际是单向阀门, 意思就是说水只能从一头进另一头出 。二极管就是这么个作用,它只能从一边过来的电能通过,从另一边过来的实际就过不去,记得电看成是水。
这个就是二极管的符号,很形象,右边有个竖杠,很明显,从左边来的电能流到右边,从右边来的就被挡到了。左边来挡片冲开,右边来抵死。
二极管在电路中的特性与水路中的单向阀基本原理一致。
实物图
电路符号
三极管
三极管实际是个小阀门控制大阀门的器件。(流控)
三极管有两种类型,PNP和NPN型。两者的不同参考
终于有人讲了,凭什么三极管能放大?_哔哩哔哩_bilibili
两种三极管使用时候决定着电路图的接法不同,如下是个常见的共基极PNP型电源控制开关
实物图
电路符号
半导体三极管有三个电极:分别是基极、集电极和发射极。半导体管在工作时要加工作电压,于是就产生了各极电流。半导体三极管在工作时发射极电流等于基极和集电极电流之和。其中基极电流最小,发射极电流最大。在基极加一很小的电流,在集电极就能输出很大的电流,因此三极管有放大作用。三极管主要作用是放大信号。常用在放大电路和振荡电路中。
常见的电气接口
音频
视频
电源
RJ45网口
DB9串口
公头和母头
公头就是插头上是针的,母头就是插头上是孔的。
线序及作用
实际开发过程中,线序可以去网上搜,只需要知道线序如何看,及红色的三条线即可。
开发板 /最小系统
开发板通常是学校用途,功能比较齐全,接口丰富,是用于研发、研究、学习的板子。
最小系统是一个核心板,集成了核心的通用功能,考研根据需求定制各种不同的低板,通用性较好。再者,核心板作为一块独立的模块被分离出来,增加系统的稳定性和可维护性通常用于做项目,也可以作为模块在产品里直接应用。
补充:
PCB板(Printed Circuit Board),中文名称为印制电路板,又称为印刷线路板,是重要的电子部件,是电子元器件的支撑体,是电子元器件相互连接的载体。由于它是采用电子印刷术制作的,故称为印刷电路板。
IO逻辑
计算机系统中的高低电平逻辑1和0,数据在计算机中的存储、传输、运算都以二进制形式进行的。计算机传输数据的方式只能使用电信号的方式表示二进制数据。
单片机:
高电平 1
低电平 0
电压(没有绝对的0v):
电压差 电势差
模拟信号:
模拟信号是连续的,可以是任意数值状态。
数字信号:
数字信号是离散(不连续)的,只有“ 0 ”和“ 1 ”。
计算机知识补充
计算机组成
计算机由输入设备、输出设备、存储器、运算器、控制器五部分组成。
1. 输入设备:
输入设备的任务是把人们编译好的程序和原始数据送到计算机中,并把它们转换成计算机能够识别和接收的信息方式(通过高低电平的方式)。
例如:键盘、鼠标、摄像头、指纹、游戏手柄
2. 输出设备:
输出设备的任务是将计算器的处理结果以人或其他接收设备所能接受的形式送出去。
例如:显示屏、扩音器、打印机
3. 存储器:
存储器的作用是存储数据。
例如:硬盘、U盘、软盘、光盘、磁带、SD卡、TF卡、游戏卡
4. 运算器:
算术运算器、逻辑运算器
5. 控制器:
控制器的任务是对输入的指令进行分析,并控制计算机的各个部分协调运行。
一般由指令寄存器、状态寄存器、指令译码器、时序电路和控制电路组成。
计算机语言
机器码(不算语言)(读写难,不可移植)
汇编语言:.s文件,可以读写(不可移植)
C语言:面向过程
C++:既面向对象又面向过程
Java:面向对象
python:面向对象
go:面向对象
易语言:
gcc编译流程:
- 预编译处理:主要是进行宏替换和拷贝包含的头文件到本文件中。
- 编译:检查代码的规范性,是否有语法错误等,没有错误的话将代码编译成汇编语言。
- 汇编:将汇编文件转换成二进制目标文件。
- 链接:连接库函数生成可执行文件。
STM32介绍
简介
STM32是意法半导体公司生成一款32位的微控制器,其功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器。
STM32的优势
产品型号丰富、可选择性强、运算速度快、功耗低、处理器外设接口丰富、库函数开发体系学习资料多、应用广泛。
命名规范
STM32G030C8T6
ST —-> 意法半导体
M —-> 微控制器
32 —-> 32位处理器
类型 —-> F 通用/基础款 foundation
G 多用途型 general-purpose
L 低功耗 low power
H 高性能
S 简单/标准型 Standard
系列 —-> 0 精简系列
1/2/3 增强系列
4/7 高性能系列
子型号 —-> 00/01/02/03/05/07
引脚数量 :
K/6:32脚
C/8:48脚
R:64脚
V:100脚
Z:144脚
A:168脚
I:176脚
B:208脚
N:216脚
存储量:
6:32KB
8:64KB
B:128KB
C:256KB
D:328KB
E:512KB
G:1MB
I:2MB
封装:
U:UQFN封装
T:TQFP封装
工作温度:
6:-4-~50摄氏度
ARM架构
面试题:谈谈你对ARM的认识
答:
1. ARM是一家芯片知识产权(IP)供应商公司,与一般的半导体公司最大的不同就是不制造芯片并不向终端用户出售芯片,而是通过装让设计方案,由合作伙伴生产芯片。
2. ARM处理器,ARNM处理器是英国Acorn有限公司设计的低功耗低成本的第一款RISC微微处理器。
经典的处理器:
ARM7/9/11,后续处理器开始以Cortex来命名
Cortex-A 是适用于高性能的处理器
Cortex-R 是适用于汽车电子(具有实时性)的处理器
Cortex-M 是低成本、低功耗的处理器
3. ARM代表一种技术,具有性能高、成本低和能耗节省的特点,在智能机、平板电脑、嵌入控制、多媒体数字等处理器领域具有主导地位。
目前主流处理器架构:ARM架构、Intel X86/64、RISC-V(开源架构)、MIPS架构
RISC(精简指令集)、CISC(复杂指令集)
早期的CPU全部都是CISC架构,其设计的目的是要用最少的机器语言指令来完成所需的计算任务。比如对于乘法运算,在CISC架构的CPU上可能只需要一条如下指令:
MUL ADDRA,ADDRB
上面这一条指令就能够将ADDRA和ADDRB中的数相乘并将结果储存在ADDRA中。其过程是将ADDRA和ADDRB中的数据读入到寄存器中,相乘和将结果写回到内存中全部都依赖于CPU中设计的逻辑来实现。这种架构会增加CPU结构的复杂性和对CPU工艺的要求,但对于编译器的开发十分有利,目前暂时只有Intel及其兼容CPU还在使用CISC架构。
RISC架构要求软件来指定各个操作步骤,上面的例子如果要在RISC架构中实现,将ADDRA和ADDRB中的数据读入到寄存器中,相乘后将结果写回到内存中的操作都必须由软件来实现,其指令如下:
MOV A,ADDRA;
MOV B,ADDRB;
MUL A,B;
STR ADDRA,A;
这种架构可以降低CPU的复杂性以及允许在同样的工艺水平下生产出功能更强大的CPU,但是对于编译器的设计有更高的要求。
Cortex-M0内核架构
Cortex-M 系列产品
Cortex-M系列产品主要包括Cortex-M0、Cortex-m0+、Cortex-M1、Cortex-M3、Cortex-M4、Cortex-M7等,其中Cortex-M0主打的是低功耗和混合信号的处理,M3主要来替代ARM7,中带你侧重能耗与性能的平衡,而M7则重点放在高性能控制运算领域。
Cortex-M0架构框图
Cortex-M0微处理器主要包括处理器内核、嵌套向量中断控制器(NVIC)、调试子系统、内部总线系统构成。Cortex-M0微处理器通过精简的高性能总线(AHB-LINE)与外部进行通信。
扩展:
- 冯诺依曼结构:冯·诺依曼体系结构的理论要点是:计算机的数制采用二进制;计算机应该按照程序顺序执行。
- 哈佛架构:哈佛架构的计算机由CPU、程序存储器和数据存储器组成,程序存储器和数据存储器采用不同的总线,从而提供了较大的存储器带宽,使数据的移动和交换更加方便,尤其提供了较高的数字信号处理性能。
- 而这最主要的区别就是命令/数据总线。
Cortex-M0指令集
ARM处理器支持两种指令集:ARM和Thumb
EPSR寄存器的T标志位负责指令集的切换,Cortex-M0只支持Thumb指令。
ARM指令集是32位精简指令集:指令长度固定,其优点是降低编码数量产生的耗费,减轻代码和流水线的负担。
Thumb指令集是ARM指令集的子集,其指令宽度是16位,于32位指令集相比较节省了系统的存储空间,密度高;但是Thumb指令集不完整,所以必须配合ARM指令集一同使用。
Cortex-M0特性
- 采用Thumb指令集(ARM指令是32位,而Thumb指令是1位的,如果存储空间中可以放32条ARM指令,就可以放64条Thumb指令,因此在存放Thumb指令时,代码密度比较高)。
- 高性能,使用ARMv6-M的体系架构。
- 中断数量可配置1-32个,四级中断优先。
- 门电路少,低功耗,中断唤醒控制器(WIC),支持极低功耗休眠模式。
- 兼容性好,与Cortex-M1处理器兼容,向上兼容Cortex-M3和Cortex-M3处理器,可以很容易的升级、移植。
- 支持多种嵌入式操作系统,也被多种开发组件支持。
Cortex-M0工作模式
线程模式(Thread Mode):芯片复位后,执行用户程序
处理模式(Handler Mode):当处理器发生了异常或者中断,处理完成后返回线程模式
Cortex-M0工作状态
Thumb状态:正常运行时处理器的状态
调试状态:调试程序时处理器的状态
Cortex-M0的寄存器
通用寄存器
R0-R12:13个通用寄存器,其中R0-R7为低端寄存器,可作为16位或32位指令操作数,R8-R12为高端寄存器,只能用作32位操作数。
R13:栈指针寄存器SP(the stark pointer),Cortex-M0在不同物理位置上存在两个栈指针,,主栈指针MSP,进程栈指针PSP。在处理模式下只能使用主堆栈,在线程模式下,可以使用主堆栈也可以使用进程堆栈。系统上的默认栈指针是MSP。这样设计的目的是为了在进行模式转换的时候减少堆栈的保存工作,同时也可以为不同权限的工作模式设置不同的堆栈。
R14:链接寄存器LR(the link register),用于存储子程序或者函数调用的返回地址
R15:程序计数器PC(the program counter register),用来存储下一条将要执行的指令的地址。
特殊寄存器
xPSR:组合状态寄存器,该寄存器由三个程序状态寄存器组成。
应用PSR(APSR):保存程序计算结果的状态标志位,其中N为负数标志,Z为零标志,C为进位标志,V为溢出标志。
中断PSR(IPSR):包含当前ISR(中断服务程序)的异常编号。
执行PSR(EPSR):包含Thumb状态位。
CONTROL:控制寄存器
控制处理器在处于线程模式时,决定使用哪个堆栈,
=0时,固定使用MSP处理器模式
=1时,固定使用PSP处理器模式
Cortex-M0的中断和异常
Cortex-M0处理器最多支持32个外部中断(通常称为IRQ)和一个不可屏蔽中断(NMI),另外Cortex-M0还支持许多系统异常(Reset、HardFault、SVCall、SysTick),他们主要用于操作系统和错误处理。
STM32G030系统架构
STM32F0
系统主要由以下几个模块组成:
两个主模块:
Cortex-M0内核及先进高性能总线(AHB bus)
通用DMA(GP-DMA:general-purpose DMA)
四个从模块:
内部FLASH
内部SRAM
APB桥,连接AHB和APB,,所有的外设都挂在APB总线上
GPIOx直接挂在OIOPORT总线上
STM32G0
系统主要由以下几个模块组成:
两个主模块:
Cortex-M0内核及先进高性能总线(AHB bus)
通用DMA(GP-DMA:general-purpose DMA)
四个从模块:
内部FLASH
内部SRAM
APB桥,连接AHB和APB,,所有的外设都挂在APB总线上
专门用于连接GPIO的AHB2总线
flash和SRAM的区别是什么?
答:
- Flash存储器是一种非易失性存储器,可以在掉电后保存数据,通常用于存储程序代码。flash存储器的可写入次数有限,且需要执行擦除操作才能写入新的数据,因此在使用过程中需要注意擦写周期和数据备份问题。
- SRAM存储器则是一种易失性存储器,具有相对快的读写速度和无限次读写次数,但是掉电将会丢失所有内容。SRAM存储器主要用于暂存数据和临时变量,读写操作由CPU直接完成,访问速度较快。
- 单片机的Flash存储器和SRAM存储器都嵌入在单片机芯片内部,能够方便的实现对程序和数据、变量的读写操作。通常,编译器会把程序烧录在Flash存储器中,并使用SRAM存储器来存储变量、函数堆栈以及其他的临时数据。
AHB和APB的区别?
答:
- AHB是高速总线,是一种系统总线,主要负责连接处理器、DMA等一些内部接口。AHB系统由主模块、从模块和基础结构3部分组成,整个AHB总线上的传输都由主模块发出,由从模块负责回应。
- APB是低俗总线,主要负责连接外围设备,它又分为APB1和APB2,其总线架构不像AHB支持多个主模块,在APB里面唯一的主模块就是APB桥。
什么是外设?如何理解片上外设?
答:
- 外设指的是单片机外部的外围功能模块,比如键盘控制芯片,液晶,A/D转换芯片,等等。外设可通过单片机的I/O,SPI,I2C等总线控制。单片机内部的外设一般包括:串口控制模块,SPI模块,I2C模块,A/D模块,PWM模块,CAN模块,EEPROM,比较器模块,等等,它们都集成在单片机内部,有相对应的内部控制寄存器,可通过单片机指令直接控制。
- 片上外设又称为片内外设,是芯片内部用于与外部设备连接的接口电路和总线。
- 片上外设通常具有以下优点:
高效性:片上外设能够与主处理器实现高速的数据传输,响应时间短,执行效率高。
集成度高:片上外设多个模块都嵌入到处理器芯片内部,极大地降低了PCB面积和电路复杂度。
低功耗:处理器和片上外设采用相同的工艺,能够满足高密度和低功耗的需求。
可靠性高:提高了整体系统的可靠性和稳定性,也降低了电磁干扰的可能。
如何开发
开发环境安装
STM32CubeMx
ST公司出品 工具链接
工具链接 https://www.st.com/zh/development-tools/stm32cubemx.html
STM32CubeMX是一种图形工具,通过分步过程可以非常轻松地配置STM32微控制器和微处理器,以及为Arm® Cortex®-M内核或面向Arm® Cortex®-A内核的特定Linux®设备树生成相应的初始化C代码。
作用及功能:
工程项目搭建和配置
直观选择微控制器
图形化引脚功能配置、引脚冲突提示
动态配置时钟树
动态设置参数和初始化
Keil安装
Keil μVision 5 也称MDK-ARM、Realview MDK
MDK ——> Microcontroller Development Kit
MDK包含以下几个部分:
- μVision5:一种集成开发环境,提供了多种不同的功能,如编辑器、编译器、调试器等。
- ARM编译器:一种嵌入式ARM C / C++编译器,可在多种不同的微控制器平台上运行。
- Device Family Pack:一种特定于属于不同微控制器平台/系列/型号的软件包,包括库文件、设备描述文件等。
- Debugger:一款高级调试器,支持多种不同的调试功能,如单步调试、断点调试、内存映射等。
创建STM32工程
STM32CubeMX配置
单片机上电后第一个执行的程序
在之前的学习中我们执行程序都是执行主函数,从主函数main开始执行。但是在单片机中上电后第一个执行的程序是复位向量表中的复位向量函数(Reset_Handler)。这个函数由启动文件(startup)提供,它会进行一些初始化操作,例如设置堆栈指针、初始化全局变量等,并最终跳转到主函数(main)开始执行用户程序。因此,在编写STM32的应用程序时,我们需要在主函数中编写程序逻辑。
作用:
1. 初始化堆栈指针 SP=_initial_sp
2. 初始化PC指针 PC=Reset——Handler
3. 初始化中断向量表
4. 配置时钟系统SystemInit
5. 调用C库函数main 初始化用户堆栈,从而最终调用main函数