I2C_EEPROM 写入多字节 小数

一、写多字节

void I2C_WriteMultibyte(uint8_t Addr,uint8_t *pBuffer,uint8_t num);

void I2C_WriteMultibyte(uint8_t Addr,uint8_t *pBuffer,uint8_t num)	//写入多个字节
{
	
	u8 i,temp;
	
	temp=num/8;				//判断循环次数
	
	for(i=0;i<=temp;i++)
	{

		I2C_WriteByte(Addr,pBuffer,8);		//写入一个字节
		EE_Await();				//等待eeprom内部时序完成
		pBuffer+=8;
		Addr+=8;
		
	}
	
}

二、存储小数

1、定义变量

/*存储小数的数组,各8个*/
long double double_buffer[8] = {0};  //发送数组

long double double_buff[8] = {0};    //接收数组

2、读写函数

	for(i=0;i<8;i++)
  {
		double_buffer[i]=i+0.1;		//数据填充

	}
	
	
	I2C_WriteMultibyte(8,(void*)double_buffer,sizeof(double_buffer));      //写入函数
	EE_Await();
	I2C_ReadByte(8,(void*)double_buff, sizeof(double_buff));		//读取函数
	
	for(i=0;i<8;i++)
  {
		printf("%LF\n",double_buff[i]);				//串口循环打印
	}





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对于使用 `HAL_I2C_Mem_Read` 函数来读取 EEPROM 数据,可以按照以下步骤进行操作: 1. 初始化 I2C 总线和相关的 GPIO 引脚。 2. 使用 `HAL_I2C_Mem_Read` 函数读取 EEPROM 数据。 下面是一个示例代码片段,演示了如何使用 `HAL_I2C_Mem_Read` 函数来读取 EEPROM 数据: ```c #include "stm32xxxx_hal.h" #define EEPROM_ADDR 0xA0 // EEPROM 设备地址 // 初始化 I2C 总线和相关 GPIO 引脚 void I2C_Init(void) { // ... // 初始化 I2C 总线和 GPIO 引脚 } // 从 EEPROM 读取数据 HAL_StatusTypeDef ReadFromEEPROM(uint16_t memAddress, uint8_t *pData, uint16_t size) { HAL_StatusTypeDef status; // 创建 I2C 句柄 I2C_HandleTypeDef hi2c; // 初始化 I2C 句柄和相关参数 hi2c.Instance = I2C1; hi2c.Init.ClockSpeed = 400000; hi2c.Init.DutyCycle = I2C_DUTYCYCLE_2; hi2c.Init.OwnAddress1 = 0; hi2c.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; hi2c.Init.OwnAddress2 = 0; hi2c.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; // 初始化 I2C 总线 if (HAL_I2C_Init(&hi2c) != HAL_OK) { // 初始化失败 return HAL_ERROR; } // 读取数据 status = HAL_I2C_Mem_Read(&hi2c, EEPROM_ADDR, memAddress, I2C_MEMADD_SIZE_16BIT, pData, size, HAL_MAX_DELAY); // 关闭 I2C 总线 HAL_I2C_DeInit(&hi2c); return status; } int main(void) { // ... uint8_t data[10]; // 数据缓冲区 // 读取 EEPROM 数据 HAL_StatusTypeDef status = ReadFromEEPROM(0x0000, data, sizeof(data)); if (status == HAL_OK) { // 数据读取成功 // 处理读取的数据 } else { // 数据读取失败 // 处理错误 } // ... while (1) { // 主循环 } } ``` 在上述代码中,`I2C_Init` 函数用于初始化 I2C 总线和相关 GPIO 引脚。`ReadFromEEPROM` 函数封装了使用 `HAL_I2C_Mem_Read` 函数从 EEPROM 中读取数据的过程。在 `main` 函数中,我们调用 `ReadFromEEPROM` 函数来读取 EEPROM 数据,并根据返回的状态进行相应的处理。 请注意,示例中的代码仅供参考,具体实现可能因具体的芯片型号和硬件配置而有所差异。在实际应用中,请根据相关文档和设备规范进行具体的编码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值