做upc条形码的网站,怎么开一个属于自己的网店,陕西响应式网站建设,frontpage建设网站的图片文章目录 一.概要二.IIC总线基本概念1.总体特征2.通讯流程 三.EEPROM介绍1.M24C08基本介绍2.向M24C08写一个字节时序图3.从M24C08读一个字节时序图 四.GPIO模拟IIC驱动M24C08读写五.CubeMX工程源代码下载六.讲解视频链接地址七.小结 一.概要
IIC(Inter#xff0d;Integrated … 文章目录 一.概要二.IIC总线基本概念1.总体特征2.通讯流程 三.EEPROM介绍1.M24C08基本介绍2.向M24C08写一个字节时序图3.从M24C08读一个字节时序图 四.GPIO模拟IIC驱动M24C08读写五.CubeMX工程源代码下载六.讲解视频链接地址七.小结 一.概要
IIC(InterIntegrated Circuit)总线是一种由NXP原PHILIPS公司开发的两线式串行总线用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信在小数据量场合使用传输距离短任意时刻只能有一个主机等特性。
二.IIC总线基本概念
I2C 总线分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。
1.总体特征 2.通讯流程 三.EEPROM介绍
EEPROM Electrically Erasable Programmable Read Only Memory 全称是电可擦除可编程只读存储器是非易失存储器可以访问到每个字节容量比较小。目前的EEPROM一般是IIC接口或者SPI接口的。
1.M24C08基本介绍
M24C08是ST公司(意法半导体公司)的串行接口的EEPROM存储芯片,它的容量是8K bit。
芯片功能描述 M24C08系列支持I2C总线数据传送协议I2C总线协议规定任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器但由主器件控制传送数据发送或接收的模式。
芯片特性介绍
1.两线串行接口(SDA、SCL)
2.有用于硬件数据保护的写保护引脚
3.自定时写入周期(5毫秒),因为内部有页缓冲区,向M24C08写入数据之后,还需要等待M24C08将缓冲区数据写入到内部EEPROM区域
4.数据保存可达100年
5.100万次擦写周期
6.高数据传送速率为400KHz、低速100KHZ和IIC总线兼容
7.16字节页写缓冲区 这个缓冲区大小与芯片具体型号有关: 8字节页1K、2K、16字节页4K、8K、16K M24C08的E2(3脚)一般接地E1,E0是容量大点的EEPROM才有这样M24C08这个器件,写操作时候的地址就是0xA0读操作时候的地址是0xA1。
2.向M24C08写一个字节时序图
写操作过程中只有ACK是M24C08发出的其他信号都是单片机发出的。 3.从M24C08读一个字节时序图
读操作过程中ACK跟返回的数据是M24C08发出的其他信号都是单片机发出的。 四.GPIO模拟IIC驱动M24C08读写
硬件准备
STLINK接STM32F103C8T6小系统板STLINK接电脑USB口, STM32F103C8T6小系统板跟EEPROM模块连接 板子G----模块GND 板子3.3–模块VCC 板子PB10—模块SCL 板子PB11—模块SDA 打开STM32CubeMX软件,新建工程 Part Number处输入STM32F103C8再双击就创建新的工程 配置下载口引脚 配置外部晶振引脚 配置系统主频 配置工程文件名保存路径KEIL5工程输出方式 生成工程 用Keil5打开工程 添加代码 主要代码
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();//8M外部晶振系统主频72M/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 */EE_IIC_Init();//管脚初始化EE_EE_IIC_SendByteToSlave(0xA0,0x00,0x55);//0地址写入0x55HAL_Delay(10);//等待10msEE_IIC_ReadByteFromSlave(0xA0,0x00,EEDATA);//从0地址读取内容存储到变量/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}#include main.h
#define EE_ADDR 0xa0
#define EE_SCL_PIN GPIO_PIN_10 //模拟IIC的SCL信号 1.修改引脚即可修改IIC接口
#define EE_SDA_PIN GPIO_PIN_11 //模拟IIC的SDA信号void EE_SDA_IN(void) //配置成输入 { GPIO_InitTypeDef GPIO_InitStruct {0};GPIO_InitStruct.Pin GPIO_PIN_11;GPIO_InitStruct.Mode GPIO_MODE_INPUT;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB, GPIO_InitStruct);
}
void EE_SDA_OUT(void)//配置成输出
{GPIO_InitTypeDef GPIO_InitStruct {0};GPIO_InitStruct.Pin GPIO_PIN_11;GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_OD;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB, GPIO_InitStruct);}void EE_SCK_OUT(void) //配置成输出
{GPIO_InitTypeDef GPIO_InitStruct {0};GPIO_InitStruct.Pin GPIO_PIN_10;GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_OD;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB, GPIO_InitStruct);
}#define EE_IIC_SCL(val) HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10,val) //SCL 2.修改引脚即可修改IIC接口
#define EE_IIC_SDA(val) HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11,val) //SDA unsigned char EE_READ_SDA(void)
{
return HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_11);
} /******************************************************************************
*函 数void EE_IIC_Delay(void)
*功 能IIC延时
*参 数无
*返回值无
*备 注: 移植时只需要将EE_IIC_Delay()换成自己的延时即可
*******************************************************************************/
void EE_IIC_Delay(uint8_t us)
{for(int i 0; i 20; i) {__asm(NOP);//core bus 160M 情况下大概IIC速率 400K}}
/******************************************************************************
*函 数void IIC_Init(void)
*功 能IIC初始化
*参 数无
*返回值无
*备 注无
*******************************************************************************/void EE_IIC_Init(void)
{ __HAL_RCC_GPIOB_CLK_ENABLE();EE_SCK_OUT();EE_SDA_OUT();EE_IIC_SCL(1);EE_IIC_SDA(1);}void EE_IIC_Start(void)
{EE_SDA_OUT(); //sda线输出 EE_IIC_SDA(1); EE_IIC_SCL(1);EE_IIC_Delay(4);EE_IIC_SDA(0); //START:when CLK is high,DATA change form high to low EE_IIC_Delay(4);EE_IIC_SCL(0); //钳住I2C总线准备发送或接收数据
}void EE_IIC_Stop(void)
{EE_SDA_OUT(); //sda线输出EE_IIC_SCL(0);EE_IIC_SDA(0); //STOP:when CLK is high DATA change form low to highEE_IIC_Delay(4);EE_IIC_SCL(1); EE_IIC_SDA(1); //发送I2C总线结束信号EE_IIC_Delay(4);
}uint8_t EE_IIC_WaitAck(void)
{uint8_t ucErrTime0;EE_SDA_IN(); //SDA设置为输入 从机给一个低电平做为应答 EE_IIC_SDA(1);EE_IIC_Delay(1); EE_IIC_SCL(1);EE_IIC_Delay(1);; while(EE_READ_SDA()){ucErrTime;if(ucErrTime250){EE_IIC_Stop();return 1;}}EE_IIC_SCL(0); //时钟输出0 return 0;
} void EE_IIC_Ack(void)
{EE_IIC_SCL(0);EE_SDA_OUT();EE_IIC_SDA(0);EE_IIC_Delay(1);EE_IIC_SCL(1);EE_IIC_Delay(2);EE_IIC_SCL(0);
}void EE_IIC_NAck(void)
{EE_IIC_SCL(0);EE_SDA_OUT();EE_IIC_SDA(1);EE_IIC_Delay(1);EE_IIC_SCL(1);EE_IIC_Delay(1);EE_IIC_SCL(0);
} void EE_IIC_SendByte(uint8_t data)
{ uint8_t t; EE_SDA_OUT(); EE_IIC_SCL(0); //拉低时钟开始数据传输for(t0;t8;t){ EE_IIC_SDA((data0x80)7);EE_IIC_Delay(1); EE_IIC_SCL(1);data1;EE_IIC_Delay(1);EE_IIC_SCL(0); }EE_IIC_Delay(1);
} uint8_t EE_IIC_ReadByte(uint8_t ack)
{uint8_t i,receive0;EE_SDA_IN(); //SDA设置为输入模式 等待接收从机返回数据for(i0;i8;i ){EE_IIC_SCL(0); EE_IIC_Delay(1);EE_IIC_SCL(1);receive1;if(EE_READ_SDA())receive; //从机发送的电平EE_IIC_Delay(1); } if(ack)EE_IIC_Ack(); //发送ACK elseEE_IIC_NAck(); //发送nACK return receive;
}uint8_t EE_IIC_ReadByteFromSlave(uint8_t I2C_Addr,uint8_t reg,uint8_t *buf)
{EE_IIC_Start(); EE_IIC_SendByte(I2C_Addr); //发送从机地址if(EE_IIC_WaitAck()) //如果从机未应答则数据发送失败{EE_IIC_Stop();return 1;}EE_IIC_SendByte(reg); //发送寄存器地址EE_IIC_WaitAck(); EE_IIC_Start();EE_IIC_SendByte(I2C_Addr1); //进入接收模式 EE_IIC_WaitAck();*bufEE_IIC_ReadByte(0); EE_IIC_Stop(); //产生一个停止条件return 0;
}uint8_t EE_EE_IIC_SendByteToSlave(uint8_t I2C_Addr,uint8_t reg,uint8_t data)
{EE_IIC_Start();EE_IIC_SendByte(I2C_Addr); //发送从机地址if(EE_IIC_WaitAck()){EE_IIC_Stop();return 1; //从机地址写入失败}EE_IIC_SendByte(reg); //发送寄存器地址EE_IIC_WaitAck(); EE_IIC_SendByte(data); if(EE_IIC_WaitAck()){EE_IIC_Stop(); return 1; //数据写入失败}EE_IIC_Stop(); //产生一个停止条件return 0;
}
五.CubeMX工程源代码下载
链接https://pan.baidu.com/s/1MMYww6IgUNa3wPaN-pWqdw 提取码d39f 如果链接失效可以联系博主给最新链接
程序下载下来之后解压就行
六.讲解视频链接地址
IIC总线讲解
七.小结
学会使用模拟IIC能适应各种平台不管是STM32的单片机还是其他牌子的单片机都能很快实现对EEPROM等IIC总线的设备进行数据读写。 文章转载自: http://www.morning.cmcjp.cn.gov.cn.cmcjp.cn http://www.morning.mftzm.cn.gov.cn.mftzm.cn http://www.morning.rfpb.cn.gov.cn.rfpb.cn http://www.morning.sbjbs.cn.gov.cn.sbjbs.cn http://www.morning.ftmzy.cn.gov.cn.ftmzy.cn http://www.morning.rsszk.cn.gov.cn.rsszk.cn http://www.morning.jnhhc.cn.gov.cn.jnhhc.cn http://www.morning.ai-wang.cn.gov.cn.ai-wang.cn http://www.morning.rbkl.cn.gov.cn.rbkl.cn http://www.morning.rxwnc.cn.gov.cn.rxwnc.cn http://www.morning.rnhh.cn.gov.cn.rnhh.cn http://www.morning.gxhqt.cn.gov.cn.gxhqt.cn http://www.morning.ykrck.cn.gov.cn.ykrck.cn http://www.morning.yyngs.cn.gov.cn.yyngs.cn http://www.morning.rwdbz.cn.gov.cn.rwdbz.cn http://www.morning.mxhcf.cn.gov.cn.mxhcf.cn http://www.morning.ngcbd.cn.gov.cn.ngcbd.cn http://www.morning.nlrp.cn.gov.cn.nlrp.cn http://www.morning.rhkq.cn.gov.cn.rhkq.cn http://www.morning.xinyishufa.cn.gov.cn.xinyishufa.cn http://www.morning.rcklc.cn.gov.cn.rcklc.cn http://www.morning.gbfuy28.cn.gov.cn.gbfuy28.cn http://www.morning.lktjj.cn.gov.cn.lktjj.cn http://www.morning.xlclj.cn.gov.cn.xlclj.cn http://www.morning.cwwbm.cn.gov.cn.cwwbm.cn http://www.morning.qscsy.cn.gov.cn.qscsy.cn http://www.morning.drwpn.cn.gov.cn.drwpn.cn http://www.morning.qmncj.cn.gov.cn.qmncj.cn http://www.morning.tkjh.cn.gov.cn.tkjh.cn http://www.morning.hlhqs.cn.gov.cn.hlhqs.cn http://www.morning.qnsmk.cn.gov.cn.qnsmk.cn http://www.morning.kpmxn.cn.gov.cn.kpmxn.cn http://www.morning.ljbch.cn.gov.cn.ljbch.cn http://www.morning.wlgpz.cn.gov.cn.wlgpz.cn http://www.morning.bmzxp.cn.gov.cn.bmzxp.cn http://www.morning.cgthq.cn.gov.cn.cgthq.cn http://www.morning.rjtmg.cn.gov.cn.rjtmg.cn http://www.morning.ztcxx.com.gov.cn.ztcxx.com http://www.morning.xqknl.cn.gov.cn.xqknl.cn http://www.morning.nxbsq.cn.gov.cn.nxbsq.cn http://www.morning.mztyh.cn.gov.cn.mztyh.cn http://www.morning.ltzkk.cn.gov.cn.ltzkk.cn http://www.morning.mhlkc.cn.gov.cn.mhlkc.cn http://www.morning.hkysq.cn.gov.cn.hkysq.cn http://www.morning.nhzzn.cn.gov.cn.nhzzn.cn http://www.morning.kfsfm.cn.gov.cn.kfsfm.cn http://www.morning.lpcct.cn.gov.cn.lpcct.cn http://www.morning.nylbb.cn.gov.cn.nylbb.cn http://www.morning.nwzcf.cn.gov.cn.nwzcf.cn http://www.morning.tntbs.cn.gov.cn.tntbs.cn http://www.morning.zmzdx.cn.gov.cn.zmzdx.cn http://www.morning.xfjwm.cn.gov.cn.xfjwm.cn http://www.morning.lkxzb.cn.gov.cn.lkxzb.cn http://www.morning.kkrnm.cn.gov.cn.kkrnm.cn http://www.morning.yfrlk.cn.gov.cn.yfrlk.cn http://www.morning.dnqlba.cn.gov.cn.dnqlba.cn http://www.morning.mwnch.cn.gov.cn.mwnch.cn http://www.morning.jcbjy.cn.gov.cn.jcbjy.cn http://www.morning.elsemon.com.gov.cn.elsemon.com http://www.morning.jhtrb.cn.gov.cn.jhtrb.cn http://www.morning.jfjqs.cn.gov.cn.jfjqs.cn http://www.morning.sgbjh.cn.gov.cn.sgbjh.cn http://www.morning.krnzm.cn.gov.cn.krnzm.cn http://www.morning.mhnxs.cn.gov.cn.mhnxs.cn http://www.morning.xbdd.cn.gov.cn.xbdd.cn http://www.morning.xpzrx.cn.gov.cn.xpzrx.cn http://www.morning.jhxdj.cn.gov.cn.jhxdj.cn http://www.morning.tlzbt.cn.gov.cn.tlzbt.cn http://www.morning.jxgyg.cn.gov.cn.jxgyg.cn http://www.morning.baohum.com.gov.cn.baohum.com http://www.morning.mkrjf.cn.gov.cn.mkrjf.cn http://www.morning.kdbcx.cn.gov.cn.kdbcx.cn http://www.morning.oumong.com.gov.cn.oumong.com http://www.morning.kjcll.cn.gov.cn.kjcll.cn http://www.morning.ygmw.cn.gov.cn.ygmw.cn http://www.morning.wfysn.cn.gov.cn.wfysn.cn http://www.morning.rhjsx.cn.gov.cn.rhjsx.cn http://www.morning.hffjj.cn.gov.cn.hffjj.cn http://www.morning.nkkpp.cn.gov.cn.nkkpp.cn http://www.morning.gcfrt.cn.gov.cn.gcfrt.cn