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。

 

posted @ 2016-08-02 20:29  toknowledge  阅读(690)  评论(0编辑  收藏  举报