stm32l4r5测试LSM6DSL的STMems_Standard_C_drivers
前两天测试LSM6DSL传感器时选择en.x-cube-mems-xt1_firmware例程因为看中里边的各种演示,花了很多时间被层层“套路”最后只完成读取WHO AM I的功能
在测试其它功能时DRDY中断不触发,直接读取数据也不正常
没办法了使用STMems_Standard_C_drivers驱动验证一下评估板是不是存在硬件问题
想不到这个库非常好用,简单改几下代码就能应用到新项目上
读起来也非常直观,不会被“套路”
结果证明评估板硬件正常
给这个库点11个赞,以后再不会因为移植传感器驱动头疼了
因为STMems_Standard_C_drivers里的演示功能简单(配置好后反复读状态寄存器和数据寄存器)
排除硬件问题接下来就可以测试en.x-cube-mems-xt1_firmware里的功能了
附上我的STM32L4R5的LSM6DSL工程
老哥,利用cubeMX驱动LSM6DSL的具体过程是什么?能讲解一下吗非常感谢 zfw152666 发表于 2018-10-30 15:39
老哥,利用cubeMX驱动LSM6DSL的具体过程是什么?能讲解一下吗非常感谢
cubemx只要把对应的SPI或者I2C驱动调通,把这个驱动包的文件引入,修改read_data_simple.c文件中的platform_write和platform_read中的SPI或I2C驱动就可以了 正在学习这个,想知道I2C驱动如何修改,cubemx duguyining 发表于 2019-4-23 16:44
正在学习这个,想知道I2C驱动如何修改,cubemx
stm32cubemx 的I2C驱动你会设置吗? littleshrimp 发表于 2019-4-23 17:25
stm32cubemx 的I2C驱动你会设置吗?
会啊,但是应该不是单纯的修改plat_read和plat_write函数就可以显示出数值吧
duguyining 发表于 2019-4-23 17:47
会啊,但是应该不是单纯的修改plat_read和plat_write函数就可以显示出数值吧
下边是官方的例程,把它移到你用cubemx生成的工程里,把read_data_simple.c里边的几个函数添加你的main.c文件里就可以使用了
记得在main函数里调用example_main函数,或者将其修改为main
具体可以参考我贴子里的stm32l4r5的例程
请问楼主LSM9DS1的官方例程怎么修改,用这款STM32芯片 duguyining 发表于 2019-4-26 12:12
请问楼主LSM9DS1的官方例程怎么修改,用这款STM32芯片
<p>到这里下载LSM9DS1的代码,然后添加到工程,替换LSM9DS1的相关代码即可</p>
<p>https://github.com/STMicroelectronics/STMems_Standard_C_drivers</p>
下载了,我测试了一下WHO AM I寄存器 读出来的值是\0 检查一下通信是否正常 看看波形对不 无法查看波形,但是我简单的用以下代码测试了一下
static uint8_t whoami;
HAL_I2C_Mem_Read(&hi2c1, 0xD5, WHO_AM_I_XG, I2C_MEMADD_SIZE_8BIT, &whoami, 1, 1000);
HAL_UART_Transmit(&hlpuart1, &whoami, 1, 1000);
串口显示出来的数据是0 duguyining 发表于 2019-4-26 15:17
无法查看波形,但是我简单的用以下代码测试了一下
static uint8_t whoami;
HAL_I2C_Mem_Read(&hi2c1, ...
<p>你的器件地址好像没改</p>
<p>下边是LSM9DS1的地址</p>
<p>/** I2C Device Address 8 bit format if SA0=0 -> 0xD5 if SA0=1 -> 0xD7 **/<br />
#define LSM9DS1_IMU_I2C_ADD_L 0xD5U<br />
#define LSM9DS1_IMU_I2C_ADD_H 0xD7U<br />
<br />
<br />
/** I2C Device Address 8 bit format if SA0=0 -> 0x3D if SA0=1 -> 0x39 **/<br />
#define LSM9DS1_MAG_I2C_ADD_L 0x3DU<br />
#define LSM9DS1_MAG_I2C_ADD_H 0x39U</p>
littleshrimp 发表于 2019-4-26 15:55
你的器件地址好像没改
下边是LSM9DS1的地址
/** I2C Device Address 8 bit format if SA0=0 -> 0 ...
static uint8_t who_am_i;
if (HAL_I2C_Mem_Read(&hi2c1, LSM9DS1_IMU_I2C_ADD_H, LSM9DS1_WHO_AM_I , I2C_MEMADD_SIZE_8BIT, &who_am_i, 1,0x100 != HAL_OK))
printf("Failed!\n");
改成了这个输出为Failed
RE: stm32l4r5测试LSM6DSL的STMems_Standard_C_drivers
<p>你再检查一下代码看看哪的问题,这是我刚测试的</p><p><img alt="" src="https://bbs.eeworld.com.cn/forum.php?mod=image&aid=411294&size=300x300&key=0d5384bb6d1a299d&nocache=yes&type=fixnone" /></p>
<p> </p>
<p><img alt="" src="https://bbs.eeworld.com.cn/forum.php?mod=image&aid=411293&size=300x300&key=edf58b407273a39f&nocache=yes&type=fixnone" /></p>
<p> </p>
<p><img alt="" src="https://bbs.eeworld.com.cn/forum.php?mod=image&aid=411295&size=300x300&key=0d80a4a669e2fa15&nocache=yes&type=fixnone" /></p>
duguyining 发表于 2019-4-26 17:14
static uint8_t who_am_i;
if (HAL_I2C_Mem_Read(&hi2c1, LSM9DS1_IMU_I2C_ADD_H, LSM9DS1_WHO_AM_I , ...
<p>回复不能插图片,请看楼上的回贴</p>
我用的nucleo-iks01a2开发板,接的SB7,所以LSM6DSL的地址是D6,
但是reg.h里面定义的LSM6DSL_I2C_ADD_L是0xD5,LSM6DSL_I2C_ADD_H是0xD7,我把0xD5改成0xD6就可以读出来了。
还有一个问题想请教楼主,他这个读出来的加速度和转速单位是什么? 禅师 发表于 2019-5-31 08:21
我用的nucleo-iks01a2开发板,接的SB7,所以LSM6DSL的地址是D6,
但是reg.h里面定义的LSM6DSL_I2C_ADD_L是0 ...
读出来的数据需要做转换 和你设置的量程有关 官方库里加速度是mg,陀螺仪是mdps <p>楼主您好,请问lsm6dsl初始化的时候寄存器应该怎样配置呀,还有就是,正常读出来的数据应该是多少呀?我测试的是静止不动时陀螺仪也就是三个角速度的值是0,但是加速度z轴不是g,量程为4g的时候,z轴的加速度就是4g,而且x,y轴的加速度也不是0</p>
sylaigym 发表于 2019-7-22 23:30
楼主您好,请问lsm6dsl初始化的时候寄存器应该怎样配置呀,还有就是,正常读出来的数据应该是多少呀?我测 ...
<p>配置可以参照代码,或者看官方的应用笔记。</p>
<p>从你的数据来看应该是错误的,还对比一下who am i寄存器确定通信没有问题</p>
页:
[1]
2