2021-08-12

STM32F407配置AT24C02

AT24C02使用I2C进行通信,相信大家对I2C通信都有所了解这里我就不在赘述了。

说一下AT24C02使用时的注意事项,
1.一定要在写数据完成后加一个5ms的延时,不能立刻进行数据的读取。
这一点在数据手册里也有说明 :如下图在这里插入图片描述
废话不多说下面贴代码<#include “at24c02.h”

/********************************************
2021年8月12日,万千
QQ 1047342131:
*******************************************/

/**

  • @brief AT24C02 写一个字节函数
  • @note
  • @param WordAdderess: 子地址 0——255
  • @param data: 要写的数据
  • @retval None
    /
    void AT24C02_WriteByte(uint8_t WordAdderess, uint8_t data)
    {
    I2C_Start();
    I2C_SendByte(AT8266_Adderess); // 写地址
    I2C_ReceiveAck();
    I2C_SendByte(WordAdderess); // 写字节地址
    I2C_ReceiveAck();
    I2C_SendByte(data); // 写入的数据
    I2C_ReceiveAck();
    I2C_Stop();
    Delayms(5); //这个延时是必须加的 AT24 系列系列芯片有一个写周期最大是5毫秒
    }
    /
    *
  • @brief 读指定AT24C02地址内存放的数据
  • @note
  • @param WordAdderess: 要读的数据地址
  • @retval 返回数据
    /
    uint8_t AT24C02_ReadByte(uint8_t WordAdderess)
    {
    uint8_t data = 0;
    I2C_Start();
    I2C_SendByte(AT8266_Adderess); // 写地址
    I2C_ReceiveAck();
    I2C_SendByte(WordAdderess); // 字地址
    I2C_ReceiveAck();
    I2C_Start();
    I2C_SendByte(AT8266_Adderess | 0x01); // 写地址
    I2C_ReceiveAck();
    data = I2C_ReceiveByte();
    I2C_SendAck(0X01);
    I2C_Stop();
    return data;
    }
    /
    *
  • @brief 按页写数据 AT24C02 一页是八个字节
  • @note
  • @param WordAdderess: 要写的启示地址
  • @param *data: 要写的数据 以数组的形式
  • @retval None
    /
    void AT24C02_WritePage(uint8_t WordAdderess, uint8_t data)
    {
    I2C_Start();
    I2C_SendByte(AT8266_Adderess); // 写地址
    I2C_ReceiveAck();
    I2C_SendByte(WordAdderess); // 写字节地址
    I2C_ReceiveAck();
    for (uint8_t i = 0; i < 8; i++)
    {
    I2C_SendByte(data[i]); // 写入的数据
    I2C_ReceiveAck();
    }
    I2C_Stop();
    Delayms(5); //这个延时是必须加的 AT24 系列系列芯片有一个写周期最大是5毫秒
    }
    /
  • @brief 按顺序读一页
  • @note
  • @param WordAdderess: 读的起始地址
  • @param *Rx_data: 存放数据的数组
  • @retval None
    */
    void AT24C02_ReadPage(uint8_t WordAdderess, uint8_t *Rx_data)
    {
    I2C_Start();
    I2C_SendByte(AT8266_Adderess); // 写地址
    I2C_ReceiveAck();
    I2C_SendByte(WordAdderess); // 器件地址
    I2C_ReceiveAck();
    I2C_Start();
    I2C_SendByte(AT8266_Adderess | 0x01); // 读地址
    I2C_ReceiveAck();
    Rx_data[0] = I2C_ReceiveByte();
    I2C_SendAck(0X00);
    for (uint8_t i = 1; i < 8; i++)
    {
    Rx_data[i] = I2C_ReceiveByte();
    I2C_SendAck(0X00);
    Delayms(100);
    }
    I2C_Stop();
    }

完整代码链接:https://pan.baidu.com/s/1pZrVeXW-B-zOPk2GQOb2XQ
提取码:1111

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值