#单片机基础 笔记一

--单片机概述+STM32开发环境搭建+创建工程
--STM32-GPIO(重点)编程

--STM32-USART串口应用

--STM32-SPI(液晶屏)+中断系统

--STM32-时钟系统(重点中的重点)

--STM32-PWM+ADC

--STM32-DMA + DHT11

1. 计算机组成原理

1.1 计算 的组成

  1. CPU

控制器:整个计算机的控制中心

运算器:处理计算和数据

  1. 存储器

ROM(Read Only Memery):

程序存储器,只读存储器,掉电不丢失数据,存储介质flash闪存

RAM(RAndom Memery):

内存、掉电丢失数据,存储介质SRAM

  1. 输入:将其他信号转换为电信号。

  2. 输出:将电信号(0、1)转为人或其他设备能理解的信号。

1.2 IO 逻辑

数据在计算机系统中的存储,传输,运算都是以二进制的形式进行的。

数据的传输其实通过数据总线真正传递的是电信号,也就是高低电平。

计算机系统中的高低电平逻辑1和0。

电压:电压差 电势差

1 . 3 存储器

Cache(高速缓冲存储器)的作用

  • 提高访问速度:缓存是一种小而高速的存储器,用于存储最近或频繁使用的数据。由于缓存的访问速度比主存(如RAM)快很多,它能显著减少CPU等待数据的时间,从而提高系统性能。
  • 减少内存延迟:当处理器需要访问数据时,如果数据在缓存中,可以快速获取,而不需要花费较长时间去访问主存。这大大减少了内存延迟。
  • 提高吞吐量:通过减少内存访问延迟和提高访问速度,缓存能够提高整体系统的吞吐量,使CPU能够更高效地执行更多指令。

1 . 4 总线 重点理解)

总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类

计算机的总线可以划分为数据总线、地址总线和控制总线

分别用来传输数据、数据地址和控制信号

  1. 地址总线

(1)CPU是通过地址总线来指定存储单元的

(2)地址总线决定了cpu所能访问的最大内存空间的大小

如: 10根地址线能访问的最大的内存为1024位二进制数据(1024个内存单元)

(3)地址总线是地址线数量之和

  1. 数据总线

(1)是CPU与内存或其他器件之间的数据传送的通道。

(2)数据总线的宽度决定了CPU和外界的数据传送速度。

(3)每条传输线一次只能传输1位二进制数据。

如: 8根数据线一次可传送一个8位二进制数据(即一个字节)。

(4)数据总线是数据线数量之和。

  1. 控制总线

(1)CPU通过控制总线对外部器件进行控制。

(2)控制总线的宽度决定了CPU对外部器件的控制能力。

(3)控制总线是控制线数量之和。

总结:

数据总线:宽度决定CPU一次传输数据的数据量

地址总线:决定了CPU的寻址能力

控制总线:CPU对外部器件的控制能力。

2. 单片机基础 掌握)

2 . 1 什么 单片机

单片机是单片微型计算机的简称,MCU是Microcontroller的简称,也就是嵌入式微控制器。采用集成电路技术将具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、定时器/计时器、多种I/O口和中断系统等功能集成到一块硅片上。

可以说单片机就是一个小而完善的微型计算机系统。

SOC(SYStem on Chip):定制版的单片机

2.2 单片机 的型号

51单片机(8位)

AT89C51 ATMEL STC89C51 宏晶科技STC

宏晶科技_百度百科宏晶科技是新一代增强型8位单片微型计算机标准的制定者和领导厂商。致力于提供满足中国市场需求的高性能单片机技术,在业内处于领先地位,销售网络覆盖全国。https://baike.baidu.com/item/%E5%AE%8F%E6%99%B6%E7%A7%91%E6%8A%80?fromModule=lemma_search-box

ATMEL公司_百度百科Atmel 公司为全球性的业界领先企业,致力于设计和制造各类微控制器、电容式触摸解决方案、先进逻辑、混合信号、非易失性存储器和射频 (RF) 元件。凭借业界最广泛的知识产权 (IP) 技术组合之一,Atmel 为电子行业提供针对工业、消费、安全、通信、计算和汽车市场的全面的系统解决方案。ATMEL在系统级集成方面所拥有的世界级专业知识和丰富的经验使其产品可以在现有模块的基础上进行开发,保证最小的开发延期和风险。凭借业界最广泛的知识产权(IP)组合,Atmel提供电子系统完整的系统解决方案的厂商。Atmel公司的股票代码为"ATML.O"在纳斯达克股票市场上市。ATMEL公司是世界上高级半导体产品设计、制造和行销的领先者,产品包括了微处理器、可编程逻辑器件、非易失性存储器、安全芯片、混合信号及RF射频集成电路。通过这些核心技术的组合,ATMEL生产出了各种通用目的及特定应用的系统级芯片,以满https://baike.baidu.com/item/ATMEL%E5%85%AC%E5%8F%B8?fromModule=lemma_search-box

TI公司

MSP430(16位)

32单片机(32位)

STM32 ST意法半导体 GD32 兆易创新GD

32位处理器:CPU单次运算所能处理得最大的位数
意法半导体_百度百科意法半导体(ST)集团于1987年成立,是由意大利的SGS微电子公司和法国Thomson半导体公司合并而成。1998年5月,SGS-THOMSON Microelectronics将公司名称改为意法半导体有限公司。意法半导体是世界最大的半导体公司之一。公司2019年全年净营收95.6亿美元; 毛利率38.7%;营业利润率12.6%; 净利润10.32亿美元。https://baike.baidu.com/item/%E6%84%8F%E6%B3%95%E5%8D%8A%E5%AF%BC%E4%BD%93?fromModule=lemma_search-box

兆易创新科技集团股份有限公司_百度百科北京兆易创新科技股份有限公司于2005-04-06在北京市工商行政管理局登记成立。法定代表人朱一明。2022年8月1日消息,公司已完成工商变更登记,并取得了北京市海淀区市场监督管理局换发的《营业执照》。工商变更登记内容为:名称由"北京兆易创新科技股份有限公司"变更为"兆易创新科技集团股份有限公司"。https://baike.baidu.com/item/%E5%85%86%E6%98%93%E5%88%9B%E6%96%B0%E7%A7%91%E6%8A%80%E9%9B%86%E5%9B%A2%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8?fromModule=lemma_search-box

2.3 8位和32位的区别?

2.4 开发板/最小系统板

开发板通常是学习用途,功能比较全,接口丰富,是用于研发、研究、学习的一块板子。

在后面学习底层的时候会用到,这里不过多介绍了,咱们主要看下咱们32要用到的板子

最小系统板是个核心板,集成了核心的通用功能,可以根据需求定制各种不同的底板,通用性较好。再者核心板作为一块独立的模块被分离出来,也降低了开发的难度,增加了系统的稳定性和可维护性通常用于做项目,也可以作为模块在产品里在直接用。

3. STM32

3 . 1 简介

STM32是意法半导体公司生成的一款32位的微控制器。

ST公司用ARM设计的内核,完善周围电路、增加外设,再进行封装成STM32。

STM32的功能强大,性能优异,片上资源丰富,低功耗,是一款经典的微型控制器。

3 . 2 命名 规范

STM32G030C8T6 基于ARM的Cortex M0+内核。

|------|-----------------------------------------------------------------------------------------------------|
| ST | 意法半导体 |
| M | 微控制器(microcotroller) |
| 32 | 32位处理器 |
| 类型 | F 通用/基础型 foundation G 多用途型 general-purpose L 低功耗 low power H 高性能 High performance S 简单/标准型 Standard |
| 系列 | 0 精简系列 1/2/3 增强系列 4/7 高性能系列 |
| 子型号 | 00/01/02/03/05/0 |
| 引脚数量 | 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 : 384KB E : 512KB G : 1MB I : 2MB |
| 封装 | U - UQFN封装 T - TQFP封装(这个从单片机上是可以看出来的,从中间过是U型,从低下过是T型) |
| 工作温度 | 6 - -40 ~ 85度 |

3 . 3 STM 3 2 的优势

STM32 | 产品 | STM32 | MCU单片机 | 意法半导体STM | STMCU中文官网

  1. 产品型号丰富,可选择强
  2. 运算速度快,功耗低
  3. 处理器接口丰富
  4. 库函数开发体系完整
  5. 应用广泛

4. STM32G030系统架构 掌握)

4.1 架构理解与对比

STM32G0

STM32F0

系统主要由以下几个模块组成 :

● 二个主模块 :

-- Cortex-M0+ 内核及先进高性能总线 (AHB bus)

-- 通用 DMA (通用的直接存储器存取)

● 三个从模块 :

-- 内部 FLASH

-- 内部SRAM

-- AHB和AHB到APB的连接桥,挂在APB总线上和AHB的外设

5. ARM 体系架构

面试题

从"英国苹果"到RISC芯片王者------ARM的前世今生之完整追溯 (baidu.com)

什么是ARM

  1. ARM是一家公司,只做技术服务(知识产权),设计ARM架构,不产芯片也不出售芯片。

  2. ARM处理器内核,ARM处理器是英国Acorn有限公司设计的低功耗低成本的第一款RISC的微处理器,经典处理器 ARM7\ARM9\ARM11,后续处理器(16年)开始以cortex命名。

COTEX------A: 高性能的内核(平板,手机,电脑)

Cortex-A5:低功耗,适合入门级应用。

Cortex-A7:高能效,广泛应用于智能手机。

Cortex-A9:高性能,应用广泛。

Cortex-A15:高性能,用于更高端的设备。

Cortex-A53:64位处理器,注重功耗与性能平衡。

Cortex-A57:高性能64位处理器。

Cortex-A72:用于旗舰级设备。

Cortex-A75、Cortex-A76、Cortex-A77、Cortex-A78:不断提升的性能和能

Cortex------R:实时性要求较高的场景(航天,汽车,导弹,坦克)

Cortex-R4:适用于高性能实时应用。

Cortex-R5:增强的实时性能。

Cortex-R7:更高的性能和确定性。

Cortex-R8:最新的实时处理器,提供更高的性能和安全性。

Cortex------M:低成本低功耗的解决方案(嵌入式系统当中)

Cortex-M0:超低功耗,适合简单应用。

Cortex-M0+:进一步降低功耗并提高性能。

Cortex-M3:平衡性能和能效,用于多种嵌入式应用。

Cortex-M4:增加DSP功能,适用于信号处理应用。

Cortex-M7:最高性能的Cortex-M处理器,适用于复杂的嵌入式系统。

Cortex-M23:基于ARMv8-M架构,支持TrustZone安全特性。

Cortex-M33:更高的性能和安全性,适用于高级嵌入式应用。

Cortex------X:超高性能

主要针对高端智能手机、平板电脑、笔记本电脑和其他需要高计算能力和能效的设备。

这些芯片的设计目标是提供领先的单线程性能和整体系统性能。

Cortex-X1:

首款Cortex-X系列产品,于2020年发布。

相较于Cortex-A77,性能提升了约30%。

Cortex-X2:

2021年发布,基于ARMv9架构。

提供进一步的性能提升,并改进了机器学习和安全功能

  1. ARM是一款指令集

能够指挥处理器完成相应功能的命令的集合

5.1 什么 是指令集

指令:能够指挥处理器完成相应功能的命令(+,-)

指令集:指令的集合

指令在程序中的作用

在程序中,指令的组合形成了一系列步骤,每个步骤执行特定的操作,从而完成整个程序的功能。通过有序地执行这些指令,处理器可以实现从简单的数学运算到复杂的逻辑控制、数据处理、设备管理等各种任务。

5.2 指令的分类 掌握)

RISC(Reduce)精简指令集

精简指令集(RISC)-->微处理器

只保留常用的的简单指令,硬件结构简单,复杂操作一般通过简单指令的组合实现,一般指令长度固定,且多为单周期指令。

RISC处理器在功耗、体积、价格等方面有很大优势,所以在嵌入式移动终端领域应用极为广泛

优点:便宜,体积小,功耗低,指令简短,对散热的要求不高

缺点:没办法处理复杂的指令,性能差

CISC(Complex)复杂指令集

复杂指令集(CISC)-->电脑CPU

不仅包含了常用指令,还包含了很多不常用的特殊指令,硬件结构复杂,指令条数较多,一般指令长度和周期都不固定

CISC处理器在性能上有很大优势,多用于PC及服务器等领域

优点:性能好,运算速度快

缺点:CPU设计复杂,体积大,功耗高,成本高,散热要求高。

5.3 ARM 一款 精简指令

ARM指令集:所有指令(机器码),都专用32bit存储空间,代码灵活,指令简洁,执行ARM指令PC每次自加4

Thumb指令集:所有指令(机器码),都专用16bit存储空间,代码灵活,指令简洁,执行ARM指令PC每次自加2

6. Cortex-M0+内核架构

Cortex-M0+ 微处理器主要包括处理器内核、嵌套向量中断控制器(NVIC)、调试子系统、内部总线系统构成。Cortex-M0+ 微处理器通过精简的高性能总线(AHB-LITE)与外部进行通信。

6.1 Cortex-M0+ 特性

  • 采用Thumb指令集 (ARM指令是32位的,而Thumb指令时16位的,如果存储空间中可以放32条ARM指令,就可以放64条Thumb指令,因此在存放Thunb指令时,代码密度高)
  • 高性能,使用ARMv6-M的体系架构;
  • 中断数量可配置1-32个,4级中断优先级
  • 门电路少,低功耗 中断唤醒控制器(WIC),支持极低功耗休眠模式(直接掉电休眠)
  • 兼容性好 与Cortex-M1 处理器兼容,向上兼容 Cortex-M3 和 Cortex-M4 处理器 ,(可兼容对于程序员非常友好,所以这一点也是很好用的)可以很容易地升级、移植。
  • 支持多种嵌入式操作系统(),很简单的操作一同(RTOS),也被多种开发组件支持(包括 MDK(ARM Keil 微控制器开发套件)、RVDS(ARM RealView 开发组件)、IAR C 编译器等。)

6.2 Cortex-M0+工作模式


线程模式:芯片复位之后,执行普通代码,用户程序。

6 .3 Cortex-M0+工作 状态

Thumb状态:程序正常运行的状态

调试状态:调试程序的时候你处理器的状态。

6 .4 Cortex-M0+ 指令集

ARM处理器支持两种指令集:ARM 和 Thumb。

EPSR寄存器的T标志位负责指令集的切换,Cortex-M0只支持Thumb指令。

ARM指令集 32位精简指令集; 指令长度固定;

降低编码数量产生的耗费,减轻解码和流水线的负担;

Thumb指令集指令宽度16位,是ARM指令集的一个子集;

与32位指令集相比,大大节省了系统的存储空间;(密度高)

Thumb指令集不完整,所以必须配合ARM指令集一同使用

6 .5 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状态位(T位的标志可以采用哪种指令,MO+支持两种指令集的切换。

7. GPIO

1. 基本概念

G030GPIO所在的位置

GPIO的全称是General purpose input output:通用的输入输出接口

GPIO是嵌入式系统、单片机开发中最常用的接口,用户可以通过编程灵活的对接口进行控制,实现对电路板上LED、数码管、按键等常用设备控制驱动,也可以作为串口的数据收发管脚,或AD的接口等复用功能使用,其作用和功能是非常重要的。

2. 实际应用

input------输入------数据采集,各种传感器,按键

output------输出------输出控制 LED灯,数码管,LCD

3. 功能描述

4.功能框图

VDD:元器件内部的电压(3.3v)

VSS:公共地线

VCC:接入电路的电压

施密特触发器

  1. 去除噪声

由于外部输入的电信号,可能会出现脉冲等噪声的影响,为了让信号更加清晰,所以就设置了TTL施密特触发器来进行整形。

  1. 波形整形

会自动化过滤掉不稳定的波形

  1. 提高抗干扰能力

由于施密特触发器具有滞回效应,它能够提高电路的抗干扰能力。即便输入信号存在一定程度的抖动或者噪声,施密特触发器仍能保持稳定的输出状态。

5. GPIO 基本功能

5 . 1 输入功能

浮空输入

IO------施密特触发器------输入数据寄存器------CPU读取数据

让上下拉电阻都不接入电路 通俗讲就是让管脚什么都不接,悬空着。
此时VDD和VSS所在路径的两个开关同时断开。因为没有上拉和下拉,所以当IO口没有接输入的时候,此时的电平状态会是一个不确定的值,完全由外部输入决定。

由于浮空输入一般多用于外部按键输入,结合图上的输入部分电路,浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的,易受干扰。

优点:输入的电平完全由外界决定,与内部电路无关

缺点:没有外接电路介入的时候,IO引脚浮空,电平不稳定

上拉 输入

相比于浮空输入接入上拉电阻,在没有信号的时候,IO口识别的都是高电平。

IO------上拉电阻------施密特触发器------输入数据寄存器------CPU读取
当没有信号输入时,IO口识别的都是高电平,当外部电路输入的信号不稳定时,上拉电阻就会将输入的信号拉高,此时引脚始终读到高电平信号。(首先以外部为主)

优点:外界无输入时,电平被稳定在高电平

应用:在电平信号不稳定时

下拉输入

下拉电阻接入电路,在没有信号的时候,IO口识别的都是低电平。

IO------下拉电阻------施密特触发器------输入数据寄存器------CPU读取。

输入的电平不会因上下浮动而导致输入信号不稳定,当外部没有信号输入时,下拉电阻会将输入信号钳在低电平,此时引脚始终读到低电平信号。

模拟输入

IO------片上外设
信号进入后不经过上拉电阻或者下拉电阻,关闭施密特触发器,经由另一线路把电压信号传送到片上外设模块,所以可以理解为模拟输入的信号是未经处理的信号,是原汁原味的信号。

应用: ADC

模拟信号和数字信号有什么区别呢

  1. 时间连续性

模拟信号是连续的

数字信号是离散的

  1. 传输方式上

模拟信号使用模拟量来表示电压信号

数字信号通过0/1构成的数据流来表示的

  1. 保密性

数字信号的保密性更强

模拟信号保密性更差

5 . 2 输出功能

推挽输出

推挽:描述电流的动作

推: N_MOS关闭,P_MOS打开,电流从内部的VDD给外部供电,电流从内部流向外部。

推出去。

挽: N_MOS打开,P_MOS关闭,电流从外部流进来,挽回来·。

输出数据寄存器'1'------>输出控制'0'------>PMOS激活

输出数据寄存器'0'------>输出控制'1'------>NMOS激活

输出寄存器上的'0'激活N-MOS,而输出寄存器上的'1'将激活P-MOS。

具备输出高低电平的能力。

推挽输出就是可以需要利用两个不同的MOS管来实现输出。

推挽输出模式下(P-MOS管+N-MOS管),通过设置位设置/清除寄存器或者输出数据寄存器的值,途经P-MOS管和N-MOS管,最终输出到I/O端口。

一般最常用的输出方式,既能输出高电平也能输出低电平。

开漏输出

在开漏模式下,只能输出低电平。输出引脚可以有两种状态:

  1. 低电平状态(逻辑0):当内部晶体管导通时(开关闭合),引脚被拉到地电位,输出为低电平(0V或接近0V)。
  2. 高阻态(逻辑1):当内部晶体管不导通时(开关断开),引脚处于高阻态。外部上拉电阻将引脚电压拉高到Vcc(电源电压),输出为高电平。

特点:

虽然我们可以看到开漏输出是没有办法在内部输出一个高电平,但是这一个看似是缺点。其实实际上是一种优点。当给一个低电平的时候,MOS管没有导通,此时电压不确定导致无法输出高电平,但是一旦我们在外部增加一个上拉,那么这一个缺点就会被有效避免。并且,因为是我们自己设计一个上拉,这个上拉的电压是由我们自己确定,这样我们就可以根据外部电路需要多少V的高电平来给这一个上拉的电压,可以更好的适应更多情况。如下图,我们可以给定任意的VDD电压,来适应我们实际所需要的情况。

5 . 3 推挽输出 与开漏输出 区别

6 . GPIO 的寄存器

寄存器 地址

使能时钟的地址

7. 实验一

7.1 实验要求

点亮LED灯

7.2 实验分析

  1. 查看实物------》找到丝印
  2. 查看原理图,找到连接的引脚
  3. 点亮灯

7.3 实验过程

  1. 找丝印
  1. 查看原理图

  1. 寄存器配置

7.4 代码实现

C语言

如果启动文件有问题,新建文件夹

复制代码
int` `main(void)`
`{`
	`//配置时钟使能`
	 `*(unsigned` `int` `*)0x40021034` `|=` `1<<1;`
	`//端口模式`
	`*(unsigned` `int` `*)0x50000400`  `&=~(1<<1);`
	`*(unsigned` `int` `*)0x50000400`  `|=` `1<<0;`
	`//输出类型`
	`*(unsigned` `int` `*)0x50000404`  `&=~(1<<0);`
	`//输出数据`
	`*(unsigned` `int` `*)0x50000414`  `&=~(1<<0);`
	
	`while(1)`
	`{`
		
	`}`
`}
c程序优化
复制代码
typedef struct{`
`	unsigned int	MODER;`
`	unsigned int	OTYPER;`
`	unsigned int  XXXX;`
`	unsigned int	PUPDR;`
`	unsigned int	YYYY;`
`	unsigned int	ODR;`
`}GPIO;`
`#define GPIOB 	(*(GPIO *)0X50000400)`
`#define RCC_GPIOB		*(unsigned int *)0x40021034`

`int main(void)`
`{`
`	RCC_GPIOB |= 1<<1;`
`	GPIOB.MODER	&= ~(1<<1);`
`	GPIOB.MODER |= 1<<0;`
`	GPIOB.OTYPER &= ~(1<<0);`
`	GPIOB.ODR	&= ~(1<<0);`
`	while(1)`
`	{`
		
`	}`
`}`
`
CUBE MX 实现 简单)

代码实现

复制代码
	RCC->IOPENR |=` `1<<1;`
`	GPIOB->MODER &=~(0x3<<4);`  `//清零`
`	GPIOB->MODER |=` `1<<4;`
`	GPIOB->OTYPER &=` `~(1<<2);`
`	GPIOB->ODR &=` `~(1<<2);`
`
方法二 更简单)

HAL库函数实现

功能:设置或清除选定的端口位

参数:1.端口号

2.引脚号

  1. 3.电平状态

返回值:无

功能:电平状态切换

参数:端口号 引脚号

返回值:无。

延时函数

HAL_Delay(500);

毫秒级延时

8. 实验

实验要求

按键控制灯的量灭

实验分析

  1. 找按键和灯的丝印
  2. 五向按键--S1
  3. LED-》D7,D9,D10
  4. 原理图

实验过程

原理图分析

CUBMX配置

HAL库函数分析

功能:读取指定的引脚

参数 :端口号 引脚

返回值:引脚的值

代码实现

9. 抖动问题

机械按键通常由两个金属触点组成,当按键按下或释放时,这两个触点会迅速接触或分离。但由于机械结构的弹性,这个过程并不是瞬间完成的,而是会产生短暂的抖动,导致在几毫秒内有多次接触和断开的现象。

消除抖动

方法一:延时消抖

8. 串口通信

  1. 两个端,一个发送端,一个接收端
  2. 数据的传递
  3. 信息的交互

摩斯密码(兴趣拓展)

是由点(.)和划(-)组成的,但它并不是严格意义上的二进制码。二进制码严格来说是由0和1两种状态构成的编码系统,而摩斯密码更像是一种时长编码系统。

  1. 使用短信号(点,.)、长信号(划,-)以及不同的间隔时间。
  2. 变长度编码,不同字符用不同长度的点和划组合表示。

摩斯密码的结构

摩斯密码的每个字符由点(.)和划(-)组成,通过不同的组合来表示不同的字母和数字。不同字符之间有不同的间隔时间来区分。

  • 点(.) :短信号
  • 划(-) :长信号
  • 字符间隔 :字符内部点和划之间的间隔较短
  • 字符间隔 :字符之间的间隔较长
  • 单词间隔 :单词之间的间隔更长

例如:

  • 字母A的摩斯密码是. -
  • 字母B的摩斯密码是- . . .

1. 通信基础

通信的划分

根据通信方向划分

单工 : 一根信号线单向发送或者接收

要么收,要么发,只能作为接受或者发送设备。 比如:收音机

半双工 :一根信号线,可以双向进行,但是不能同时

可以收,可以发,但是不能同时进行。 比如:对讲机

全双工 : 两根信号线,可以在同一时刻收发信息。比如: 手机,电脑

根据通信方式划分

串行通信:指的是同一时刻只能收或发一个bit位信息,因此只用1根信号线即可

串行传输:数据一位一位串起来,逐个传输,数据按位顺序传输

优点:占用的引脚资源少

缺点:传输速度慢

并行通信:指的是同一时刻可以收或发多个bit位的信息,因此需要多根信号线才行

并行传输:使用多根线同时传输一个字的多个位,如 8 根线一次传输 8 个位。

优点:传输速度快

缺点:占用引脚多

根据时钟信号划分

同步通信 :通信双方根据同步信号通信,比如双方有一个共同的时钟信号(SPI全双工 I2C半双工)

异步通信 :通信双方有自己独立的系统时钟,大家约定好通信的速度。

异步通信不需要同步信号,但是并不是说通信的过程不同步(UART)

通信速度 单位时间 发送 或者 接收 的数据位数
波特率:一秒发送多少bit位

单位:bit/s bps

常用的波特率:9600bps 115200bps

电器协议补充

TTL、RS232、RS485的区别和简介_rs232和ttl-CSDN博客

TTL电平

特点:

电平范围:典型的TTL电平为0V和+5V,有时也使用3.3V。逻辑低(0):0V(通常0V - 0.8V),逻辑高(1):+5V(通常2V - 5V)

通信方式:单端信号,通常用于短距离、低速率的数字电路和芯片之间的通信。

优点:简单、成本低。

缺点:抗干扰能力差,传输距离短(通常在几十厘米以内)。

应用:常用于微控制器和其他数字电路之间的信号传输。

RS232

电平范围: 逻辑低(0):+3V至+15V

逻辑高(1):-3V至-15V

通信方式:单端信号,全双工或半双工。

传输距离:通常在15米以内,理论上可达30米(在低速率下)。

波特率:最高可达115200 bps,常见的波特率有9600 bps、19200 bps等。

优点:

抗干扰能力较强,适用于较长距离的通信。

适合点对点通信。

缺点:

信号电平相对较高,可能需要专门的电平转换芯片(如MAX232)。

不适合多点通信。

应用:早期的计算机串口通信、调制解调器、工业设备、串口打印机等。

RS485

电平范围:

通信方式:差分信号,全双工或半双工。

传输距离:理论上可达1200米(在低速率下),常见实际应用在几百米以内。

波特率:最高可达10 Mbps,但传输距离越长,波特率通常越低。

优点:

非常强的抗干扰能力,适用于长距离和工业环境。

支持多点通信(多达32个节点,可以扩展到128个甚至更多)。

缺点:

需要差分驱动和接收器电路。

通信协议相对复杂,需要适当的协议来管理总线冲突和通信。

应用:工业自动化、楼宇控制、远程数据采集、串行联网设备等。

2. 串口通信协议

空闲状态:始终保持在高电平,为了提高抗干扰能力。

起始位:1位 低电平表示数据开始传输,数据的起始

数据位:9位/8位/7位可配置

检验位(可选):起偶校验

奇校验:数据位上1的个数+校验位上1的个数=奇数

偶校验:数据位上1的个数+校验位上1的个数=偶数

注意:校验位用来校验数据传输过程中的错误,可以是奇偶校验,也可以不校验。

检验位的设置根据通信协议和数据传输的可靠性需求而定。

停止位:1位 将电平信号拉高,回到空闲状态,表示传输的结束。

总结:开始通信时我们要有一个起始位和结束位,高信号表示通信停止,当信号接收器检测到电平由高变低时,表示开始通信,准备开始读数据,从前面开始读到停止位。

3. USART

3.1 简单介绍

USART:支持同步/异步通信,全双工,串行

UART:只支持支持异步通信(没有时钟线),全双工,串行

是一种常见的外设,用于串行通信。它通常嵌入在微控制器或微处理器中,用于与外部设备进行数据交换。

USART具有以下功能和特点:

  1. 通用性 :支持同步和异步通信模式,因此可以与多种外部设备进行通信。
  2. 收发数据 :可以发送和接收数据,支持全双工通信。
  3. 波特率控制 :支持灵活的波特率配置,适应不同的通信速率要求。
  4. 错误检测和处理 :具有错误检测和处理功能,如奇偶校验、帧错误检测等,确保通信的可靠性。
  5. 流控制 :支持硬件流控制(如RTS/CTS)和软件流控制(如XON/XOFF),用于控制数据流。

USART通常用于串行通信接口,如RS-232、RS-485、SPI(串行外围接口)、I2C(Inter-Integrated Circuit)等。

3 . 2 框图分析

发送数据寄存器 :发送数据寄存器用于存储即将发送的数据字节。当需要发送数据时,CPU将待发送的数据加载到发送数据寄存器中。

发送移位寄存器:用于数据的传输,按照串行通信协议逐位移位发送,一旦所有数据位都被发送完毕,发送移位寄存器将发送停止位。

3.3 数据接收 发送的过程

数据接收过程:由Rx端口接收到数据,接收移位寄存器逐位放入,到接收数据寄存器,由CPU或者DMA调用

数据发送过程:由数据总线写入发送数据寄存器,发送移位寄存器逐位发送到TX数据发送端。

4. 串口 相关寄存器

串口控制寄存器

USART_CR

USART_CR1

USART_CR2

USART_CR3

决定数据帧的格式:(设备功能初始化、通信帧格式配置)

波特率寄存器

USART_BRR 决定通信速度: bps bit/s

数据发送寄存器

USART_TDR 决定发送的数据:将要发送的数据写入

数据接收寄存器

USART_RDR 决定接收的数据:将要接收数据的读取

中断和状态寄存器

USART_ISR

5. 实验 串口发送实验)

实验要求

单片机通过串口给你的电脑每隔1s发送一个hello world

实验 过程

  1. 观察实物

丝印"p4"

  1. 原理图分析

工程 配置

代码实现

发送字符串的函数

实验二(串口收发实验)

实验要求

通过串口助手向单片机发送数据,单片机接收到数据后原样返回。

代码实现

  1. 实现字符接收函数 Uart_getchar();
  2. 实现字符串接收函数 Uart_Gets();

9. 输入输出重定向

printf重定向

int printf(const char * format,...)

printf函数底层调用的是fputc函数,fputs是将要发送的数据写入到标准输出流stdout

int fputc(int /*c*/, FILE * /*stream*/)

因此如果想让printf将数据输出到串口,需要重写fputc

代码实现

主函数调用

重写FPUTC

scanf重定向

10. 库函数实现

功能:发送一个数据

参数:句柄(标志位) 要输出的缓存区的首地址 发送的数据量(大小) 超时时间

返回值:发送状态

功能:接受一个数据

参数:句柄 缓存区首地址(数组首地址) 接受的数据量 超时时间

参数:接收状态

库函数代码实现

相关推荐
CS小麻瓜1 小时前
Web植物管理系统-下位机部分
c++·嵌入式硬件·湖南大学
MGT_97963 小时前
基于51单片机的GPS定位系统(仿真)
单片机·嵌入式硬件·51单片机
艾格北峰3 小时前
STM32 BootLoader 刷新项目 (六) 获取帮助-命令0x52
arm开发·stm32·单片机·嵌入式硬件
m0_739312874 小时前
【STM32】独立看门狗(IWDG)原理详解及编程实践(上)
stm32·单片机·嵌入式硬件
CV金科6 小时前
蓝桥杯-STM32G431RBT6(串口)
c语言·stm32·单片机·嵌入式硬件·蓝桥杯
硬核科技8 小时前
变压器在电源中的核心作用
网络·单片机·嵌入式硬件·硬件工程·智能硬件·开关电源
CV金科8 小时前
蓝桥杯-STM32G431RBT6(UART解析字符串sscanf和解决串口BUG)
c语言·stm32·单片机·嵌入式硬件·mcu·算法·bug
培林将军8 小时前
C51单片机-单按键输入识别,键盘消抖
单片机·嵌入式硬件·计算机外设
hong1616889 小时前
单片机(Microcontroller)原理及应用
单片机·嵌入式硬件