LIS2DH12 IIC

2019-08-13 22:19发布

本帖最后由 zxykklt 于 2017-9-29 08:24 编辑

最近研究LIS2 DH12,用IIC补充ST的驱动代码,通过方式一写可以正确将函数IIC_Read_Byte()的返回值传给指针Bufp所指的内存,但是通过方式二指针Bufp指向的位置不能被赋值,已经无助了,各位谁知道这是怎么回事???

方式一:
[mw_shl_code=c,true]status_t LIS2DH12_ACC_ReadReg(void *handle, u8_t Reg, u8_t *Bufp, u16_t len)
{
   
  //To be completed with either I2c or SPI writing function
  //i.e.: SPI_Mems_Write_Reg(Reg, Data);
  //I2Cx_Write(Bufp, LSM6DS3H_ACC_GYRO_I2C_ADDRESS, Reg, len);    //[Example]
        u8_t Data;
        IIC_Start();
        IIC_Send_Byte(0x30);
        IIC_Wait_Ack();
        IIC_Send_Byte(Reg);
        IIC_Wait_Ack();
        IIC_Start();
        IIC_Send_Byte(0x31);
        IIC_Wait_Ack();
        Data=IIC_Read_Byte(0);
//        *Bufp=IIC_Read_Byte(0);
        IIC_Stop();
        Bufp=&Data;
  return MEMS_SUCCESS;
}[/mw_shl_code]



方式二:
[mw_shl_code=c,true]status_t LIS2DH12_ACC_ReadReg(void *handle, u8_t Reg, u8_t *Bufp, u16_t len)
{
   
  //To be completed with either I2c or SPI writing function
  //i.e.: SPI_Mems_Write_Reg(Reg, Data);
  //I2Cx_Write(Bufp, LSM6DS3H_ACC_GYRO_I2C_ADDRESS, Reg, len);    //[Example]
//        u8_t Data;
        IIC_Start();
        IIC_Send_Byte(0x30);
        IIC_Wait_Ack();
        IIC_Send_Byte(Reg);
        IIC_Wait_Ack();
        IIC_Start();
        IIC_Send_Byte(0x31);
        IIC_Wait_Ack();
//        Data=IIC_Read_Byte(0);
        *Bufp=IIC_Read_Byte(0);
        IIC_Stop();
//        Bufp=&Data;
  return MEMS_SUCCESS;
}[/mw_shl_code]



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
zxykklt
1楼-- · 2019-08-14 22:43
操作系统 发表于 2017-9-29 09:02
你的指针指向的地址为0,还把这个指针做参数传递出去了.不死机就是好的了.指针应该指向一个正确的地址.地址 ...

楼主,确实我理解不对  像这样写可以了    这样直接在主函数调试可以     但是像下面几楼说的那样调用函数  就不能了  能帮忙看看吗   2017-09-29_9-37-06.png
meimengxing2014
2楼-- · 2019-08-15 04:03
zxykklt 发表于 2017-9-29 09:25
meimengxing2014 发表于 2017-9-29 09:12
int main(void)
{

0x70不对么?不是你要读取的ID?
zxykklt
3楼-- · 2019-08-15 05:52
meimengxing2014 发表于 2017-9-29 09:44
0x70不对么?不是你要读取的ID?

0x33 才是  运行到函数里面得到的值是0x33
但是主函数调用后  没有修改ID的值  一直保持0x70不变 0x70也不知道是哪里来的
meimengxing2014
4楼-- · 2019-08-15 07:10
int main(void)
{
    u8_t ID=0;   //初始化一下,赋值为0
zxykklt
5楼-- · 2019-08-15 09:55
 精彩回答 2  元偷偷看……
meimengxing2014
6楼-- · 2019-08-15 11:00
zxykklt 发表于 2017-9-29 09:57
初始化了  这样就变成一直是0不变了   为什么调用函数不能修改ID的值啊

我这样完全没有问题

一周热门 更多>