AD5245应用

2019-07-20 09:27发布


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
kbq1950361006
2019-07-20 14:51
[mw_shl_code=c,true]void I2C_Configuration(void)
{
       
        GPIO_InitTypeDef  GPIO_InitStructure;

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOC , ENABLE);

        // PA8 -- SCL; PC9 -- SDA */
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        IIC_SCL=1;
        IIC_SDA=1;
}

void IIC_Start(void)
{
        SDA_OUT();     //sda??ê?3?                    
        IIC_SCL=1;        delay_us(1,148);
        IIC_SDA=0;        delay_us(1,148);
        IIC_SCL=0;        delay_us(1,148);
}          
void IIC_Stop(void)
{
        SDA_OUT();
        IIC_SDA=0;        delay_us(1,148);
        IIC_SCL=1;         delay_us(1,148);
        IIC_SDA=1;        delay_us(1,148);       
        IIC_SCL=0;        delay_us(1,148);       
        IIC_SCL=1;
}

u8 IIC_Wait_Ack(void)
{
        u8 ucErrTime=0;
        SDA_IN();   
        delay_us(20,148);  
        IIC_SDA=1;delay_us(1,148);   
        IIC_SCL=0;delay_us(1,148);
        while(READ_SDA)
        {
                ucErrTime++;
                if(ucErrTime>250)
                {
                        IIC_Stop();
                        return 1;
                }
        }
        IIC_SCL=1;//ê±?óê?3?0           
        return 0;  
}
//2úéúACKó|′e
void IIC_Ack(void)
{
        SDA_OUT();
        IIC_SDA=0;delay_us(1,148);
        IIC_SCL=1;delay_us(1,148);
        IIC_SCL=0;delay_us(1,148);
        IIC_SDA=1;delay_us(1,148);
}
//2?2úéúACKó|′e                    
void IIC_NAck(void)
{
        IIC_SCL=0;
        SDA_OUT();
        IIC_SDA=1;
        delay_us(1,148);
        IIC_SCL=1;
        delay_us(1,148);
        IIC_SCL=0;
}                                                                              
                  
void IIC_Send_Byte(u8 txd)
{                        
    u8 t;   
        SDA_OUT();             
    IIC_SCL=0;
    for(t=0;t<8;t++)
    {              
        IIC_SDA=(txd&0x80)>>7;
        txd<<=1;           
                delay_us(1,148);
                IIC_SCL=1;
                delay_us(1,148);
                IIC_SCL=0;       
                delay_us(1,148);
    }         
}             

u8 IIC_Read_Byte(unsigned char ack)
{
        unsigned char i,receive=0;
        SDA_IN();//SDAéè???aê?è?
    for(i=0;i<8;i++ )
        {
        IIC_SCL=0;
        delay_us(20,148);
                IIC_SCL=1;
        receive<<=1;
        if(READ_SDA)receive++;   
                delay_us(20,148);
    }                                         
    if (!ack)
        IIC_NAck();//·¢?ínACK
    else
        IIC_Ack(); //·¢?íACK   
    return receive;
}

void WriteOneByte(u8 DataToWrite)
{                                                                                                                                                                                          
    IIC_Start();  //开始条件
        IIC_Send_Byte(0X58);//从机地址字节
        IIC_Wait_Ack();
        IIC_Send_Byte(0x00);//指令字节
        IIC_Wait_Ack();                                                                                                                        
        IIC_Send_Byte(DataToWrite);//数据字节                                  
        IIC_Wait_Ack();                                
    IIC_Stop();//停止条件
        delay_ms(10);         
}
[/mw_shl_code]

一周热门 更多>