计算机中存储的负数是其补码形式
负数的补码=反码+1
例如 -2 原码 1000 0010 反码 1111101 补码 1111 1110
GPIO
GPIO的八种模式
- 输入浮空:空闲时,IO状态不确定,由外部环境决定
- 输入上拉:空闲时,IO呈现高电平
- 输入下拉:空闲时,IO呈现低电平
- 模拟功能:专门用于模拟信号输入或输出,如:ADC和DAC
- 开漏输出:不能输出高电平,必须有外部(或内部)上拉才能输出高电平,软件IIC的SDA、SCL等
- 推挽输出:可输出高低电平,驱动能力强,驱动能力强,25mA(max)
- 开漏式复用功能:由其他外设控制输出,不能输出高电平,必须有外部(或内部)上拉才能输出高电平,片上外设功能(硬件IIC 的SDA、SCL引脚等)
- 推挽式复用功能:由其他外设控制输出,可输出高低电平,驱动能力强,片上外设功能(SPI 的SCK、MISO、MOSI引脚等)
通信协议
| 特点 | 传输速率 | 抗干扰能力 | 通信距离 | IO资源占用 | 成本 |
|---|---|---|---|---|---|
| 串行通信 | 较低 | 较强 | 较长 | 较少 | 较低 |
| 并行通信 | 较高 | 较弱 | 较短 | 较多 | 较高 |
同步通信:共用同一时钟信号
异步通信:没有时钟信号,通过在数据信号中加入起始位和停止位等一些同步信号
| 通信接口 | 接口引脚 | 数据同步方式 | 数据传输方向 |
|---|---|---|---|
| UART (通用异步收发器) | TXD:发送端 RXD:接收端 GND:公共地 | 异步通信 | 全双工 |
| 1-wire | DQ:发送/接收端 | 异步通信 | 半双工 |
| IIC | SCL:同步时钟 SDA:数据输入/输出端 | 同步通信 | 半双工 |
| SPI | SCK:同步时钟 MISO:主机输入,从机输出 MOSI:主机输出,从机输入 CS:片选信号 | 同步通信 | 全双工 |
| 功能说明 | SPI总线 | IIC总线 |
|---|---|---|
| 通信方式 | 同步 串行 全双工 | 同步 串行 半双工 |
| 总线接口 | MOSI、MISO、SCL、CS | SDA、SCL |
| 拓扑结构 | 一主多从/一主一从 | 多主从 |
| 从机选择 | 片选引脚选择 | SDA上设备地址片选 |
| 通信速率 | 一般50MHz以下 | 100kHz、400kHz、3.4MHz |
| 数据格式 | 8位/16位 | 8位 |
| 传输顺序 | MSB/LSB | MSB |
| 电平 | 逻辑1 | 逻辑0 |
|---|---|---|
| RS-232电平 | -15V ~ -3V | +3V ~ +15V |
| COMS电平(3.3V) | 3.3V | 0V |
| TTL电平(5V) | 5V | 0V |
| RS485 | +(2-6)V | -(2-6)V |
| 通信接口 | 通信方式 | 信号线 | 电平标准 | 拓扑结构 | 通信距离 | 通讯速率 | 抗干扰能力 |
|---|---|---|---|---|---|---|---|
| TTL | 全双工 | TX/RX/GND | 逻辑1 : 2.4-5 V 逻辑0 : 0-0.4V | 点对点 | 1米 | 100kbps | 弱 |
| RS232 | 全双工 | TX/RX/GND | 逻辑1 : -(15-3) V 逻辑0 : +(3-15) V | 点对点 | 100米 | 20kbps | 较弱 |
| RS485 | 半双工 | 差分线AB | 逻辑1 : +(2-6)V 逻辑0 : -(2-6)V | 多点双向 | 1200米 | 100kbps | 强 |
待补充 uart usart
IIC、SPI、RS232、RS485
I2C:IIC:Inter Integrated Circuit,集成电路总线,是一种同步 串行 半双工通信总线。
SDA(串行数据线)和SCL(串行时钟线)

SPI:SPI:串行外设设备接口(Serial Peripheral Interface),是一种高速的,全双工,同步的通信总线。
SCLK MISO MOSI NSS/CS
(1)MISO– Master Input Slave Output,主设备数据输入,从设备数据输出;
(2)MOSI– Master Output Slave Input,主设备数据输出,从设备数据输入;
(3)SCLK – Serial Clock,时钟信号,由主设备产生;
(4)CS – Chip Select,从设备使能信号,由主设备控制。 选择信号,由主机发出,SPI主机选择与哪一个SPI从机通信,一般是低电位有效。
RS485 半双工 也可是全双工(MAX1482)

RS485是串行通信标准,使用差分信号传输,抗干扰能力强,常用于工控领域。
RS485具有强大的组网功能,在串口基础协议之上还制定MODBUS协议。
串口基础协议:仅指封装了基本数据包格式的协议(基于数据位)
MODBUS协议:使用基本数据包组合成通讯帧格式的高层应用协议(基于数据包或字节)
发送端 AB间的电压差
逻辑1电平信号+2 ~ +6v
逻辑0电平信号-2 ~ -6v
接收端 AB间的电压差
逻辑1电平信号 大于 +200mv
逻辑0电平信号 小于 -200mv
定义逻辑1为B>A的状态
定义逻辑0为A>B的状态
Modbus
循环冗余校验
Modbus允许多个 (大约240个) 设备连接在同一个网络上进行通信,
大多数Modbus设备通信通过串口EIA-485物理层进行
Modbus通信时如果主设备发送功能码0x03,如果从设备执行正确则返回原功能码,如果错误,则功能码最高位1
广播模式请求报文的设备地址为0(0x00)。
DMA介绍
DMA,全称Direct Memory Access,即直接存储器访问。
DMA传输 将数据从一个地址空间复制到另一个地址空间。
DMA传输无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高
作用:为CPU减负
硬件和软件IIC对比
| IIC | 用法 | 速度 | 稳定性 | 管脚 |
|---|---|---|---|---|
| 硬件IIC | 比较复杂 | 快 | 较稳定 | 需使用特定管脚 |
| 软件IIC | 操作过程比较清晰 | 较慢 | 稳定 | 任意管脚,比较灵活 |
为什么IIC总线SDA建议用开漏模式?
IIC的SDA脚即要作为输出,又要作为输入,用开漏输出模式,很好实现输出输入共用,避免IO模式频繁切换带来的麻烦。
输出时:主机(MCU)输出0,可以拉低信号,来实现低电平发送,主机输出1(实际不起作用),由外部上拉电阻上拉,实现高电平发送。
输入时:主机(MCU)设置输出1状态,此时因为MCU无法输出1,相当于释放了SDA脚,此时外部器件可以主动拉低SDA脚/释放SDA脚(同样由上拉电阻提供“输出1的功能”),实现SDA脚的高低电平变化。
由于开漏输出模式下,MCU还是可以读取IDR状态寄存器,来获取引脚高低电平,因此MCU读取IDR,即可获得SDA脚的高低电平状态,从而实现输入检测。
梳理:串口、 UART、TTL、RS232、RS422、RS485关系
串口是一个泛称,UART、RS232、RS422和RS485都遵循类似的通信时序协议,被通称为串口。

UART是STM32的UART外设,由此产生串口时序,产生的电平为CMOS电平。
TTL、RS232、RS422、RS485是串行通信接口标准。简单来说,就是逻辑1和0的表示不同。
| 通信接口 | 通信方式 | 信号线 | 电平标准 | 拓扑结构 | 通信距离 | 通讯速率 | 抗干扰能力 |
|---|---|---|---|---|---|---|---|
| TTL | 全双工 | TX/RX/GND | 逻辑1 : 2.45 V 逻辑0 : 00.4V | 点对点 | 1米 | 100kbps | 弱 |
| RS232 | 全双工 | TX/RX/GND | 逻辑1 : -(153) V 逻辑0 : +(315) V | 点对点 | 100米 | 20kbps | 较弱 |
| RS485 | 半双工 | 差分线AB | 逻辑1 : +(26)V 逻辑0 : -(26)V | 多点双向 | 1200米 | 100kbps | 强 |