嵌入式模块学习---I2C通信+EEPROM读写

文章介绍了如何使用STM32CubeMX配置I2C总线的PB6和PB7引脚,然后提供了优化的EEPROM读写函数。写操作通过发送写标志和地址,再连续发送数据;读操作则涉及两次I2C启动,先写后读,接收数据并根据需要发送ACK或NACK。
摘要由CSDN通过智能技术生成

一、STM32CubeMX配置

  1. 配置引脚

查找官方手册

I2C总线对应PB6,PB7引脚,在配置CubeMX时,将PB6,PB7设为Output

  1. 将资料代码添加到自己的工程里----在底层驱动代码里找

二、代码部分

优化EEPROM读写函数

  1. 向EEPROM里写数据

//EEPROM的写操作
void EEPROM_Write(unsigned char *pucBuf,unsigned char ucAddr,unsigned char ucNum)
{
    I2CStart();
    I2CSendByte(0xa0);//写标志 0xa0是写,0xa1是读
    I2CWaitAck();

    I2CSendByte(ucAddr);//送到目的地址
    I2CWaitAck();

    while(ucNum--)  
    {
        I2CSendByte(*pucBuf++);
        I2CWaitAck();
    }
    I2CStop();
    delay(500);//短暂延时
}
  1. I2C相关代码

  1. 从EEPROM里读出数据

void EEPROM_Read(unsigned char *pucBuf,unsigned char ucAddr,unsigned char ucNum)
{
    I2CStart();
    I2CSendByte(0xa0);//先要写数据
    I2CWaitAck();

    I2CSendByte(ucAddr);//指令送到目的地址
    I2CWaitAck();

    I2CStart();
    I2CSendByte(0xa1);//读数据的指令
    I2CWaitAck();

    while(ucNum--)
    {
         *pucBuf++ =I2CReceiveByte();//不断从存储器中读数据进入Buffer
         if(ucNum)
             I2CSendAck();
         else 
             I2CSendNotAck();
    }
    I2CStop();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值