AVR单片机

什么是单片机?
是单片微型计算机的简称,microcontroller,微控制器

AVR是哈佛结构,51单片机是冯诺依曼结构。

哈佛结构:程序指令存储器和数据存储器分开。使用独立的四条总线。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。 取指—>译码—>执行。 可以在前一条指令译码的时候,第二条取指;前一条执行的时候,第二条译码,第三条取指,以此类推。指令执行效率高。程序指令和数据的宽度可以不一样。

冯诺依曼结构:是一种将程序指令存储器和数据存储器合并在一起的存储器结构。取指令和取操作数都在同一总线上,通过分时复用的方式进行。缺点是在高速运行时,不能达到同时取指令和取操作数。程序指令和数据的宽度相同。

改进型哈佛结构:虽然也使用两个不同的存储器——程序存储器和数据存储器,但是将数据总线和地址总线进行了合并,也就是公用地址总线和公用数据总线,分时复用。

STM32单片机

上拉下拉电路

image-20250424000515541
电容作用: 消除按键抖动

推挽输出和开漏输出的区别:
image-20250424001709624

GPIO四种输入四种输出:

输出——推挽输出、开漏输出、复用推挽输出、复用开漏输出

输入——上拉输入、 下拉输入、浮空输入、模拟输入

寄存器是程序和电路的桥梁:可以通过更改程序来改变寄存器对应电路状态,也可以通过寄存器数据读取当前电路状态。HAL库函数实际上就是控制寄存器。

输出驱动器:输出控制、PMOS、NMOS。开漏输出时,PMOS一直断开,GND换成外部电压。复用来自于片上外设

常用外设(GPIO, UART, SPI, I2C, ADC, Timer)

中断

外部中断(EXTI external interrupt):检测GPIO口电平变化。

NVIC:嵌套向量中断控制器。

EXTI0——EXTI4分别对应五个处理函数,EXTI5-EXTI9对应处理函数EXTI9_5,EXTI10-EXTI15对应处理函数EXTI15_10。

中断优先级:如果几乎同时发生,则先比较抢占优先级,再比较响应优先级;如果某中断执行中,另一中断突然发生,则只比较抢占优先级。

输入驱动——边沿检测电路——请求挂起寄存器置1——进入NVIC——找到对应中断向量——执行对应中断处理函数,同时清除请求挂起寄存器(置0)

串口通信(UART)

全双工、串行、异步、两根线:RX、TX

数据包含有1个起始位,5至9个数据位(取决于UART),一个可选的奇偶校验位以及1个或2个停止位

img

起始位:

UART数据传输线通常在不传输数据时保持在高电压电平。开始传输时发送UART在一个时钟周期内将传输线从高电平拉低到低电平,当接收UART检测到高电压到低电压转换时,它开始以波特率的频率读取数据帧中的位。

数据帧:

数据帧内包含正在传输的实际数据。如果使用奇偶校验位,则可以是5位,最多8位。如果不使用奇偶校验位,则数据帧的长度可以为9位。

校验位:

奇偶校验位是接收UART判断传输期间是否有任何数据更改的方式。接收UART读取数据帧后,它将对值为1的位数进行计数,并检查总数是偶数还是奇数,是否与数据相匹配。

停止位:

为了向数据包的结尾发出信号,发送UART将数据传输线从低电压驱动到高电压至少持续两位时间。

TTL串口

发送(TX,transmit),接收(RX,receive),两台设备的RX与TX分别相连,记得共地。是异步通信。

轮询模式:必须等待串口操作完成,只能接收特定长度的数据

可以通过串口中断来解决堵塞问题

同步:设备共享时钟信号

全双工通信:可以两边同时传输;

半双工通信:可以两边传输,但是不能同时(主到从,从到主)。

总线协议:支持多个设备进行通信

传输步骤

  1. 发送UART从数据总线并行接收数据
  2. 发送UART将起始位,奇偶校验位和停止位添加到数据帧
  3. 整个数据包从发送UART串行发送到接收UART。接收UART以预先配置的波特率对数据线进行采样
  4. 接收UART丢弃数据帧中的起始位,奇偶校验位和停止位
  5. 接收UART将串行数据转换回并行数据,并将其传输到接收端的数据总线

优缺点

优点:

  • 仅使用两根电线
  • 无需时钟信号
  • 具有奇偶校验位以允许进行错误检查
  • 只要双方都设置好数据包的结构
  • 有据可查并得到广泛使用的方法

缺点:

  • 数据帧的大小最大为9位
  • 不支持多个从属系统或多个主系统
  • 每个UART的波特率必须在彼此的10%之内

SPI协议

串行、同步、四根线:MISO主机输入从机输出、MOSI主机输出从机输入、SCLK时钟信号、SS/CS片选信号

时钟信号

每个时钟周期传输一位数据,因此数据传输的速度取决于时钟信号的频率。时钟信号由于是主机配置生成的,因此SPI通信始终由主机启动。

设备共享时钟信号的任何通信协议都称为同步。SPI是一种同步通信协议,还有一些异步通信不使用时钟信号。例如在UART通信中,双方都设置为预先配置的波特率,该波特率决定了数据传输的速度和时序。

片选信号

主机通过拉低从机的CS/SS来使能通信。 在空闲/非传输状态下,片选线保持高电平。在主机上可以存在多个CS/SS引脚,允许主机与多个不同的从机进行通讯。

MOSI和MISO

主机通过MOSI以串行方式将数据发送给从机,从机也可以通过MISO将数据发送给主机,两者可以同时进行。所以理论上,SPI是一种全双工的通讯协议。

传输步骤

  1. 主机输出时钟信号
  2. 主机拉低SS / CS引脚,激活从机
  3. 主机通过MOSI将数据发送给从机
  4. 如果需要响应,则从机通过MISO将数据返回给主机

优缺点

  • 优点:SPI通讯无起始位和停止位,因此数据可以连续流传输而不会中断;没有像I2C这样的复杂的从站寻址系统,数据传输速率比I2C更高(几乎快两倍)。独立的MISO和MOSI线路,可以同时发送和接收数据。
  • 缺点:SPI使用四根线(I2C和UART使用两根线),没有信号接收成功的确认(I2C拥有此功能),没有任何形式的错误检查(如UART中的奇偶校验位等)。

I2C总线

同步、串行、两根线:SDA数据线、SCL时钟线

与SPI一样,I2C也需要时钟同步信号且时钟始终由主机控制。

启动条件:当SCL是高电平时,SDA从高电平向低电平切换。

停止条件:当SCL是高电平时,SDA由低电平向高电平切换。

I2C的数据传输是以多个msg的形式进行,每个msg都包含从机的二进制地址帧,以及一个或多个数据帧,还包括开始条件和停止条件,读/写位和数据帧之间的ACK / NACK位:img

地址帧:每个从属设备唯一的7位或10位序列,用于主从设备之间的地址识别。

ACK/NACK:消息中的每个帧后均带有一个ACK/NACK位。如果成功接收到地址帧或数据帧,接收设备会返回一个ACK位用于表示确认。

寻址

由于I2C没有像SPI那样的片选线,因此它需要使用另一种方式来确认某一个从设备,而这个方式就是 —— 寻址 。

主机将要通信的从机地址发送给每个从机,然后每个从机将其与自己的地址进行比较。如果地址匹配,它将向主机发送一个低电平ACK位。如果不匹配,则不执行任何操作,SDA线保持高电平。

读/写位

地址帧的末尾包含一个读/写位。如果主机要向从机发送数据,则为低电平。如果是主机向从机请求数据,则为高电平。

数据帧

当主机检测到从机的ACK位后,就可以发送第一个数据帧了。数据帧始终为8位,每个数据帧后紧跟一个ACK / NACK位,来验证接收状态。当发送完所有数据帧后,主机可以向从机发送停止条件来终止通信。

优缺点

优点

  • 仅使用两根电线
  • 支持多个主机和多个从机
  • 每个UART的波特率必须在彼此的10%之内
  • 硬件比UART更简单
  • 众所周知且被广泛使用的协议

缺点

  • 数据传输速率比SPI慢
  • 数据帧的大小限制为8位

无源晶振:没有正负之分
有源晶振

30问

嵌入式系统的定义和基本特征是什么?