IIC总线协议
一、定义
半双方、同步、串行传输
通过电平触发(写)采样(读)
主从架构
主设备 (Master) : 控制通信过程,生成时钟信号
SCL(时钟线)在整个通信过程中始终由主机控制输出
从设备 (Slave) : 被动响应主设备的命令
支持多主多从
同一总线上可以连接多个主设备和从设备(同一时刻只能有一个主机和从机进行通信), 但需要进行冲突检测和仲裁
从机地址唯一性
每个从设备都有唯一的 7 位或 1 0 位从机地址 , 主设备通过从机地址指定要通信的从设备
时钟来源于APB1
二、引脚内部结构
2.1 上拉电阻
I 2C 芯片的 SCL 和 SDA 引脚是开漏输出 的所以需要接一个上拉电阻来输出高电平

由于输出的时候总是电平相反的,所以需要输出控制,输出相反的电平;这负负得正
2.2 开漏输出
为了实现可以支持多主多从, 以及多主仲裁
只有 主机让MOS管截至的时候上拉电阻才能拉成高电平 ;不然3.3V的上拉电阻还不够把地拉成高电平
实现线与
所有从机的接收的时候的都是MOS导通输出低电平;
任何一个设备输出低电平 → 总线为低电平;所有设备都输出高阻 → 总线为高电平(上拉电阻拉高);不会发生短路冲突
仲裁等待
当主设备一号在进行数据传输的时候会把电平拉低,当主设备二号想数据传输的时候读取到了低电平就会进行仲裁等待
IIC芯片的引脚上都有一个寄生电容,没接入一个设备就会导致等效电容增大
三、IIC协议
3.1 协议规则
只能由主机产生
起始信号:SCL线高电平的时候SDA线产生下降沿
终止信号:SCL高电平的时候SDA线产生上升沿
主机和从机都能产生
应答信号:时钟线SCL高电平期间,SDA低电平
非应答信号:SCL高电平期间,SDA高电平

总线共闲:SCL和SDA一直为高电平
数据有效:在时钟线高电平期间只能读数据(数据线电平不能变) ;低电平期间可以写入数据(数据线电平才能变)
IIC线以字节为单位进行传输;顺序为高位开始传输
由主机发:从机地址为7位(移位表明加了读写位)(一般,用一位表明方向)或者10位
3.2 主机读数据
从机内部无寄存器或地址
① 仅读取一个字节的数据

S:开始信号,ACK:应答;NACK:非应答;P:结束
② 连续读取多个字节的数据

从机内部有寄存器或地址区分
① 仅读取一个字节的数据

W表示要去传感器里面寻址;
主机先发从机的地址;然后发内部寄存器的地址;地址确定好了后,开始第二次通信读
② 连续读取多个字节的数据

3.3 主机写数据
由于I2C从机都需要通过寄存器来存储和区分不同类型的数据,所以没有寄存器的从机非常罕见。
从机内部有寄存器或地址区分
① 仅写入一个字节的数据

② 连续写入多个字节的数据

四、传感器手册
CRC校验

从机地址

通信方式

温湿度计算

// 温度计算(摄氏度)
温度(°C) = -45 + 175 × (温度原始值 / 65535)
// 湿度计算(%RH)
湿度(%RH) = -6 + 125 × (湿度原始值 / 65535)
// 华氏度(可选)
温度(°F) = -49 + 315 × (温度原始值 / 65535)
示例代码

采集时间:高精度测量最多需要 8.3 毫秒。

数据传输类型

采集模式命令

五、实现现象

SPI协议
一、定义
SPI 是一个同步的数据总线,也就是说它是用单独的数据线和一个单独的时钟信号 来保证发送端和接收端的完美同步。
边沿触发
总线接口 ( 引脚 ) SCK 、 MOSI 、 MISO 、 CS
CS信号线进行从机的选择
遵循一主多从或者一主一从的结构
数据帧长度 8bit 或 1 6bit
数据传输的格式 MSB 或 LSB
MSB表示先发送最高位;LSB表示发送最低位
工作过程
通信总是由主机发起;主机通过MOSI引脚给从机发数据;从机同时通过MISO引脚给主机发送数据;由同一个时钟进行的同步全双工(也可以半双工和单工)
二、通信协议
SPI控制器挂在APB2总线上的
通信过程
-
主机先将 NSS 信号拉低,这样保证开始接收数据;
-
当 接收端检测到时钟的边沿信号时 ,它将立即读取 数据线上的信号,这样就得到了一位数据(1 bit);
由于时钟是随数据一起发送的,因此指定 数据的传输速度并不重要,尽管设备将具有可以运行的最高速度。
-
主机发送到从机 :主机产生相应的时钟信号,然后数据 一位一位 地从 MOSI 信号线上进行发送到从机;
-
主机接收从机数据 :如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号 ,并且从机会将数据通过 MISO 信号线发送;

时钟极性
除了配置串行时钟速率(频率)外,SPI主设备还需要配置 时钟极性。
时钟极性通常写为 CKP 或 CPOL。
时钟极性和相位共同决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据;
-
CKP = 0:时钟空闲 IDLE 为低电平 0;
-
CKP = 1:时钟空闲 IDLE 为高电平 1;
时钟相位
除配置串行时钟速率和极性外,SPI主设备还应配置时钟相位(或边沿)。
时钟相位通常写为 CKE 或 CPHA;
时钟相位/边沿,也就是采集数据时是在时钟信号的具体相位或者边沿:
-
CKE = 0 :在时钟信号 SCK 的第一个跳变沿采样;
-
CKE = 1 :在时钟信号 SCK 的第二个跳变沿采样;

三、硬件实现
在单片机上选PA4到7

引脚配置

STM32 手册规定 SPI 最大速率是 18 MHz
四、实现结果

采集到的数据为0x5a(01011010)

ADC
一、核心功能
将连续变化的模拟信号 (如电压、电流)转化为离散的数字信号,以便微处理器(MCU/CPU)进行处理、存储和分析。
二、关键参数
(1)分辨率:细节捕捉的能力
定义:ADC 能区分的最小模拟信号变化,以二进制位数(bit)表示。
公式:最小可分辨电压 = 满量程电压 / (2ⁿ - 1)(n 为分辨率位数)。
示例:3.3V 满量程、12 位 ADC 的最小分辨率为 3.3V/4095≈0.806mV
常见规格:8 位(低精度)、12 位(主流)、16 位(高精度
(2)转换速率:采样的速度极限
定义:单位时间内完成的转换次数,单位为 SPS(每秒采样次数)。
应用场景:高速场景(如通信、视频)需选择高转换速率的 ADC,低速场景(如温度监测)则可优先考虑低功耗型号。
(3)信噪比(SNR):信号纯净度的衡量
定义:输出信号与噪声的比例,反映ADC在转换过程中引入的噪声大小。
关键理解:SNR越高,说明信号相对于噪声越强,转换结果越纯净。
影响因素:量化噪声、热噪声、时钟抖动等。
(4)总谐波失真(THD):信号保真度的标尺
定义:描述输出信号中,除去基频(原始信号)之外,其他谐波成分的相对强度。
(5)线性度:转换线性
定义:输入信号与输出数字码之间是否呈线性关系。
三、工作流程
-
采样:通过采样保持电路捕获模拟信号的瞬时值。
-
量化:将采样值映射到离散的数字等级(如 12 位 ADC 的 4096 个等级)。
-
编码:将量化后的等级转换为二进制代码(如 0x01FF 表示 511)。
看门狗
看门狗(WDT)是一个定时器 ,开启看门狗定时器之后(比如定时100ms),在单片机程序中每隔一段时间 (小于100ms)就要**"喂狗"一次** ,即将看门狗定时器清零。这样做的用处是,一旦单片机程序跑飞,没有在定时的时间之内去喂狗,那么定时达到200ms时,看门狗自动将单片机复位。
作用:检测内核有没有死机

内部结构

网络
摩尔信使(电脑) ---(WiFi)---> ESP8266 ---(串口)---> STM32 ---> LED/开关/温湿度
-
ESP8266 在这里不做任何协议解析,只是把串口1收到的数据原封不动从串口2发出去
-
电脑(摩尔信使)是 MODBUS 主站,单片机是从站
-
ESP8266 就是一根"智能串口线"
ESP8266像一个小网站,摩尔信使是浏览器。浏览器主动访问网站,网站返回数据。
STA模式即设备作为客户端连接至WiFi热点(AP),用于终端设备上网。
AP模式即设备作为无线接入点(热点),创建一个新的WiFi网络供其他设备连接。
| 指令 | 作用 | 返回值(示例/说明) |
|---|---|---|
AT |
测试ESP8266是否存活 | OK |
AT+CWMODE=1 |
设为Station模式 | OK |
AT+CWJAP="WiFi名","密码" |
连接WiFi | OK 或 WIFI CONNECTED WIFI GOT IP |
AT+CIFSR |
查询本机IP地址 | +CIFSR:STAIP,"192.168.1.100" +CIFSR:STAMAC,"xx:xx:xx:xx:xx:xx" OK |
AT+CIPMUX=0 |
设为单连接模式 | OK |
AT+CIPSTART="TCP","电脑IP",端口 |
建立TCP连接到指定服务器 | CONNECT OK |
AT+CIPMODE=1 |
开启透传模式 | OK |
AT+CIPSEND |
开始透传(进入数据发送状态) | > (提示符) 之后输入内容即直接发送 |