#include “iic.h”
//PB4,PB5 悬浮输入
static void IIC_GPIO_Init(void)
{
GPIOB->DDR &= 0xcf;
GPIOB->CR1 &= 0xcf;
GPIOB->CR2 &= 0xcf;
}
void IIC_Master_Init(void)
{
CLK->PCKENR1 |= 0x01; //使能IIC外设时钟
IIC_GPIO_Init();
I2C->CR1 = 0x00; //允许时钟延展,禁止广播呼叫,禁止iic
I2C->FREQR = 0x01; //输入时钟频率8MHz
I2C->OARH = 0x40; //七位地址模式
I2C->OARL = 0xa0; //自身地址0xa0
I2C->CCRL = 0xff; //
I2C->CCRH = 0x00; //标准模式
I2C->TRISER = 0x02;
I2C->CR1 |= 0x01; //使能iic外设
}
void IIC_24C02_Write_Byte(u8 Address, u8 Data)
{
u8 temp = 0;
while((I2C->SR3 & 0x02) != 0); //等待IIC总线空闲
IIC_Start();
while((I2C->SR1 & 0x01) == 0); //EV5,起始信号已经发送
I2C->DR = (Add_24C02 & 0xfe); // 发送iic从器件物理地址,最低位0,写操作
while((I2C->SR1 & 0x02) == 0); //地址已经被发送
temp = I2C->SR1; //清除ADDR标志位
temp = I2C->SR3;
while((I2C->SR1 & 0x80) == 0); //等待发送寄存器为空
I2C->DR = Address; //发送要写入24C02的空间地址
while((I2C->SR1 & 0x04) == 0); //等待发送完成
while((I2C->SR1 & 0x80) == 0); //等待发送寄存器为空
I2C