STM32 IIC的学习

IIC
1. IIC的定义及作用?与SPI,USART有何不同?
STM32上有很多的通讯接口,主要用来连接MCU与IC(如下面将要介绍的EEPROM–AT24C02C),及IC与IC之间的通讯。因为对通讯的速度及功能要求不同,主要分为IIC,SPI,USART.
1).IIC (Inter-Integrated Circuit 意为IC之间总线):两线式串行总线,是由数据SDA线和时钟SCL线构成的串行总线,可发送和接收数据。IIC是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。 总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。非常适合在器件之间进行近距离、非经常性的数据通信。IIC不可以实现全双工(即异步)。
标准模式 高达 100kHz
快速模式 高达 400kHz
超快速模式 高达 1 MHz
2).SPI(Serial Peripheral Interface:串行外设接口) :主从设备间既可以实现同步通讯也可以异步通讯,SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI),当有多个从设备时,还可以增加一条从设备(SS)选择线。SPI总线可以实现 多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。
速度高达18M bit/s
如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO)或者一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。数据(输入或者输出)在时钟上沿或下沿时改变,在紧接着的下沿或上沿被读取。这样至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。SCL信号线是由主设备控制,从设备不能控制SCL信号线,所以至少有一个主控设备。这样传输的特点:与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。
SPI 通讯接口有:SS( Slave Select),SCK( Serial Clock),MOSI (Master Output, Slave Input),MISO (Master Input, Slave Output)。
3).USART(Universal Asynchronous Receiver Transmitter:通用异步收发器):是用于控制计算机与串行设备的芯片, USART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多。硬件上有两根线,一根用于发送,一根用于接收。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。目前市场上有USB转USART(如CP21xx ),也有USB转RS-232C设备(如PL230x)。其中USART 是TTL 电平3.3v,RS-232C是232电平5v.
显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。
不同之处大概就是上面所示,SPI和UART可以实现全双工,但I2C不行。IIC为两条线(时钟线SCL 和数据线SDA),SPI 为至少3条线,可同步接收和发送,不过只有一条时钟线,如果SPI设备多的话,就还可加入CS片选线选择从机设备。USART

  1. 硬件IIC和模拟IIC的区别?

    硬件IIC指的是MCU上面专有的IIC接口(SDA数据线和SCL时钟线)及在APB1上有IIC的指令寄存器,可以直接配置IIC指令寄存器及连接SDA线及SCL线至需要进行通讯的设备(IC或者EEPROM)进行读写通讯。(在STM32的数据手册上面写的需要配置的就是硬件IIC)
    如下图所示:
    IIIC硬件配置
    模拟IIC与上面的硬件IIC有所不同,指通过通用的GPIO口进行配置与相应的IIC设备(如EEPROM—AT24C02)进行通讯,需要配置两个通用IO口,一个作为SDA线,一个作为SCL线与IC进行通讯,如同下面所示:
    模拟IIC配置连接
    上面图片是模拟IIC使用GPIO口进行配置,在进行IIC的配置前,首先要配置GPIO口。

  2. 模拟IIC的配置&时序图& 协议

    首先要配置GPIO口,现在以电路图的连接为主,PF6设置为SCL & PG7设置为SDA,则 首先需要使能GPIOF,PF6/SCL因为是时钟线,所以只要配置成输出就好了。
    PF7因为是数据GPIO口,数据可以从MCU发送到IC(AT24C02),也可以接收IC(AT24C02)发送的数据。所以需要发送和接收数据,把PF7/SDA设置为输入输出口。
    1)IIC总线协议的时序图:
    IIC总线协议时序图
    1)).看上面的时序图,每个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一个应答位(即一帧共9位)。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断,若未收到应答信号,则判断为受控单元故障。
    2)).IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
    3)).主控器向被控器发送的信息种类有:空闲状态,初始信号,结束信号,7位地址码,读/写控制位,10位地址码,数据字节,应答信号,脉冲时钟。
    被控器向主控器发送的信息种类有:应答信号,数据字节,时钟低电平。
    4)).空闲状态: 时钟线SCL与数据线SDA均为高电平信号。
    初始信号:在空闲状态时,SCL与SDA均为高电平的状态下,SDA数据线由高电平变为低电平。
    结束信号:在SDA数据线和SCL均为低电平的状态下,SDA数据线由低电平变为高电平。
    读写控制位:IIC总线进行数据

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值