嵌入式实习学习记录
AVR单片机
什么是单片机?
是单片微型计算机的简称,microcontroller,微控制器
AVR是哈佛结构,51单片机是冯诺依曼结构。
哈佛结构:程序指令存储器和数据存储器分开。使用独立的四条总线。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。 取指—>译码—>执行。 可以在前一条指令译码的时候,第二条取指;前一条执行的时候,第二条译码,第三条取指,以此类推。指令执行效率高。程序指令和数据的宽度可以不一样。
冯诺依曼结构:是一种将程序指令存储器和数据存储器合并在一起的存储器结构。取指令和取操作数都在同一总线上,通过分时复用的方式进行。缺点是在高速运行时,不能达到同时取指令和取操作数。程序指令和数据的宽度相同。
改进型哈佛结构:虽然也使用两个不同的存储器——程序存储器和数据存储器,但是将数据总线和地址总线进行了合并,也就是公用地址总线和公用数据总线,分时复用。
STM32单片机
上拉下拉电路

电容作用: 消除按键抖动
推挽输出和开漏输出的区别:
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个停止位

起始位:
UART数据传输线通常在不传输数据时保持在高电压电平。开始传输时发送UART在一个时钟周期内将传输线从高电平拉低到低电平,当接收UART检测到高电压到低电压转换时,它开始以波特率的频率读取数据帧中的位。
数据帧:
数据帧内包含正在传输的实际数据。如果使用奇偶校验位,则可以是5位,最多8位。如果不使用奇偶校验位,则数据帧的长度可以为9位。
校验位:
奇偶校验位是接收UART判断传输期间是否有任何数据更改的方式。接收UART读取数据帧后,它将对值为1的位数进行计数,并检查总数是偶数还是奇数,是否与数据相匹配。
停止位:
为了向数据包的结尾发出信号,发送UART将数据传输线从低电压驱动到高电压至少持续两位时间。
TTL串口
发送(TX,transmit),接收(RX,receive),两台设备的RX与TX分别相连,记得共地。是异步通信。
轮询模式:必须等待串口操作完成,只能接收特定长度的数据
可以通过串口中断来解决堵塞问题
同步:设备共享时钟信号
全双工通信:可以两边同时传输;
半双工通信:可以两边传输,但是不能同时(主到从,从到主)。
总线协议:支持多个设备进行通信
传输步骤
- 发送UART从数据总线并行接收数据
- 发送UART将起始位,奇偶校验位和停止位添加到数据帧
- 整个数据包从发送UART串行发送到接收UART。接收UART以预先配置的波特率对数据线进行采样
- 接收UART丢弃数据帧中的起始位,奇偶校验位和停止位
- 接收UART将串行数据转换回并行数据,并将其传输到接收端的数据总线
优缺点
优点:
- 仅使用两根电线
- 无需时钟信号
- 具有奇偶校验位以允许进行错误检查
- 只要双方都设置好数据包的结构
- 有据可查并得到广泛使用的方法
缺点:
- 数据帧的大小最大为9位
- 不支持多个从属系统或多个主系统
- 每个UART的波特率必须在彼此的10%之内
SPI协议
串行、同步、四根线:MISO主机输入从机输出、MOSI主机输出从机输入、SCLK时钟信号、SS/CS片选信号
时钟信号
每个时钟周期传输一位数据,因此数据传输的速度取决于时钟信号的频率。时钟信号由于是主机配置生成的,因此SPI通信始终由主机启动。
设备共享时钟信号的任何通信协议都称为同步。SPI是一种同步通信协议,还有一些异步通信不使用时钟信号。例如在UART通信中,双方都设置为预先配置的波特率,该波特率决定了数据传输的速度和时序。
片选信号
主机通过拉低从机的CS/SS来使能通信。 在空闲/非传输状态下,片选线保持高电平。在主机上可以存在多个CS/SS引脚,允许主机与多个不同的从机进行通讯。
MOSI和MISO
主机通过MOSI以串行方式将数据发送给从机,从机也可以通过MISO将数据发送给主机,两者可以同时进行。所以理论上,SPI是一种全双工的通讯协议。
传输步骤
- 主机输出时钟信号
- 主机拉低SS / CS引脚,激活从机
- 主机通过MOSI将数据发送给从机
- 如果需要响应,则从机通过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位:
地址帧:每个从属设备唯一的7位或10位序列,用于主从设备之间的地址识别。
ACK/NACK:消息中的每个帧后均带有一个ACK/NACK位。如果成功接收到地址帧或数据帧,接收设备会返回一个ACK位用于表示确认。
寻址
由于I2C没有像SPI那样的片选线,因此它需要使用另一种方式来确认某一个从设备,而这个方式就是 —— 寻址 。
主机将要通信的从机地址发送给每个从机,然后每个从机将其与自己的地址进行比较。如果地址匹配,它将向主机发送一个低电平ACK位。如果不匹配,则不执行任何操作,SDA线保持高电平。
读/写位
地址帧的末尾包含一个读/写位。如果主机要向从机发送数据,则为低电平。如果是主机向从机请求数据,则为高电平。
数据帧
当主机检测到从机的ACK位后,就可以发送第一个数据帧了。数据帧始终为8位,每个数据帧后紧跟一个ACK / NACK位,来验证接收状态。当发送完所有数据帧后,主机可以向从机发送停止条件来终止通信。
优缺点
优点
- 仅使用两根电线
- 支持多个主机和多个从机
- 每个UART的波特率必须在彼此的10%之内
- 硬件比UART更简单
- 众所周知且被广泛使用的协议
缺点
- 数据传输速率比SPI慢
- 数据帧的大小限制为8位
无源晶振:没有正负之分
有源晶振
30问
嵌入式系统的定义和基本特征是什么?



