高中生
最后登录1970-1-1
在线时间 小时
注册时间2014-4-27
|

楼主 |
发表于 2016-3-15 09:36:49
|
显示全部楼层
- <blockquote><div class="blockcode"><blockquote>//初始化SCCB接口
- void SCCB_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能PD,PG端口时钟
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; // 端口配置
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //输入
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- GPIO_SetBits(GPIOC,GPIO_Pin_6); // 输出高
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; // 端口配置
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //输输出
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- GPIO_SetBits(GPIOC,GPIO_Pin_7); // 输出高
-
- SCCB_SDA_OUT();
- }
- //SCCB起始信号
- //当时钟为高的时候,数据线的高到低,为SCCB起始信号
- //在激活状态下,SDA和SCL均为低电平
- void SCCB_Start(int delaytime)
- {
- SCCB_SDA=1; //数据线高电平
- SCCB_SCL=1; //在时钟线高的时候数据线由高至低
- delay_us(delaytime);
- SCCB_SDA=0;
- delay_us(delaytime);
- SCCB_SCL=0; //数据线恢复低电平,单操作函数必要
- delay_us(delaytime);
- }
- //SCCB停止信号
- //当时钟为高的时候,数据线的低到高,为SCCB停止信号
- //空闲状况下,SDA,SCL均为高电平
- void SCCB_Stop(int delaytime)
- {
- SCCB_SDA=0;
- delay_us(delaytime);
- SCCB_SCL=1;
- delay_us(delaytime);
- SCCB_SDA=1;
- delay_us(delaytime);
- }
- //SCCB,写入一个字节
- //返回值:0,成功;1,失败.
- u8 SCCB_WR_Byte(u8 dat, int delaytime)
- {
- u8 j,res;
- for(j=0;j<8;j++) //循环8次发送数据
- {
- if(dat&0x80)SCCB_SDA=1;
- else SCCB_SDA=0;
- dat<<=1;
- delay_us(delaytime);
- SCCB_SCL=1;
- delay_us(delaytime);
- SCCB_SCL=0;
- delay_us(delaytime);
- }
- delay_us(delaytime);
- SCCB_SDA=1;
- delay_us(delaytime);
- SCCB_SDA_IN(); //设置SDA为输入
- delay_us(delaytime);
- SCCB_SCL=1; //接收第九位,以判断是否发送成功
- delay_us(delaytime * 10);
- if(SCCB_READ_SDA)res=1; //SDA=1发送失败,返回1
- else res=0; //SDA=0发送成功,返回0
- SCCB_SCL=0;
- delay_us(delaytime);
- SCCB_SDA_OUT(); //设置SDA为输出
- return res;
- }
- u8 SCCB_CheckDriver(u16 DEV_ADR, int delaytime)
- {
- u8 reg;
- SCCB_Start(delaytime);
- if(SCCB_WR_Byte(DEV_ADR, delaytime) == 1)
- reg = 0;//失败返回0
- else
- reg = 1;//成功返回1
-
- SCCB_Stop(delaytime);
- return reg;
- }
复制代码
|
|