IIC 通信数据接收发送以及时序图

本文详细介绍了IIC通信的时序,并提供了C语言实现IIC通信的完整代码,包括起始和停止信号、发送应答、数据发送与接收等功能。通过这些函数,可以实现对AT24CXX系列E2PROM的读写操作。
摘要由CSDN通过智能技术生成

时序图: 起始,应答,终止

时序图: 数据发送

时序图:完整数据

 具体代码:

#include "iic.h"

/*************************
函数名:IIC_Port_Init
函数功能:IIC管脚初始化
返回值:void
参数:void
函数说明:
AT24C04_SCK  --- PA8 --- 通用推挽输出
AT24C04_SDA  --- PC9 --- 通用开漏输出    输出  也  SDA输出高电平切换为输入
**************************/

void IIC_Port_Init(void)
{
    
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//打开GPIOA时钟
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);//打开GPIOC时钟
    /*IO初始化*/
    GPIO_InitTypeDef GPIO_InitStruct={0};//定义结构体变量名
    //PA8  ---  SCL
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//配置为输出模式
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;//配置GPIOA第8号管脚
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//IO速度为50Mhz
    GPIO_Init(GPIOA,&GPIO_InitStruct);
    
    //PC9  ---  SDA
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//配置为输出模式
    GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;//开漏输出
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;//配置GPIOC第9号管脚
    GPIO_Init(GPIOC,&GPIO_InitStruct);
    
}

/*************************
函数名:IIC_Start
函数功能:IIC起始信号
返回值:void
参数:u8 nus
函数说明:
**************************/

void IIC_Start(u8 nus)
{

    //起始信号初始化  SDA与SCL都为高电平
    IIC_SDA_H;    //数据线
    IIC_SCL_H;      //时钟线
    delay_us(nus);//保持一段时间
    IIC_SDA_L;//拉低数据线
    delay_us(nus);//保持一段时间
    
}


/*************************
函数名:IIC_Stop
函数功能:IIC停止信号
返回值:void
参数:u8 nus     延时时间
函数说明:
**************************/
void IIC_Stop(u8 nus)
{    
    IIC_SDA_L;
    IIC_SCL_H;
    delay_us(nus);
    IIC_SDA_H;//拉高数据线
    delay_us(nus);
}


/*************************
函数名:IIC_SendAck
函数功能:IIC发送1bit应答位  
返回值:void
参数:
u8 ack    0:应答      1:非应答
u8 nus     延时时间
函数说明:
时钟线低电平,发送数据
时钟线高电平,接收数据
**************************/

void IIC_SendAck(u8 ack,u8 nus)
{
    
    IIC_SCL_L;//拉低时钟线,准备发送数据
    delay_us(nus);//电平切换时间
    if(ack)
    {
        IIC_SDA_H;//发送非应答(数据1)
    }
    else
    {
        IIC_SDA_L;//发送应答(数据0)    
    }
    IIC_SCL_H;//拉高时钟线,准备接收数据
    delay_us(nus);
    <

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值