一、电压、电流和电阻
1.电流
世间万物都是由原子构成,一个最简单的原子模型可以简化成,带正电荷的原子核在中央,周围环绕有若干个带负电的电子。同性相斥,异性相吸。这是最朴素的法则。
电流的产生和原子核及其电子的排列紧密相关。


供能:为电路提供能量(电子),即发送电子
回路:在电路另一端,吸收多余电子

两百年前的科学家无法观测到电子,猜测电流是:正极->负极 。但真实情况是,电子是:负极->正极 不过这些不影响,因为电流的定义是:正电荷的流动方向 ,和负电荷相反)
2.电压
如果电路是个挤满电子的公交车,上车1个电子,就要挤下去一个电子
电子够不够劲?
挤不上去怎么办。
电子移动的动力称之为:电压(电势能)

3.电阻
就像如下公交车一样,受限于材料,电子的移动是有阻力的(不同材料阻值不同)
电子移动的阻力,称之为:电阻
电子、电压、电阻之间的关系如下图

欧姆定律的重要参数
- I 电流
1A(安培): 1秒内有6.2415093x10^18个电荷通过单位安A1A=1000mA(毫安)
·U 电压
单位伏V 1V(伏特):在1R电阻下能通过1A电流,视为1V
·R 电阻
单位欧姆R 1R(欧姆):在1V电压下能通过1A电流,视为1R
单片机环境下的常见参数

4.电压电流大小的直观感受

人体的安全电压是36V,注意用电安全
补充:瞬时电压是36V
持续接触的安全电压24V(潮湿环境12V)
安全电流10 mA
二、单片机概述
1.概述
单片机(Micro Controller Unit:MCU)是一种集成电路芯片,它集成了处理器、存储器、输入/输出接口及各种功能模块于一身。

2.常见的MCU
单片机的分类主要基于其内核架构,如常见的:51内核、ARM内核、RISC-V内核

单片机主要用作于:微控制器。即基于逻辑程序(代码)控制(集成)电路的各类外设和资源
3.单片机控制原理
单片机通过 数字信号 (高低电平 ) 控制外围设备。
-高电平,逻辑表示为1。通常认为大于供电电压(3.3V)的70%,即2.3V
-低电平,逻辑表示为0。通常认为小于供电电压(3.3V)的30%,即0.99V即,通过电压的高低(大于某个阈值、小于某个值)来决定0、1



三、STM32简介
1.简介
STM32是ST公司基于ARMCortex-M内核开发的32位微控制器
STM32常应用在嵌入式领域如智能车、无人机、机器人无线通信、物联网、工业控制、娱乐电子产品等
STM32功能强大、性能优异片上资源丰富、功耗低,是一款经典的嵌入式微控制器
2.STM的种类

3.ARM简介
ARM既指ARM公司,也指ARM处理器内核
全世界超过ARM公司是全球领先的半导体知识产权(IP)提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构
ARM公司设计ARM内核,半导体厂商完善内核周边电路并生产芯片
4.本次使用的STM32型号

5.片上资源/外设

6.命名规则

7.系统结构

8.引脚定义

9.启动配置

10.最小系统电路

四、软件安装与新建工程
1.软件安装
•安装Keil5 MDK
•安装器件支持包
•软件注册
•安装STLINK驱动
•安装USB转串口驱动
2.型号分类与缩写

3.新建工程
①建立工程文件夹,Keil中新建工程,选择型号
②工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
③工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
④工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
⑤工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER
⑥工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run
4.工程架构

五、GPIO通用输入输出口
1.GPIO输出
①简介
•GPIO(General Purpose Input Output)通用输入输出口
•可配置为8种输入输出模式
•引脚电平:0V~3.3V,部分引脚可容忍5V
•输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
•输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
②GPIO基本结构

③GPIO位结构

④GPIO的工作模式

2.LED和蜂鸣器
①简介
•LED:发光二极管,正向通电点亮,反向通电不亮
•有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定
•无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音

②LED灯
接线图:

代码:
cpp
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStructre;
GPIO_InitStructre.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructre.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructre.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructre);
while (1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
Delay_ms(500);
GPIO_SetBits(GPIOA,GPIO_Pin_0);
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
Delay_ms(500);
}
}
③蜂鸣器
代码:
cpp
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStructre;
GPIO_InitStructre.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructre.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructre.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructre);
while (1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
Delay_ms(100);
GPIO_SetBits(GPIOB,GPIO_Pin_12);
Delay_ms(100);
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
Delay_ms(100);
GPIO_SetBits(GPIOB,GPIO_Pin_12);
Delay_ms(700);
}
}
3.GPIO输入
①按键
•按键:常见的输入设备,按下导通,松手断开
•按键抖动:由于按键内部使用的是机械式弹簧片来进行通断的,所以在按下和松手的瞬间会伴随有一连串的抖动

②传感器模块
•传感器模块:传感器元件(光敏电阻/热敏电阻/红外接收管等)的电阻会随外界模拟量的变化而变化,通过与定值电阻分压即可得到模拟电压输出,再通过电压比较器进行二值化即可得到数字电压输出


③AD/DA简介
•AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号
•DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号
•AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理提供了可能

④硬件电路模型

•AD转换通常有多个输入通道,用多路选择开关连接至AD转换器,以实现AD多路复用的目的,提高硬件利用率
•AD/DA与单片机数据传送可使用并口(速度快、原理简单),也可使用串口(接线少、使用方便)
•可将AD/DA模块直接集成在单片机内,这样直接写入/读出寄存器就可进行AD/DA转换,单片机的IO口可直接复用为AD/DA的通道
⑤运算放大器
•运算放大器(简称"运放")是具有很高放大倍数的放大电路单元。内部集成了差分放大器、电压放大器、功率放大器三级放大电路,是一个性能完备、功能强大的通用放大电路单元,由于其应用十分广泛,现已作为基本的电路元件出现在电路图中
•运算放大器可构成的电路有:电压比较器、反相放大器、同相放大器、电压跟随器、加法器、积分器、微分器等
•运算放大器电路的分析方法:虚短、虚断(负反馈条件下)

⑥DA原理
T型电阻网络DA转换器:


PWM型DA转换器:

输出电压 𝑉𝑂=(PWM占空比*)**×𝑉𝐻*V_O=(PWM占空比)×V_H
⑦AD原理
逐次逼近型AD转换器:


⑧AD/DA性能指标
•分辨率:指AD/DA数字量的精细程度,通常用位数表示。例如,对于5V电源系统来说,8位的AD可将5V等分为256份,即数字量变化最小一个单位时,模拟量变化5V/256=0.01953125V,所以,8位AD的电压分辨率为0.01953125V,AD/DA的位数越高,分辨率就越高
•转换速度:表示AD/DA的最大采样/建立频率,通常用转换频率或者转换时间来表示,对于采样/输出高速信号,应注意AD/DA的转换速度
⑨C语言各类定义
数据类型:

宏定义:
关键字:#define
用途:用一个字符串代替一个数字,便于理解,防止出错;提取程序中经常出现的参数,便于快速修改
定义宏定义:#define ABC 12345
引用宏定义: int a = ABC; //等效于int a = 12345;
C语言结构体
关键字:struct
用途:数据打包,不同类型变量的集合
定义结构体变量:
struct{char x; int y; float z;} StructName;
因为结构体变量类型较长,所以通常用typedef更改变量类型名
引用结构体成员:
StructName.x = 'A';
StructName.y = 66;
StructName.z = 1.23;
或 pStructName->x = 'A'; //pStructName为结构体的地址 pStructName->y = 66;
pStructName->z = 1.23;
C语言枚举:
关键字:enum
用途:定义一个取值受限制的整型变量,用于限制变量取值范围;宏定义的集合
定义枚举变量:
enum{FALSE = 0, TRUE = 1} EnumName;
因为枚举变量类型较长,所以通常用typedef更改变量类型名
引用枚举成员:
EnumName = FALSE;
EnumName = TRUE;
⑩按键控制LED&光敏传感器控制蜂鸣器
(1)按键控制LED
接线图:
