STM32 DS3232M

2019-07-21 01:41发布


#define IIC_SCL PBout(6)// DS1
#define IIC_SDA PBout(7)
#define IN_SDA PBin(7)

//改变SDA所接的IO输入/输出
#define IIC_SDA_IN   ((GPIOB->CRL&0X0FFFFFFF)|0X80000000)
#define IIC_SDA_OUT  ((GPIOB->CRL&0X0FFFFFFF)|0X30000000)

u8 IIC_Write_Byte(u8 dat)
{
u8 i;
u8 iic_ack=0; //iic应答标志

IIC_SDA_OUT; //设置成输出

for(i = 0;i < 8;i++)
{
if(dat & 0x80) IIC_SDA = 1; //判断发送位,先发送高位
else IIC_SDA = 0;

#if _USER_DELAY_CLK==1  /* 定义了则使用延时函数来改变通讯频率 */

IIC_Delay();
IIC_SCL = 1; //为SCL下降做准备
IIC_Delay();
IIC_SCL = 0; //突变,将数据位发送过去
dat<<=1; //数据左移一位
IIC_Delay();
} //字节发送完成,开始接收应答信号

IIC_SDA = 1; //释放数据线
IIC_SDA_IN; //设置成输入

IIC_SCL = 1; //为SCL下降做准备
IIC_Delay();


#else  /* 否则不使用延时函数改变通讯频率 */

IIC_SCL = 1; //为SCL下降做准备
IIC_SCL = 0; //突变,将数据位发送过去
dat<<=1; //数据左移一位
} //字节发送完成,开始接收应答信号

IIC_SDA = 1; //释放数据线
IIC_SDA_IN(); //设置成输入

IIC_Delay();
IIC_SCL = 1; //为SCL下降做准备

#endif  /* end __USER_DELAY_CLK */

iic_ack |= IN_SDA; //读入应答位
IIC_Delay();
IIC_SCL = 0;
return iic_ack; //返回应答信号
}

写入地址后,3232无返回低电平的应答。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。