新手上路
- 积分
- 20
- 金钱
- 20
- 注册时间
- 2016-11-8
- 在线时间
- 2 小时
|

楼主 |
发表于 2016-11-8 12:23:46
|
显示全部楼层
本帖最后由 你好zjl 于 2016-11-8 12:44 编辑
程序也贴上来,配置应该没问题。其他地方都可以用的。
void IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_DeInit(GPIOE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, DISABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_ResetBits(GPIOE,GPIO_Pin_8|GPIO_Pin_9);
Delay_ARMJISHU(500);//delay_ms(50);
GPIO_SetBits(GPIOE,GPIO_Pin_8|GPIO_Pin_9);
}
void IIC_Start(void)
{
SDA_OUT(); //sda
Delay_ARMJISHU(50);//2015-03-30
GPIO_SetBits(GPIOE,GPIO_Pin_9); //SDA PC9
IIC_SCL=1;
Delay_ARMJISHU(50);
GPIO_ResetBits(GPIOE,GPIO_Pin_9);//IIC_SDA=0; //START:when CLK is high,DATA change form high to low
Delay_ARMJISHU(50);
IIC_SCL=0; //I2C
}
void IIC_Stop(void)
{
SDA_OUT();//sda
Delay_ARMJISHU(50);//2015-03-30
IIC_SCL=0;
Delay_ARMJISHU(50);//2015-03-31
GPIO_ResetBits(GPIOE,GPIO_Pin_9);//STOP:when CLK is high DATA change form low to high
Delay_ARMJISHU(50);
IIC_SCL=1;
Delay_ARMJISHU(50);//2015-03-30
GPIO_SetBits(GPIOE,GPIO_Pin_9);//
Delay_ARMJISHU(50);
}
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
// SDA_OUT();
IIC_SCL=0;
Delay_ARMJISHU(50);//2015-03-31
SDA_IN();
GPIO_SetBits(GPIOE,GPIO_Pin_9);//SDA
Delay_ARMJISHU(50);
IIC_SCL=1;
Delay_ARMJISHU(50);
// SDA_IN(); //2015-03-31
Delay_ARMJISHU(50);//2015-03-31
while(READ_SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
return 1;
}
}
IIC_SCL=0;//
return 0;
}
//I2CÓ¦´ðÐźź¯Êý
void IIC_Ack(void)
{
IIC_SCL=0;
SDA_OUT();
Delay_ARMJISHU(50);//2015-03-30
GPIO_ResetBits(GPIOE,GPIO_Pin_9);//IIC_SDA=0; 2016.8.25
Delay_ARMJISHU(50);
IIC_SCL=1;
Delay_ARMJISHU(50);
IIC_SCL=0;
Delay_ARMJISHU(50);//2015-03-31
}
//I2CÎÞÓ¦´ðÐźź¯Êý
void IIC_NAck(void)
{
IIC_SCL=0;
SDA_OUT();
Delay_ARMJISHU(50);//2015-03-30
GPIO_SetBits(GPIOE,GPIO_Pin_9);//IIC_SDA=1; 2016.8.25
Delay_ARMJISHU(50);
IIC_SCL=1;
Delay_ARMJISHU(50);
IIC_SCL=0;
Delay_ARMJISHU(50);
}
//I2C·¢ËÍÒ»¸ö×Ö½ÚÊý¾Ý 2016.8.22
void IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
Delay_ARMJISHU(50);//2015-03-30
IIC_SCL=0; //
for(t=0;t<8;t++)
{
if((txd&0x80)>>7)
GPIO_SetBits(GPIOE,GPIO_Pin_9);//SDA
else
GPIO_ResetBits(GPIOE,GPIO_Pin_9);//SDA
txd<<=1;
Delay_ARMJISHU(50);
IIC_SCL=1;
Delay_ARMJISHU(50);
IIC_SCL=0;
Delay_ARMJISHU(50);
}
}
|
|