#单片机基础 笔记一

--单片机概述+STM32开发环境搭建+创建工程

--STM32-GPIO(重点)编程

--STM32-USART串口应用

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

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

--STM32-PWM+ADC

--STM32-DMA + DHT11

1. 计算机组成原理

1.1 计算的组成

1. CPU

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

运算器处理计算数据

2. 存储器

ROM(Read Only Memery):

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

RAM(RAndom Memery):

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

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

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

1.2 IO逻辑

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

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

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

电压:电压差 电势差

1.存储器

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

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

1.4 总线重点理解)

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

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

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

1. 地址总线 

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

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

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

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

2. 数据总线

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

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

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

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

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

3. 控制总线

(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位单片微型计算机标准的制定者和领导厂商。致力于提供满足中国市场需求的高性能单片机技术,在业内处于领先地位,销售网络覆盖全国。icon-default.png?t=N7T8https://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生产出了各种通用目的及特定应用的系统级芯片,以满icon-default.png?t=N7T8https://baike.baidu.com/item/ATMEL%E5%85%AC%E5%8F%B8?fromModule=lemma_search-box

TI公司

MSP43016位)

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亿美元。icon-default.png?t=N7T8https://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日消息,公司已完成工商变更登记,并取得了北京市海淀区市场监督管理局换发的《营业执照》。工商变更登记内容为:名称由“北京兆易创新科技股份有限公司”变更为“兆易创新科技集团股份有限公司”。icon-default.png?t=N7T8https://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.简介

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

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

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

3.命名规范

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 STM32的优势

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

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

4. STM32G030系统架构掌握)

4.1 架构理解与对比

STM32G0

快速的了解下STM32G0的新特性:
1)STM32G0仅需一组电源引脚,不仅降低了BOM成本还可以减少PCB面积,这一特性提升了IO的利用率到高达93%。
2)内部提供精度为1%的高速时钟HSI可以满足绝大数的应用,可进一步节省成本。可以大大减少因为不同的架构及不同开发工具而带来的成本开销和精力投入。
3)STM32G0系列的能效非常高,运行模式功耗低于100μA/ MHz,并提供多种低功耗模式,以节省电能,延长电池续航时间。当实时时钟(RTC)运行时,停止模式功耗仅为3-8μA,待机功耗仅为500nA。
4)集成了一个12位2.5 MSPS的ADC,利用硬件过采样还可将精度提高到16位。支持最新的USB Type-C和Power Delivery 3.0版本。
5)提供 16 KB 到 512 KB片内 Flash,采用 8 引脚到 100 引脚,提供了5种封装形式(SO/TSSOP、WLCSP、BGA、QFN、LQFP)。实现了万能架构 (one-architecture-fits-all) 的概念,以满足未来的市场需求。

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架构。

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

3. ARM是一款指令集

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

5.1 什么是指令集

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

指令指令的集合

指令在程序中的作用

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

5.2 指令的分类掌握)

RISCReduce)精简指令

精简指令集(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施密特触发器来进行整形。

2. 波形整形

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

3. 提高抗干扰能力

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

5. GPIO基本功能

5.1 输入功能

浮空输入

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

上下拉电阻都不接电路 通俗讲就是让管脚什么都不接,悬空着。

此时VDD和VSS所在路径的两个开关同时断开。因为没有上拉和下拉,所以当IO口没有接输入的时候,此时的电平状态会是一个不确定的值,完全由外部输入决定。

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

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

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

上拉输入

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

IO——上拉电阻——施密特触发器——输入数据寄存器——CPU读取

当没有信号输入时,IO口识别的都是高电平,当外部电路输入的信号不稳定时,上拉电阻就会将输入的信号拉高,此时引脚始终读到高电平信号。(首先以外部为主)

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

应用:在电平信号不稳定

下拉输入

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

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

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

模拟输入

IO——片上外设

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

应用:ADC

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

1. 时间连续性

模拟信号连续的

数字信号离散的

2. 传输方式

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

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

3. 保密性

数字信号保密性更强

模拟信号保密性更差

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.推挽输出与开漏输出区别

什么是线或逻辑与线与逻辑?

   在一个结点(线)上, 连接一个上拉电阻到电源 VCC 或 VDD 和 n 个 NPN 或 NMOS 晶体管的集电极 C 或漏极 D, 这些晶体管的发射极 E 或源极 S 都接到地线上, 只要有一个晶体管饱和, 这个结点(线)就被拉到地线电平上.
因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(NMOS), 晶体管就会饱和, 所以这些基极或栅极对这个结点(线)的关系是或非 NOR 逻辑. 如果这个结点后面加一个反相器, 就是或 OR 逻辑.

注:个人理解:线与,接上拉电阻至电源。(~A)&(~B)=~(A+B),由公式较容易理解线与此概念的由来 ;

如果用下拉电阻和 PNP 或 PMOS 管就可以构成与非 NAND 逻辑, 或用负逻辑关系转换与/或逻辑.

注:线或,接下拉电阻至地。(~A)+(~B)=~(AB);
这些晶体管常常是一些逻辑电路的集电极开路 OC 或源极开路 OD 输出端. 这种逻辑通常称为线与/线或逻辑, 当你看到一些芯片的 OC 或 OD 输出端连在一起, 而有一个上拉电阻时, 这就是线或/线与了, 但有时上拉电阻做在芯片的输入端内.
顺便提示如果不是 OC 或 OD 芯片的输出端是不可以连在一起的, 总线 BUS 上的双向输出端连在一起是有管理的, 同时只能有一个作输出, 而其他是高阻态只能输入.

6.GPIO的寄存器

寄存器地址

使能时钟的地址

7. 实验一

7.1 实验要求

点亮LED

7.2 实验分析

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

7.3 实验过程

1. 找丝印

2. 查看原理图

3. 寄存器配置

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)
	{
		
	}
}

CUBEMX实现简单)

代码实现

	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

     2. 原理图分析

工程配置

代码实现

发送字符串的函数

实验二(串口收发实验)

实验要求

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

代码实现

  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. 库函数实现

功能:发送一个数据

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

返回值:发送状态

功能:接受一个数据

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

参数:接收状态

库函数代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值