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

  • 相关阅读:
    InputStream,String相互转化
    HttpGet
    MySQL重复数据
    JS获取地址栏参数的方法
    Java解析采集模块
    按键精灵多机型定时秒杀综合版提交脚本
    按键精灵手机版监控像素变换点击脚本
    按键精灵手机版定时点击脚本
    按键精灵获取系统时间定时点击
    window时间服务器 国内可用
  • 原文地址:https://www.cnblogs.com/wenhao-Web/p/14151263.html
Copyright © 2011-2022 走看看