微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > STM32使用GPIO口模拟IIC对EEPROM进行读写操作

STM32使用GPIO口模拟IIC对EEPROM进行读写操作

时间:10-02 整理:3721RD 点击:
前面我看我能写进去能读出来,数据都是没有错误的以为正确了,但是现在项目总测试的时候需要检查返回值。我在进行写操作的时候,接收EEPROM的应答信号,会出现接收到NACK的应答,但是我的又把数据写进去了,能读出来那个产生NACK应答信号的数据。
这是我的写操作的代码:
u8 Senddata_byte(u8 data)
{
        u8 i = 8;
        GPIOB->CRH &= 0xffffff0f;
        GPIOB->CRH |= 0x00000010; //PB9TM;
        while(i--) {
                SCL_0();
                Delay_us(5);
                if(data & 0x80)
                        SDA_1();
                else
                        SDA_0();
                data <<= 1;
                Delay_us(5);
                SCL_1();
                Delay_us(5);
        }
        //接收ACK
        SCL_0();//第九个SCL脉冲
        Delay_us(5);
        GPIOB->CRH &= 0xffffff0f;
        GPIOB->CRH |= 0x00000040; //PB9浮空输入;
        if(SDA_STATE) {
                GPIOB->CRH &= 0xffffff0f;
                GPIOB->CRH |= 0x00000010; //PB9TM;
                SCL_1();       
                Delay_us(5);
                SCL_0();
                Delay_us(5);
                return NACK;
        } else {
                GPIOB->CRH &= 0xffffff0f;
                GPIOB->CRH |= 0x00000010; //PB9TM;
                SCL_1();       
                Delay_us(5);
                SCL_0();
                Delay_us(5);
                return ACK;
        }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top