嵌入式单片机一套通关学习笔记

一、电压、电流和电阻

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

接线图:

相关推荐
悠哉悠哉愿意2 小时前
【嵌入式学习笔记】工程模板建立
笔记·嵌入式硬件·学习
d111111111d2 小时前
STM32外设基地址与寄存器偏移地址的深度解析
笔记·stm32·单片机·嵌入式硬件·学习
好奇龙猫3 小时前
【AI学习-comfyUI学习-第十九节-comtrolnet艺术线处理器工作流-各个部分学习】
人工智能·学习
YangYang9YangYan3 小时前
2026高职会计电算化专业高价值技能证书
大数据·学习·区块链
无聊到发博客的菜鸟3 小时前
使用STM32对SD卡进行性能测试
stm32·单片机·rtos·sd卡·fatfs
老王熬夜敲代码3 小时前
解决IP不够用的问题
linux·网络·笔记
许商3 小时前
【stm32】cmake脚本(一)
stm32·单片机·嵌入式硬件
polarislove02143 小时前
8.1 时钟树-嵌入式铁头山羊STM32笔记
笔记·stm32·嵌入式硬件
QT 小鲜肉4 小时前
【Linux命令大全】001.文件管理之file命令(实操篇)
linux·运维·前端·网络·chrome·笔记