旧乡故客
发表于: 2024-10-22 21:17:30 | 显示全部楼层

在本篇帖子中,我们将使用NUCLEO-G070开发板通过SPI方式读取IIM-42352传感器的数据。该传感器是一个三轴加速度计,可输出X、Y和Z三个方向的加速度值,非常适用于工业应用,可以轻松、稳定和准确地进行惯性和振动测量。


在本文中,我们将学习如何设置和使用IIM42352传感器,以及使用STM32CubeMX工具进行配置,TDK官方驱动程序的使用方法等。


所需的组件

●  NUCLEO-G070开发板

●  YBX-IIM42352传感器模块

●  连接跳线

●  STM32CubeMX工具

●  友善串口调试助手


YBX-IIM42352传感器模块简介

YBX-IIM42352模块采用TDK公司的最新一代高性能三轴MEMS加速度传感器IIM-42352。该传感器包括多种特性,例如宽而平坦的频率响应范围、低噪声和高达32kHz的输出数据速率,因此非常适用于工业应用,可以轻松、稳定和准确地进行惯性和振动测量。


IIM-42352传感器输出X、Y和Z轴加速度计,具有±2g、±4g、±8g和±16g可编程满量程范围。传感器具有低噪声 (70μg/√Hz) 和低功耗(0.3mA),并采用小型2.5 × 3 × 0.91毫米(14-LGA)封装。该模块支持SPI和I2C接口进行系统集成,可以快速实现与Arduino和STM32等控制器直接相连。该模块板载一颗电源芯片,支持3.3-5V供电。

YBX-IIM42352.png

硬件连接

YBX-IIM42352传感器模块连接到NUCLEO-G070RB的SPI1接口,对应的引脚分别是PA5(SCK)、PA6(MISO)和PA7(MOSI),片选引脚CS连接到PB2。模块的VCC连接到+5V引脚,GND引脚连接到NUCLEO-G070RB的任意GND引脚。

YBX-IIM42352模块通过SPI接口与STM32 Nucleo的硬件连接.jpg

STM32CubeMX工具配置

STM32CubeMX工具是ST提供的一个免费的软件配置工具,它提供了一些工程模板,可以快速创建基于MCU、开发板以及示例程序的工程。使用该工具,我们可以快速新建一个基于NUCLEO-G070开发板的工程。


首先打开STM32CubeMX工具,点击ACCESS TO BOARD SELECTOR,在弹出的界面中找到NUCLEO-G070RB开发板,然后点击右上角的Start Project。

new project.png

在Pinout布局中,已经初始化好RCC、Debug、UART2、LED等外设。

我们使用SPI1外设连接传感器模块,设置SPI1的模式为Full Duplex Master,将A5、PA6和PA7分别设为SPI1_SCK、SPI1_MISO和SPI1_MOSI。然后将PB2定义为CS输出。然后根据手册中的SPI时序图,设置SPI通讯的参数。

注意,SPI的时钟频率不能超过12MHz

SPI1.png


最后,生成基于Keil MDK的工程文件。


驱动文件

TDK提供了IIM-42352的驱动文件和示例代码,该文件可以在GitHub下载,下载地址:https://github.com/InvenSenseInc/public.mcu.iim42352/tree/master


代码

打开工程文件,将下载的驱动文件添加工程文件中。本文的代码基于示例程序example-raw-data。移植完成后,需要自定义编写两个SPI函数:inv_io_hal_read_reg和inv_io_hal_write_reg。以下是代码:

  1. //low-levevl IO access function
  2. int inv_io_hal_read_reg(struct inv_iim423xx_serif * serif, uint8_t reg, uint8_t * rbuffer, uint32_t rlen)
  3. {
  4.         switch (serif->serif_type) {
  5.                 case IIM423XX_AUX1_SPI3:
  6.                 case IIM423XX_AUX1_SPI4:
  7.                 case IIM423XX_AUX2_SPI3:
  8.                 case IIM423XX_UI_SPI4:
  9.                         return iim423xx_spi_read(reg, rbuffer, rlen, 0);
  10. //                        return inv_spi_master_read_register(INV_SPI_AP, reg, rlen, rbuffer);
  11. //                case IIM423XX_UI_I2C:
  12. //                        while(inv_i2c_master_read_register(ICM_I2C_ADDR, reg, rlen, rbuffer)) {
  13. //                        inv_delay_us(32000); // Loop in case of I2C timeout
  14. //                }
  15. //                return 0;
  16.         default:
  17.                 return -1;
  18. }
  19. }
  20. //low-levevl IO access function
  21. int inv_io_hal_write_reg(struct inv_iim423xx_serif * serif, uint8_t reg, const uint8_t * wbuffer, uint32_t wlen)
  22. {
  23. int rc;

  24. switch (serif->serif_type) {
  25.         case IIM423XX_AUX1_SPI3:
  26.         case IIM423XX_AUX1_SPI4:
  27.         case IIM423XX_AUX2_SPI3:
  28.         case IIM423XX_UI_SPI4:
  29.                 return iim423xx_spi_write(reg, wbuffer, wlen, 0);
  30. //                for(uint32_t i=0; i<wlen; i++) {
  31. //                        rc = inv_spi_master_write_register(INV_SPI_AP, reg+i, 1, &wbuffer[i]);
  32. //                        if(rc)
  33. //                                return rc;
  34. //                }
  35. //                return 0;
  36. //        case IIM423XX_UI_I2C:
  37. //                while(inv_i2c_master_write_register(ICM_I2C_ADDR, reg, wlen, wbuffer)) {
  38. //                        inv_delay_us(32000); // Loop in case of I2C timeout
  39. //                }
  40. //                return 0;
  41.         default:
  42.                 return -1;
  43. }
  44. }
复制代码

输出结果

将代码上传至开发板,打开串口工具,设置波特率115200,在串口中应该能显示数据:

串口输出.jpg


跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 13 | 回复: 13



手机版|

GMT+8, 2024-12-12 01:03 , Processed in 0.044161 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表