STM32 I2C总线通信与SPI总线通信专题讲解_第1页
STM32 I2C总线通信与SPI总线通信专题讲解_第2页
STM32 I2C总线通信与SPI总线通信专题讲解_第3页
STM32 I2C总线通信与SPI总线通信专题讲解_第4页
STM32 I2C总线通信与SPI总线通信专题讲解_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页STM32I2C总线通信与SPI总线通信专题讲解

总线介绍:(I2C)(In(te)r-IntegratedCircuit)总线(也称I(IC)或I2C)是由PHILIPS公司开发的两线式串行总线(单双工),用于连接微(控制器)及其外围设备,在这两根线上可以挂很多设备,同一时刻只能有一个节点处于主机模式,其他节点处于从机模式,总线上数据的传送都由主机发起。I2C总线没有片选(信号)线,所以需要通过协议来找到对应操作的(芯片)。是微(电子)(通信)控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有(接口)线少,控制方式简单,期间封装形式少,通信速率高等优点。总线特征:1.两条总线线路:一条串行数据(SD)A,一条串行(时钟)线SCL(主从设备使用同一时钟,属于同步通信)来完成数据的传输及外围器件的扩展

2.I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址,通常是7位,有时候是10位

3.I2C总线数据传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。在开发配置的时候,最好检查从设备的传输速率从而对主设备(一般是(MCU))进行相应的配置。一般通过I2C总线接口可(编程)时钟来实现传输速率的调整,同时也跟所接的上拉(电阻)的阻值有关。

4.I2C总线上的主设备与从设备之间以字节(8位)为单位进行单双工的数据传输。

拓扑结构——总线型I2C总线在物理连接上分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成,SCL由主机发出,SCL越快,通讯速率越快。通信原理是通过对SCL和SDA线高低电平时序的控制来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。

//w25x16.c#include"w25x16.h"externSPI_HandleTypeDefhspi1;/*读写一个字节函数,因为SPI读和写同时完成*//*发送数据一定会接收到一个数据*/uint8_tsFLASH_SendByte(uint8_tbyte){uint8_tTX_DATA=byte;uint8_tRX_DATA=0;HAL_SPI_TransmitReceive(returnRX_DATA;}/*等待擦除或者写数据完成*/voidsFLASH_W(ai)(tF)orEnd(void){uint8_tsr_value=0;sFLASH_CS_LOW();sFLASH_SendByte(sFLASH_CMD_RDSR);//读S0的值,为1表示忙碌,为0表示停止do{//发一个空字节,得到S0的值sr_value=sFLASH_SendByte(sFLASH_DUMMY_BYTE);}while(sr_valuesFLASH_CS_HIGH();}voidsFLASH_WriteEnable(void){sFLASH_CS_LOW();sFLASH_SendByte(sFLASH_CMD_WREN);sFLASH_CS_HIGH();}/*读设备ID*/uint16_tsFLASH_ReadID(void){uint16_tFLASH_ID;uint8_ttemp0,temp1;sFLASH_CS_LOW();sFLASH_SendByte(W25X_ManufactDeviceID);//读设备指令后要发24位地址,所以要发三次sFLASH_SendByte(sFLASH_DUMMY_BYTE);sFLASH_SendByte(sFLASH_DUMMY_BYTE);sFLASH_SendByte(sFLASH_DUMMY_BYTE);//制造商IDtemp0=sFLASH_SendByte(sFLASH_DUMMY_BYTE);//设备商IDtemp1=sFLASH_SendByte(sFLASH_DUMMY_BYTE);sFLASH_CS_HIGH();FLASH_ID=(temp0

>16)sFLASH_SendByte((SectorAddr>

>8)//传送中8位sFLASH_SendByte((SectorAddr>

>0)//传送低8位sFLASH_CS_HIGH();/*读状态寄存器,等待擦除完成*/sFLASH_WaitForEnd();}//读数据//读命令和读地址发送后,芯片内部会自动不断递增读数据voidsFLASH_ReadBuffer(uint8_t*pBuffer,uint32_tReadAddr,uint32_tNumByteToRead){sFLASH_CS_LOW();sFLASH_SendByte(sFLASH_CMD_READ);sFLASH_SendByte((ReadAddr>

>16)//传送高8位sFLASH_SendByte((ReadAddr>

>8)//传送中8位sFLASH_SendByte((ReadAddr>

>0)//传送低8位while(NumByteToRead--){*pBuffer=sFLASH_SendByte(sFLASH_DUMMY_BYTE);pBuffer++;}sFLASH_CS_HIGH();}//写一页最多只能写256个字节,一个扇区16页,一个块16个扇区voidsFLASH_WritePage(uint8_t*pBuffer,uint32_tWriteAddr,uint32_tNumByteToWrite){if(NumByteToWrite>sFLASH_SPI_PAGESIZE){NumByteToWrite=sFLASH_SPI_PAGESIZE;printf("写数据量过大,超过一页大小n");}sFLASH_WriteEnable();//开启写使能sFLASH_CS_LOW();sFLASH_SendByte(sFLASH_CMD_WRITE);sFLASH_SendByte((WriteAddr>

>16)//传送高8位sFLASH_SendByte((WriteAddr>

>8)//传送中8位sFLASH_SendByte((WriteAddr>

>0)//传送低8位while(NumByteToWrite--){sFLASH_SendByte(*pBuffer);pBuffer++;}sFLASH_CS_HIGH();/*擦除和写数据都涉及到写动作,一定要等待完成*/sFLASH_WaitForEnd();}//写任意地址、任意长度voidsFLASH_WriteBuffer(uint8_t*pBuffer,uint32_tWriteAddr,uint32_tNumByteToWrite){uint16_tNumOfPage,NumOfBytes,count,offset;//求WriteAddr在某一页的位置offset=WriteAddr%sFLASH_SPI_PAGESIZE;//求某一页剩余的大小count=sFLASH_SPI_PAGESIZE-offset;/*处理页不对齐的情况,防止页内覆盖*///先把某一页剩下的部分写掉,之后的就能新页的起始处开始写/*offset有值表示需要页对齐,如果要写的字节数小于某一页剩余的部分,那就无需对齐*//*这两个条件必须同时满足*/if(offsetNumByteToWrite-=count;//去掉已经写了的,从新页开始pBuffer+=count;WriteAddr+=count;}/*最多可分多少页*/NumOfPage=NumByteToWrite/sFLASH_SPI_PAGESIZE;/*剩余多少字节*/NumOfBytes=NumByteToWrite%sFLASH_SPI_PAGESIZE;if(NumOfPage){while(NumOf){//每一页都发起页编程sFLASH_WritePage(pBuffer,WriteAddr,sFLASH_SPI_PAGESIZE);pBuffer+=sFLASH_SPI_PAGESIZE;WriteAddr+=sFLASH_SPI_PAGESIZE;}}if(NumOfBytes){sFLASH_WritePage(pBuffer,WriteAddr,NumOfBytes);}}为什么会有两种写操作函数,是因为这里的写操作有两个特点:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论