zoukankan      html  css  js  c++  java
  • STM32-使用软件模拟I2C读写外部EEPROM(AT24C02)

    一、硬件电路

    二、代码实现

      I2C驱动程序链接:https://www.cnblogs.com/wenhao-Web/p/14151229.html

      1、软件延时

    void at24cxx_init(void) 
    {
        bsp_analog_i2c_init();
    }

      2、初始化

    void at24cxx_init(void) 
    {
        bsp_analog_i2c_init();
    }

      3、写一个字节

    int8_t at24cxx_write_one_byte(uint16_t reg, uint8_t data)
    {
        bsp_analog_i2c_start();
        /* 发送设备地址 */
        bsp_analog_i2c_send_byte(0xA0);
        if(bsp_analog_i2c_wait_ack() == 0)
        {
            bsp_analog_i2c_stop();
            return -1;
        }
        /* 发送寄存器地址 */
        bsp_analog_i2c_send_byte(reg);
        if(bsp_analog_i2c_wait_ack() == 0)
        {
            bsp_analog_i2c_stop();
            return -2;
        }
        /* 发送数据 */
        bsp_analog_i2c_send_byte(data);
        if(bsp_analog_i2c_wait_ack() == 0)
        {
            bsp_analog_i2c_stop();
            return -3;
        }
        bsp_analog_i2c_stop();
    
        at24cxx_delay(0xFFFF);
    
        return 0;
    }

      4、读多个字节

    int8_t at24cxx_read_byte(uint8_t reg, uint8_t *pdata, uint16_t size)
    {
        uint16_t i;
    
        bsp_analog_i2c_start();
        /* 发送设备地址 */
        bsp_analog_i2c_send_byte(0xA0);
        if(bsp_analog_i2c_wait_ack() == 0)
        {
            bsp_analog_i2c_stop();
            return -1;
        }
        /* 发送寄存器地址 */
        bsp_analog_i2c_send_byte(reg);
        if(bsp_analog_i2c_wait_ack() == 0)
        {
            bsp_analog_i2c_stop();
            return -1;
        }
        bsp_analog_i2c_start();
        /* 发送设备地址 */
        bsp_analog_i2c_send_byte(0XA1);
        if(bsp_analog_i2c_wait_ack() == 0)
        {
            bsp_analog_i2c_stop();
            return -1;
        }
        /* 接收数据 */
        for(i = 0; i < size; i++)
        {
            pdata[i] = bsp_analog_i2c_read_byte();
            if(i != size - 1 )
            {
                bsp_analog_i2c_ack();
            }
            else
            {
                bsp_analog_i2c_nack();
            }
        }
    
        bsp_analog_i2c_stop();
    
        return 0;
    }

      5、写多个字节

    int8_t at24cxx_write_byte(uint8_t reg, uint8_t *pdata, uint16_t size)
    {
        int8_t ret = 0 ;
        uint16_t i;
    
        for(i = 0; i < size; i++)
        {
            ret = at24cxx_write_one_byte(reg+i, pdata[i]);
            if(ret < 0)
                break;
        }
    
        return ret;
    }

    #endif

  • 相关阅读:
    spark连接MongoDB
    idea+scala+spark遇到的一些问题
    linux环境变量的配置
    sqoop的导入导出
    hive中一些常用的sql语句
    Unity 插件制作笔记(持续更新)
    linux-shutdown命令说明
    linux中的redis缓存服务器
    IceScrum敏捷开发工具的安装文档-官方最新版
    PHP设计模式系列
  • 原文地址:https://www.cnblogs.com/wenhao-Web/p/14151263.html
Copyright © 2011-2022 走看看