OpenEdv-开源电子网

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

AT24C02只能读出不能写入,为什莫

[复制链接]

2

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2017-5-14
在线时间
8 小时
发表于 2020-1-27 21:20:38 | 显示全部楼层 |阅读模式
//初始化IIC
void IIC_Init(void)
{                                             
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOX, ENABLE );        //使能GPIOB时钟
          
        GPIO_InitStructure.GPIO_Pin = SCL_Pin|SDA_Pin; //SCL
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出
        GPIO_Init(GPIOX, &GPIO_InitStructure);       

        GPIO_SetBits(GPIOX,SCL_Pin|SDA_Pin);         //PB6,PB7 输出高
}

#ifndef __MYIIC_H
#define __MYIIC_H
#include "sys.h"
#include "delay.h"

//端口配置
#define GPIOX                        GPIOB
#define RCC_APB2Periph_GPIOX          RCC_APB2Periph_GPIOB
#define SCL_Pin                      GPIO_Pin_6
#define SDA_Pin                      GPIO_Pin_7

#define        IIC_SCL_H           GPIOX->BSRR = SCL_Pin         //SCL高电平
#define        IIC_SCL_L           GPIOX->BRR  = SCL_Pin         //SCL低电平
#define        IIC_SDA_H     GPIOX->BSRR = SDA_Pin       //SDA高电平
#define        IIC_SDA_L           GPIOX->BRR  = SDA_Pin         //SDA低电平
#define        READ_SDA            GPIOX->IDR  & SDA_Pin                 //SDA读数据

//IIC所有操作函数
void IIC_Init(void);                //初始化IIC的IO口                                 
void IIC_Start(void);                                //发送IIC开始信号
void IIC_Stop(void);                                  //发送IIC停止信号
void IIC_Send_Byte(u8 txd);                        //IIC发送一个字节
u8 IIC_Read_Byte(unsigned char ack);//IIC读取一个字节
u8 IIC_Wait_Ack(void);                                 //IIC等待ACK信号
void IIC_Ack(void);                                        //IIC发送ACK信号
void IIC_NAck(void);                                //IIC不发送ACK信号

#endif
以上为修改原子的F1模拟IIC对EEPROM进行操作,PB6,PB7配置成开路输出,就不用频繁改变端口的方向
贴出来的为修改的部分,其他部分不变。

出现的问题:只能读出不能写入数据。
经过实验把#define        IIC_SDA_H     GPIOX->BSRR = SDA_Pin 写改为#define          IIC_SDA_H     GPIO_SetBits(GPIOX,SDA_Pin)就可以对AT24C02进行读写了
可为什莫?????GPIOX->BSRR = SDA_PinGPIO_SetBits(GPIOX,SDA_Pin)不都是把SDA线置高吗,有什莫区别???

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-19 22:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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