LSM6DSL支持SPI和I2C通信,评估板使用I2C接口,引脚顺序是SCL、SDA、VDD、INT1、INT2
正好接在Arduion的I2C上,需要从CN8的PIN7处引一个3.3V到CN7的PIN6上
官网找到能用STM32上的LSM6DSL的驱动en.x-cube-mems1、en.x-cube-mems-xt1_firmware和C-Driver-MEMS
不过里边都不支持NUCLEO-STM32LR45ZI的板子
直接在原有的项目里改需要保留原有的文件结构,用起来不是很方便
或者使用STM32CubeMX生成新的项目,再把LSM6DSL相关的件移植过来
不管使用哪种方法根据以往的经验做起来都不是一件容易的事
使用STM32CubeMX生成的项目更灵活一起,也方便以后修改,最后决定使用这种方法
先在STM32CubeMX里新建一个项目,选择NUCLEO-L4R5ZI板子
找到I2C1,在下接列表里选择I2C
将PB8、PB9的功能设置为I2C1_SCL和I2C1_SDA
PA5和PA6的功能设置成GPIO_EXTx用来接收LSM6DSL的中断
时钟改成MSI,120M(默认选择了HSE,而HSE并没有外部晶振)
将PA5和PA6引脚的别名改成LSM6DSL_INTx
将EXIT LINE[9:5] interrupts打钩
设置UART参数
点Generate Code生成项目并用对应的IDE打开项目,到这步已经完成单片机设置的大部分工作
为了验证配置是否正确和硬件是否正常可以在USER CODE BEGIN 2里加入下边代码
0x0f是who_am_i的地址
0xd4是LSM6DSL的器件ID(当SAD为LOW时)
/* USER CODE BEGIN 2 */
//读取who am i
static uint8_t who_am_i;
HAL_I2C_Mem_Read(&hi2c1,0xd4,0x0f,I2C_MEMADD_SIZE_8BIT,&who_am_i,1,0x100);
HAL_UART_Transmit(&hlpuart1,&who_am_i,1,500);
/* USER CODE END 2 */
打开串口助手,如果收到的数据为6A说明单片机和LSM6DSL通信成功