STM32F1固件库IIC与EEPROM通信

学习STM32F1固件库利用IIC与EEPROM通信中CheckEvent()与GetFlagStatus()区别整理

我在学习中遇到的问题

	在我学习STM32库函数的IIC库,利用库函数写完发送和接收函数后。在主函数中调用发现结果与我的预期不一致。
	找到解决方案后发现在单纯IIC检测(只发送地址)时,无法使用CheckEvent()函数检测IIC通信状态。

初始函数

EEPROM工作时序

这是EEPROM数据手册提供的写时序:
写时序图中可以看出写一字节与按页写入基本一致的。
值得注意的是按页写入时每次最多可以写入八字节数据,这与EEPROM存储方式有关。
读时序:
读时序
若MCU按照如上方式发送数据,EEPROM只会输出“当前”内存地址的数据。
若想要自己定义输出起始地址,则需要按照如下方式读取。
在这里插入图片描述

IIC收发函数

注:图中函数比较简单并没有进行超时检测,后期可以自己补充完整。

//发送一个字节数据
void EEPROM_Byte_Write(uint8_t addr,uint8_t data)
{
   
	I2C_GenerateSTART(EEPRON_I2C,ENABLE);//产生起始信号
	while(I2C_CheckEvent(EEPRON_I2C,I2C_EVENT_MASTER_MODE_SELECT)==ERROR);	//检测到EV5事件
	I2C_Send7bitAddress(EEPRON_I2C,EEPROM_ADDR,I2C_Direction_Transmitter);
	while(I2C_CheckEvent(EEPRON_I2C,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)==ERROR);
	I2C_SendData(EEPRON_I2C,addr); //发送EEPROM存储地址
	while(I2C_CheckEvent(EEPRON_I2C,I2C_EVENT_MASTER_BYTE_TRANSMITTING)==ERROR);
	I2C_SendData(EEPRON_I2C,data); //发送数据
	while(I2C_CheckEvent(EEPRON_I2C,I2C_EVENT_MASTER_BYTE_TRANSMITTED)==ERROR);
	I2C_GenerateSTOP(EEPRON_I2C,ENABLE);
}
//读出一个字节数据
void EEPROM_Read(uint8_t addr,uint8_t *data,uint8_t num)
{
   
	I2C_GenerateSTART(EEPRON_I2C
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值