#include “IIC.h”
#include “sys.h”
#include “delay.h”
/*******************************************************************************
*@function IIC_Init IIC引脚初始化
*@param none
*@retval none
*
*******************************************************************************
*@attention
* SDA对应的引脚为输出引脚,配置时应该记得进行输出速率的配置
*/
void IIC_Init(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //先使能外设IO PORTB时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; // 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIO
GPIO_SetBits(GPIOB, GPIO_Pin_8 | GPIO_Pin_9); //PB8,PB9 输出高
}
/*******************************************************************************
*@function IIC_Start 产生IIC起始信号
*@param none
*@retval none
*
*******************************************************************************
*@attention
*
*/
int IIC_Start(void){
SDA_OUT();//sda切换为输出模式
IIC_SDA=1;
if(!READ_SDA)
return 0;
IIC_SCL=1;
delay_us(5);
IIC_SDA=0;//START:when CLK is high,DATA change form high to low
if(READ_SDA)
return 0;
delay_us(5);
IIC_SCL=0;//钳住I2C总线,准备发送或接收数据
return 1;
}
/*******************************************************************************
*@function IIC_Stop 产生IIC停止信号
*@param none
*@retval none
*
*******************************************************************************
*@attention
*
*/
void IIC_Stop(void){
SDA_OUT();//sda切换为输出模式
IIC_SCL=0;
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
delay_us(5);
IIC_SCL=1;
IIC_SDA=1;//发送I2C总线结束信号
delay_us(5);
}
/*******************************************************************************
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !