OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3218|回复: 6

我用I2C2,控制24C02读写,但是写操作要单片机复位两次才工作,请问有人知道为什么吗

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-10-31
在线时间
9 小时
发表于 2018-1-22 16:55:59 | 显示全部楼层 |阅读模式
1金钱
void        I2C_EEPROM_Byte_Write(uint8_t        Write_Addr,uint8_t        data)
{
                uint16_t        cf=0xFFFF;

                //        Start
                I2C_GenerateSTART(I2Cx,ENABLE);                       
                //        wait        EV5
                while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_SB) == ERROR)
                {
                }

       
                //        Send        EEPROM Address
                I2C_Send7bitAddress(I2Cx,EEPROM_Device_Addr,I2C_Direction_Transmitter);
               
       
                //        wait        EV6
                while(I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) != SUCCESS );
                //        Send        Write_Addr
                I2C_SendData(I2Cx,Write_Addr);
               
                //        wait        EV8
                while(I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_BYTE_TRANSMITTING) != SUCCESS );
                //        Send        pBuffer
                I2C_SendData(I2Cx,data);
                //        wait        EV8-2
                while(I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_BYTE_TRANSMITTED) != SUCCESS );

                I2C_GenerateSTOP(I2Cx,ENABLE);
}

主函数:
int        main(void)
{

        //Ïμí3ê±ÖóòѾ-±»ÅäÖÃ3é72M
        LED_GPIO_Config();
       
        USART_Init_Config();

        I2C_EEPROM_Init();
        EEPROM_WaitForWriteEnd();

//        EEPROM_WaitForWriteEnd();

        I2C_EEPROM_Byte_Write(11,52);
        EEPROM_WaitForWriteEnd();
        I2C_EEPROM_Read(readData,11,1);
        printf("readData=%d\n",readData[0]);
        show_Message();
        while(1)
        {

        }
}


最佳答案

查看完整内容[请看2#楼]

用模拟i2c吧:http://blog.csdn.net/qq_20553613/article/details/78878211
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3448
金钱
3448
注册时间
2017-7-4
在线时间
869 小时
发表于 2018-1-22 16:56:00 | 显示全部楼层
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-10-31
在线时间
9 小时
 楼主| 发表于 2018-1-22 21:46:35 | 显示全部楼层
请大佬们回复一下啊,搞不懂为什么要复位两次,才能正常写操作
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-23 01:45:35 | 显示全部楼层
软件模拟IIC,表示没这个问题
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-10-31
在线时间
9 小时
 楼主| 发表于 2018-1-23 09:27:42 | 显示全部楼层
正点原子 发表于 2018-1-23 01:45
软件模拟IIC,表示没这个问题

难道这是硬件IIC的bug?我今天也是准备用软件模拟试一试
回复

使用道具 举报

13

主题

156

帖子

0

精华

高级会员

Rank: 4

积分
883
金钱
883
注册时间
2017-8-7
在线时间
200 小时
发表于 2018-1-23 13:32:20 | 显示全部楼层
我记得之前好像有人说过STM32的硬件IIC有问题
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-10-31
在线时间
9 小时
 楼主| 发表于 2018-1-26 13:58:06 | 显示全部楼层
旺仔奶豆 发表于 2018-1-23 13:32
我记得之前好像有人说过STM32的硬件IIC有问题

我也发现了  总是卡死在查询事件哪儿
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 21:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表