分页: 5 / 8

Re: 请教LSM6DS33的应用问题

发表于 : 2021年 9月 6日 21:10
zl_cq
请教:
1、连接LSM6DS33成功后,试着读取“WHO_AM_I"寄存器内容。读取的结果如图中所示,是”i“。为什么不是【105】或者说0x69呢?
2、I2C.deinit()和I2C.stop()的用法有什么不同?
3、每次试验结束时,是不是都要用I2C.deinit()或者I2C.stop()关掉I2C?
读寄存器结果-1.png
读寄存器结果-1.png (23.55 KiB) 查看 2202 次
 
 

Re: 请教LSM6DS33的应用问题

发表于 : 2021年 9月 7日 10:00
shaoziyang
安装ST的dfuse 软件后,驱动就在软件的安装目录下:

C:\Program Files (x86)\STMicroelectronics\Software\DfuSe v3.0.6\Bin\Driver\

Re: 请教LSM6DS33的应用问题

发表于 : 2021年 9月 7日 10:02
shaoziyang
如果安装的 STM32CubeProgrammer,驱动在:

C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\Drivers\DFU_Driver\

这个驱动和 Dfuse 那个不通用,只能选择一个。

Re: 请教LSM6DS33的应用问题

发表于 : 2021年 9月 7日 17:57
zl_cq
请教:
1、通过“硬件”连接LSM6DS33(即通过pyboardCN V2板子上的I2C(1)来连接LSM6DS33)行不行?直接把LSM6DS33的SDA接到pyboardCN V2板子的x9(PB6)上,把LSM6DS33的SCL接到pyboardCN V2板子的x10(PB7)上,LSM6DS33上的电源、地线、电容接法不变(与用软件I2C连接时一样)行不行?
2、资料上介绍说I2C可以读取的从设备(slave)地址范围是0x08——0x77,这是不是说一个I2C总线上可以连接111个从设备(slave)?
3、如果一个pyboardCN V2板子的I2C总线上连接若干个(例如10个)LSM6DS33,I2C搜索(scan())从设备(slave)地址后,会怎样显示?
4、两个pyboardCN V2板子可以通过I2C来连接不?如果可以,该怎么连接?

Re: 请教LSM6DS33的应用问题

发表于 : 2021年 9月 7日 18:25
shaoziyang
1.硬件I2C和软件I2C都可以,没有问题的。

2.I2C总线可以挂接多个设备,但是设备之间地址不能相同,因此限制了同一类型芯片数量。此外还需要考虑多个器件对I2C总线的影响(寄生电容、驱动能力),需要适当调整上拉电阻大小。

3.目前micropython没有直接支持 I2C/SPI 从设备,对大部分芯片不能使用这些功能。对于STM32,可以这么用:

代码: 全选

**从设备端:**
```python
from pyb import I2C

i2c=I2C(2)
i2c.init(I2C.SLAVE, addr = 0x40)

while 1:
    try:
        data = i2c.recv(4)
    except OSError as e:
        pass
    except KeyboardInterrupt:
        break
    else:
        print("RECV: %r" % data)
```



**主设备端:**
```python
from pyb import I2C

i2c=I2C(1)
i2c.init(I2C.MASTER)

i2c.send('1234', 0x40)
i2c.send('abcd', 0x40)
```
 

Re: 请教LSM6DS33的应用问题

发表于 : 2021年 9月 8日 16:47
zl_cq
读寄存器结果-2.png
读寄存器结果-2.png (22.71 KiB) 查看 2177 次
 我终于读到“WHO_AM_I”寄存器的值了:
 
 

Re: 请教LSM6DS33的应用问题

发表于 : 2021年 9月 8日 23:10
shaoziyang
链接成功就好办了,剩下的就是设置和读取寄存器,改变工作参数。

Re: 请教LSM6DS33的应用问题

发表于 : 2021年 9月 15日 17:44
zl_cq
疑问语句-1.png
疑问语句-1.png (51.28 KiB) 查看 2124 次
疑问语句-2.png
疑问语句-2.png (4.45 KiB) 查看 2124 次
 
 在上图中,语句:if self.getreg(15)!=0x69   中的 (15) 是什么?

在第二个图中,第86行语句怎么理解? 
 
 

Re: 请教LSM6DS33的应用问题

发表于 : 2021年 9月 15日 18:13
shaoziyang
15就是0x0F,who am I 寄存器,判断芯片id。

86行是先读取寄存器,然后清除mask代表的位,在设置某些位,其实就是设置寄存器的一个或多个bit。

Re: 请教LSM6DS33的应用问题

发表于 : 2021年 10月 22日 16:51
zl_cq
类的初始化(试验).py.png
类的初始化(试验).py.png (64.42 KiB) 查看 1971 次