《黑马程序员嵌入式单片机全套视频教程,涵盖ARM32、STC8、ESP32多平台单片机,从C语言、单片机概念、原理、实操到智能手表、WIFI图传小车等项目一套通关》blibli理论总结(不涉及代码)
一、电流
电流的产生和原子核及其相关电子的排列紧密相关。电子的流动产生电流,电流定义是正电荷的流动方向,即正极到负极。
一个电路包括电源和负载,可以把电流定义为通过导线的电荷量。
库仑定律:同性相斥,异性相吸。
原子序数越大,最外层电子离原子核越远,导致金属离子对最外层电子束缚力越弱。自由电子阻力越小,导电性越好。
在价电子轨道上有5、6或7个电子的原子是非导体。
物质由原子构成,原子由原子核(+)和绕核旋转的电子(-)构成,电源在电路提供电位差,称为电压(电势能)。电压使自由电子定向移动,形成电流。
二、单片机分类与功能
51、251 比较老,架构几十年前东西,51很多公司用,ARM内核应用广泛,比如手机芯片。Xtensa(产品有esp32)、RISC-V内核新颖。
芯片上有许多引脚,引脚通过导线和外部设备相连。
模拟电路的网址:
https://lushprojects.com/circuitjs/circuitjs.html
寄存器是一种超高速的小型存储器件,速度远快于内存,但容量很小,通常8位(存8个二进制).
四、输入输出
1 引脚
2 推挽输出与开漏输出
推挽输出(Push-Pull Output,PP):对外输出高低电平,由芯片对外输出电流,用于低功耗外接设备较多。LED、震动马达、蜂鸣器等,就可用推挽输出模式,由芯片驱动电流通过。
若外部不提供供电,推: 外部接地,内部供电,走出电流;若外部提供供电,挽:外部电流流入,电流走向GND。
开漏输出(Push-Pull Output,PP):对外输出高低电平,由外部电路输出电流,用于外部通信或高电压大电流场景较多。
3 浮空输入、上拉输入、下拉输入、模拟输入
斯密特触发器:
施密特触发器,是一种数字信号处理器。输入电压低于阈值,提供低电平信号。输入电压高于阈值,提供高电平信号。基于施密特触发器,将外部电压值,转换为0、1 。有施密特,只能得到0或者1,没有,外部多少电压,直接连到芯片内部就是多少电压。
外部电压值输入,经过施密特触发器转换后得到0、1的数字信号,写入寄存器中,程序可以读取寄存器,得知外部电平状态,但不接外部设备,接0还是接1是不确定的。
外部引脚连接了外部电路:外部高电压,被施密特处理后存入高电平1,外部低电压,被施密特处理后存入低电平0。如果外部引脚和外部电路未连接:内部VCC提供高电压,施密特处理后存入高电平1。上拉输入可以提供:默认高电平状态。
外部引脚连接了外部电路:外部高电压,被施密特处理后存入高电平1;外部低电压,被施密特处理后存入低电平0。如果外部引脚和外部电路未连接:内部GND提供O电压,施密特处理后存入低电平0。下拉输入可以提供:默认低电平状态。
外部设备的电压直接传递到芯片内部:模拟信号处理。
浮空、上拉、下拉,均使用施密特触发器得到数字信号,非0即1。
模拟输入,得到模拟信号(电压值),用于感知外接状态,如温度、湿度等(基于电压转换得到)。
在如下示例图中,有红色点点是连线的。行做输出,列做输入,可以判断哪个列被按下。然后瞬间反转,行做输入,列做输出 。
五、MOS管与三极管
MOS通过电压导通,三极管通过电流导通。有电压才能有电流。控制引脚给出高/低电平,则形成电压差,电流通过。
六、串口
从通讯方式上看,主要分为:串行通信和并行通信。
串行通信,就是串口通信所用方式,数据位依次发送。
Universal Asynchronous Receiver Transmitter 即通用异步收发器是一种通用的串行、异步通信总线。
Universal Synchronous Asynchronous Receiver Transmitter即通用同步异步收发器,是一种串行、同步、异步通信总线。
同步:会使用时钟线。
异步:不使用时钟线。
异步模式下串口通信,本质上是:在特定时间间隔下,拉高、拉低电平值,发送接收0、1数字信号。下图为发送n位。
通讯双方约定好时间间隔,如T。每一次拉高或拉低,持续时间T。第九位校验位,事先协商好是否发送。
二进制数据的发送是:从右向左发送,每次发送8个位。
波特率是串口通讯最重要的设置,比如发送11110011,波特率需要双方一致。波特率即为每秒钟传输二进制的位数。
串口通讯需要2根线,即:TXD(发送)和RXD(接收)。
串口接收数据的一个最主要的机制就是:中断(Interrupt/INT)。
中断也分为两种类型:内部中断、外部中断。
内部中断是由处理器内部产生的中断请求信号(串口、DMA、定时器、系统时钟等),串口接收的RNBE、IDLE等中断,就是内部中断。
外部中断是由外部设备(如按键、传感器、通信接口等)产生的中断请求信号,需要通过中断控制器进行处理。
同时,系统内可以产生许多中断,不同中断之间是有优先级的,优先级分为:
抢占优先级(Preemptive Priority):抢占CPU执行时间的优先级,全周期不变,数字越小越高。
响应优先级(Responsive Priority):在抢占优先级相同时,基于响应优先级决定优先权。
七、时钟周期
时钟周期:高低电平变换的时间。
.
时钟周期也称:震荡周期、震荡频率。每一次周期的震荡,CPU可以完成一个独立的动作。因为一个时钟周期(震荡信号)会产生电平的变化,电平的变化会让电路产生电压的变化,电压的变化会导致电流的变化,电流的通过与否决定了某些器件是否工作,时钟周期的电平信号是标准的高低变换,也称为:方波。
脉冲宽度调制(PWM):输出特定占空比的电平脉冲信号。
定时器,本质上就是一个计数器,以计数决定时间。 CPU在计数有特定频率,每属一次的时间是固定的,计数=时间。
GD32的定时器类型:
内核定时器是ARMCorteX-M芯片(GD32F407VET6是CorteX-M4)在CMSIS标准中所定义的。
所有ARM芯片,都支持内核定时器(SysTick)。
内核定时器为24位宽度(0~16777215),主要作用是,在0~16777215之间,设定CAR(重装载值)。
·基于设定的CAR实现:计数从O开始,每当计数到CAR,产生一次中断,并归零计数值
计数基于时钟信号(CPU主频),每一个时钟周期计数+1。
CPU在工作中需要稳定的时钟信号,稳定的时钟信号来自于:晶振。
晶振,全称晶体振荡器,石英晶体的压电效应制成的谐振器件,它通过机械共振产生具有精确频率的电信号。
开发板(芯片外部)焊接了一个8M的晶振,可产生稳定8MHz的时钟信号:
晶振提供基础稳定频率之后经过PLL锁相环进行倍频(加倍频率)提升至168MHz。
鉴相器:比较2个信号的差异,输出差异部分。
低通滤波器:平滑信号。
压控振荡器:基于电压输出振荡信号,电压越高频率越高。
锁相环:输入和输出频率达到一致。
VCO是电压驱动的元件,用变化非常快的波形驱动它,不太合适。
下图表示下面的线是经过低通滤波器之后:
有些电容也可以充当 低通滤波器的作用:
鉴相器:L1==L2,无相位差(波形无变化)
鉴相器:L1>L2,输出相位差,低电平下限逐步增高,直到和高电平一致,平均输出电压值在增高
鉴相器:L1<L2,输出相位差,高电平上限逐步降低,直到和低电平一致,平均输出电压值在降低
低通滤波器:将鉴相器的输出相位差电压变化波形变得平滑
VCO:电压高输出高频率方波,电压低输出低频率方波 。
此时L2是100Hz,出来的是200Hz。
总线是不同硬件中传输数据、控制信号的通信线路,可以在总线上挂载所需外围设备。
AHB总线(高速总线),引出168MHz的总线时钟频率。
APB1总线(低速总线),分频后得到42MHz时钟频率,供给其上的外设(如定时器5和6等)。
CAR为22,23为惯性值不用管(虽然中断但自动+1了) 。
CK_TIMER:时钟信号。
CEN:时钟使能,置为1(高电平)开 始计数。
UPG:准备重载的信号。
Reload Pulse:重载信号。
UPE:更新信号(中断)。
CNT_REG:计数值。
CAR范围,基于定时器位数决定(16位),即范围:0~65535。
问:基于此,如果需要基本定时器完成每隔1秒的稳定中断:CAR(重装载值)设定为:42,000,000。但是,定时器计数器仅16位(范围0~65535),宽度不足,怎么办?
答:将主频做1000分频(降低1000倍),即1秒:42000个周期。则计数从0计数到42000-1,即可确定1秒时间。
计数模式的分类:
如果计数器16位:0~65535,那分频器16位:0~65535(可供分频的范围)。