AT32 SC7A20H模块驱动示例代码详解

采用IIC方式与SC7A20H模块通信

底层驱动:

void SL_SC7A20H_Driver_Init(void)
{
    uint8_t i=0;
    uint8_t id1=0;
    uint8_t id2=0;

    i2c_memory_read(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x31, 0x0F, &id1, 1, 0xFFFFFFF);
    printf("0x%X\n",id1);
    i2c_memory_read(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x31, 0x70, &id2, 1, 0xFFFFFFF);
    printf("0x%X\n",id2);

    if ((id1 != 0x11) || (id2 != 0x28))

    {

       printf("error\n");

    }

        uint8_t t1 = 0x47;
        i2c_memory_write(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x30, 0x20, &t1, 1, 0xFFFFFFF);
        //50Hz+正常模式xyz使能

        i2c_memory_write(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x30, 0x21, 0X00, 1, 0xFFFFFFF);
        //关闭滤波器,手册上面没有滤波器截止频率设置说明,开启后无法测量静止状态下的重力加            速度

        i2c_memory_write(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x30, 0x22, 0X00, 1, 0xFFFFFFF);
         //关闭中断
        uint8_t t2 = 0x88;
        i2c_memory_write(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x30, 0x23, &t2, 1, 0xFFFFFFF);
         //读取完成再更新,小端模式,、2g+正常模式,高精度模式
}

unsigned char SL_SC7A20H_Read_FIFO_Buf(signed short *x_buf,signed short *y_buf,signed short *z_buf)
{
    unsigned char  i=0;
    unsigned char  sc7a20_data[7];
    unsigned char  SL_FIFO_ACCEL_NUM;
    uint8_t t3=0x4F;

    i2c_memory_read(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x31, 0x2F,  &SL_FIFO_ACCEL_NUM, 1, 0xFFFFFFF);

    if (SL_FIFO_ACCEL_NUM & 0x40)
        SL_FIFO_ACCEL_NUM = 32;
    else
        SL_FIFO_ACCEL_NUM = SL_FIFO_ACCEL_NUM&0x1f;

    //for(i=0;i<SL_FIFO_ACCEL_NUM;i++)
    for(i=0;i<3;i++)
    {
        i2c_memory_read(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x31, 0xA8,  &sc7a20_data[1], 6, 0xFFFFFFF);

        x_buf[i] =(signed short int)(((unsigned char)sc7a20_data[2] * 256 ) + (unsigned char)sc7a20_data[1]);
        y_buf[i] =(signed short int)(((unsigned char)sc7a20_data[4] * 256 ) + (unsigned char)sc7a20_data[3]);
        z_buf[i] =(signed short int)(((unsigned char)sc7a20_data[6] * 256 ) + (unsigned char)sc7a20_data[5]);

         printf("x_buf[%d]: 0x%04X, y_buf[%d]: 0x%04X, z_buf[%d]: 0x%04X\n", i, (unsigned short)x_buf[i], i, (unsigned short)y_buf[i], i, (unsigned short)z_buf[i]);
    }

  i2c_memory_write(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x30, 0X2E, 0X00, 1, 0xFFFFFFF);
  i2c_memory_write(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x30, 0X2E, &t3, 1, 0xFFFFFFF);

  return SL_FIFO_ACCEL_NUM;
}
 

作者:@chao( ˝ᗢ̈˝ )

物联沃分享整理
物联沃-IOTWORD物联网 » AT32 SC7A20H模块驱动示例代码详解

发表回复