STM32学习(I2C SPI)
I2C
物理层
SCL SDA 支持多个主机和从机,每个设备都有一个地址,通信的起始和结束只能由主机控制,多个主机同时使用总线经仲裁决定哪个主机有总线控制权。I2C设备空闲时输出高阻态,由上拉电阻4.7K把总线拉至高电平,标准模式100kbit/s快速模式400kbit/s,最高3.4mbit/s但一般不支持。
协议层
基本读写过程: | S | SLAVE ADDR | R/W | A | DATA | A | DATA | A/~A | P |
S起始信号,由主机发起;发送从机地址一般用7位地址,和读写命令放在一起,结合成为一个字节8位一块发送;A是应答信号,接收端收到信号给个回应,0;而后发送数据或从机内部地址和R/W;应答;数据;应答/非应答;p结束信号
起始信号是SCL高电平时,主机拉低SDA,下降沿;结束信号是SCL高电平时,SDA上升沿。
数据有效性:SCL高电平时SDA有效,采样一位数据;SCL低电平时SDA切换为下一位数据收发做准备。
STM32的I2C外设构架 只支持标准模式和快速模式
时钟控制寄存器CCR、数据寄存器、自身地址寄存器、PEC、逻辑控制:控制寄存器CR1/2和状态寄存器SR1/2
SPI 常用于ADC/LCD等设备,速度快
物理层
SCK 同步信号
MISO MASTER INPUT SLAVE OUTPUT
MOSI MASTER OUTPUT SLAVE INPUT
CS/SS/NSS 使能,片选信号
SCK/MISO/MOSI是总线,CS信号线每一个从机对应主机上一个IO口选到谁就拉低谁
协议层
起始信号SS信号线拉低,上升下降沿触发/采样可以通过CPOL/CPHA配置,CPOL--0--空闲时SCK低电平 CPHA--0--奇数边沿采样,常用00或11配置
stm32的SPI外设构架
有多个SPI,且不挂载在同一个apb时钟上所以支持的速度不一样。
时钟控制寄存器可配置具体速度,读写数据通过数据寄存器,可配置数据帧长度8位或16位。
收发过程:
1.控制ss产生起始信号
2.把要发送的数据写入数据寄存器DR中,该数据会被存储到发送缓冲区
3.SCK开始运行,MOSI按位发送,MISO按位接收
4.发送或接收完成一帧数据后TXE/RXNE置位
5.TXE置位后可继续发送一帧数据,直接往读数据寄存器DR里写就行了;RXNE置位后可以直接读数据寄存器DR。