AD5245应用

2019-07-20 09:27发布


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
kbq1950361006
1楼-- · 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]
kbq1950361006
2楼-- · 2019-07-20 17:35
先放个资料压压惊
kbq1950361006
3楼-- · 2019-07-20 19:34
 精彩回答 2  元偷偷看……
kbq1950361006
4楼-- · 2019-07-20 23:56
[mw_shl_code=c,true]void I2C_Configuration(void);


//IO·??òéè??
#define SDA_IN()  {GPIOC->MODER&=~(3<<(9*2));GPIOC->MODER|=0<<9*2;}        //PB9ê?è??£ê?
#define SDA_OUT() {GPIOC->MODER&=~(3<<(9*2));GPIOC->MODER|=1<<9*2;} //PB9ê?3??£ê?
//IO2ù×÷oˉêy         
#define IIC_SCL    PAout(8) //SCL
#define IIC_SDA    PCout(9) //SDA         
#define READ_SDA   PCin(9)  //ê?è?SDA

//IIC?ùóD2ù×÷oˉêy
                         
void IIC_Start(void);                                //·¢?íIIC?aê?D?o?
void IIC_Stop(void);                                  //·¢?íIICí£?1D?o?
void IIC_Send_Byte(u8 txd);                        //IIC·¢?íò???×??ú
u8 IIC_Read_Byte(unsigned char ack);//IIC?áè?ò???×??ú
u8 IIC_Wait_Ack(void);                                 //IICμè′yACKD?o?
void IIC_Ack(void);                                        //IIC·¢?íACKD?o?
void IIC_NAck(void);                                //IIC2?·¢?íACKD?o?



void WriteOneByte(u8 DataToWrite);
[/mw_shl_code]
kbq1950361006
5楼-- · 2019-07-21 01:10
现在实际应用遇到一个问题,调好之后不一会电阻又会变成默认值,这是怎么回事
kbq1950361006
6楼-- · 2019-07-21 02:29
 精彩回答 2  元偷偷看……

一周热门 更多>