在stm32串口中,两个模块互相传输数据,串口,SPI,I2C, CAN,那个能力最强?

它是由数据线 SDA 和 SCL 构成的串行总线 可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送高速 IIC 总线一般可达 400kbps 以上。用I2C通信的最常用的就是EEPROM芯片如Atmel的AT24CXX系列,此外还囿一些其它功能的芯片。

I2C 总线在传送数据过程中共有三种类型信号 它们分别是:开始信号、结束信号和应答信号。

开始信号:SCL 为高电平時SDA 由高电平向低电平跳变,开始传送数据

结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变结束传送数据。

应答信号: 接收数据的 IC 在接收到 8bit 数据后 向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断若未收到应答信号,由判断为受控单元出现故障

SPI通信过程为:把CS引脚拉低,然后SCK输出时钟然后就可以在MOSI引脚上输出数据,同时可以在MISO上获得数据了

下面主要总结一下2种总线的异同点:

2 iic总线是多主机总线,通过SDA上的地址信息来锁定从设备spi总线只有一个主设备,主设备通过CS片选来确定从设备

5 iic总线scl高电平时sda下降沿标志传输开始上升沿标志傳输结束。spi总线cs拉低标志传输开始cs拉高标志传输结束

6 iic总线是SCL高电平采样。spi总线因为是全双工因此是沿采样,具体要根据CPHA决定一般情況下master device是SCK的上升沿发送,下降沿采集

7 iic总线和spi总线数据传输都是MSB在前LSB在后(串口是LSB在前)

8 iic总线和spi总线时钟都是由主设备产生,并且只在数据傳输时发出时钟

9 iic总线读写时序比较固定统一设备驱动编写方便。spi总线不同从设备读写时序差别比较大因此必须根据具体的设备datasheet来实现讀写,相对复杂一些

如果您觉得对您有帮助请关注我的公众号“老赵a科技”我们一起学习

I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用於连接微控制器及其外围设备 它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总線一般可达400kbps以上 IIC是半双工通信方式。

I2C 总线在传送数据过程中共有三种类型信号 它们分别是:开始信号、结束信号和应答信号。
开始信號: SCL 为高电平时 SDA 由高电平向低电平跳变,开始传送数据
结束信号: SCL 为高电平时, SDA 由低电平向高电平跳变结束传送数据。
应答信号:接收数据的 IC 在接收到 8bit 数据后向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据 CPU 向受控单元发出一个信号后,等待受控单元发出一個应答信号 CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断若未收到应答信号,由判断为受控单元出现故障

多主机I2C總线系统结构

这些信号中,起始信号是必需的结束信号和应答信号,都可以不要 IIC 总线时序图如

I2C总线总线的SDA和SCL两条信号线同时处于高电岼时,规定为总线的空闲状态此时各个器件的输出级场效应管均处在截止状态,即释放总线由两条信号线各自的上拉电阻把电平拉高。  

2)起始信号与停止信号

起始信号:当SCL为高期间SDA由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号 停止信号:当SCL为高期间,SDA由低到高的跳变;停止信号也是一种电平跳变时序信号而不是一个电平信号。

发送器每发送一个字节就在时钟脉冲9期間释放数据线,由接收器反馈一个应答信号 应答信号为低电平时,规定为有效应答位(ACK简称应答位)表示接收器已经成功地接收了该芓节;应答信号为高电平时,规定为非应答位(NACK)一般表示接收器接收该字节没有成功。 对于反馈有效应答位ACK的要求是接收器在第9个時钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平 如果接收器是主控器,则在它收到最后一个字节後发送一个NACK信号,以通知被控发送器结束数据发送并释放SDA线,以便主控接收器发送一个停止信号P

I2C总线进行数据传送时,时钟信号为高电平期间数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间数据线上的高电平或低电平状态才允许变化。 即:数據在SCL的上升沿到来之前就需准备好并在在下降沿到来之前必须稳定。

在I2C总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制)即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据数据位的传输是边沿触发。 

stm32串口F4 开发板板载的 EEPROM 芯片型号为 24C02该芯片的总容量是 256 个字节,该芯片通过 IIC 总线与外部连接我们本章就通过 stm32串口F4 来实现 24C02 的读写。目前大部分 MCU 都带有 IIC 总线接口stm32串口F4 也不例外。但是这里我們不使用 stm32串口F4的硬件 IIC 来读写 24C02而是通过软件模拟。 ST 为了规避飞利浦 IIC 专利问题将 stm32串口的硬件 IIC 设计的比较复杂,而且稳定性不怎么好所以這里我们不推荐使用。 有兴趣的读者可以研究一下 stm32串口F4 的硬件 IIC
       用软件模拟 IIC,最大的好处就是方便移植同一个代码兼容所有 MCU,任何一个單片机只要有 IO 口就可以很快的移植过去,而且不需要特定的 IO 口而硬件 IIC,则换一款 MCU基本上就得重新搞一次,移植是比较麻烦的

我们昰通过 GPIO来模拟 IIC。我们新增了 myiic.c文件用来存放 iic底层驱动新增了 24cxx.c文件用来存放 24C02 的底层驱动。

我要回帖

更多关于 stm32串口 的文章

 

随机推荐