发布时间:2026/9/2 8:24:19
STM32C5开发IIS3DWB10IS(1)----SPI获取震动计数据 STM32C5开发IIS3DWB10IS.1--SPI获取震动计数据概述视频教程样品申请源码下载硬件准备参考程序所有功能串口配置通信模式管脚定义SPI通信模式速率SPI配置CS设置生成项目导入STM32CubeIDE设置工程编码添加头文件printf 重定向参考程序CMake设置头文件设置初始换管脚获取ID配置工作参数轮询读取数据平放与反放测试概述IIS3DWB10IS采用系统级封装配备3轴数字振动传感器在超宽平坦频率范围内保持低噪声。这款器件具有宽带宽、低噪声、高稳定性和可重复的灵敏度能在扩展温度范围最高125°C下工作且量程加速度可达±200 g因此特别适合各种工业应用包括在最恶劣和要求最严苛的环境中的振动监测。IIS3DWB10IS具有可选的±50/±100/±200 g量程加速度范围能够测量带宽超过10 kHz的加速度。该器件集成了一个2048槽位的先进先出 (FIFO) 缓冲区用于批量处理来自集成加速度计、温度传感器或ISPU的数据同时避免数据丢失并减少主处理器的干预。IIS3DWB10IS内嵌意法半导体的一款新型处理器件ISPU智能传感器处理单元支持依赖传感器数据的实时应用。ISPU是一个超低功耗、高性能的可编程内核能够执行实时信号处理和边缘AI算法。ISPU支持C语言编程并可依托意法半导体及第三方提供的库、工具/IDE构成的生态系统。其针对算法实时执行而优化的超低功耗硬件电路是面向工业5.0的任何无线传感器节点的一项先进功能。意法半导体的MEMS传感器模块系列采用稳健成熟的制造工艺已经在微机械加工的加速度计和陀螺仪产品中广泛应用可满足汽车、工业和消费类市场的需求。传感元件采用意法半导体专门的微型机械加工工艺制造而内嵌的IC接口采用CMOS技术开发。IIS3DWB10IS具有自检功能可用于检查传感器在最终应用中的功能。IIS3DWB10IS采用16引脚塑料焊盘栅格阵列 (LGA) 封装可确保在扩展温度范围-40 °C至125 °C内正常工作。需要样片的可以加qun申请925643491 / 615061293 。视频教程https://www.bilibili.com/video/BV1C9ut6GEq3/样品申请https://www.wjx.top/vm/OhcKxJk.aspx#源码下载https://download.csdn.net/download/qq_24312945/93287432硬件准备首先需要准备一个开发板这里我准备的是自己绘制的开发板需要的可以进行申请。主控为STM32C542CC振动传感器为IIS3DWB10IS。参考程序https://github.com/CoreMaker-lab/STM32C542CC_IIS3DWB10IShttps://gitee.com/CoreMaker/STM32C542CC_IIS3DWB10IS所有功能● 3轴振动传感器带数字输出● 用户可选量程±50/±100/±200 g● 超宽平坦频率响应范围从DC到10 kHz以上±3 dB点● 均衡与滤波可确保平坦且无混叠的频率响应● 超低噪声密度低至35 µg/√Hz● 嵌入式ISPU智能传感器处理单元超低功耗、高性能的可编程内核用于执行实时信号处理和边缘AI算法● 灵敏度在不同温度条件和机械冲击下高度稳定● 支持精确的外部时钟输入以实现传感器阵列的精确同步并提高ODR稳定性● 更宽的温度范围-40 °C至125 °C● 多种工作模式○ 连续模式 (CM)40 / 80 kHz ODR 10 kHz带宽2.5 / 5 / 10 / 20 kHz ODR ODR/2带宽○ 突发模式 (BM)可在CM模式下配置由ISPU、FIFO、内部定时器或外部条件触发的采集突发● 低功耗单轴激活时为1.9 mA三轴全部激活时为4.1 mA● SPI串行接口/MIPI I3C®串行接口● 嵌入式FIFO2048个槽位支持加速度计、温度传感器和ISPU数据的可配置批处理● 嵌入式温度传感器● 嵌入式自检功能● 电源电压1.7 V至3.6 V● 紧凑型封装LGA 4.5 x 4.5 x 1.5 mm 16引线采用可湿性侧面● 符合ECOPACK和RoHS标准串口配置查看原理图PA9和PA10设置为开发板的串口。在左侧 Peripherals 中选择 Connectivity → USART1Mode 选择 Async表示配置为异步串口模式Function used by the component 显示为 UART说明 USART1 在异步模式下使用 UART HAL 驱动串口参数配置为115200 波特率、8 位数据位、无校验、1 位停止位、收发模式GPIO TxUSART1_TX 选择 PA9GPIO RxUSART1_RX 选择 PA10PA9 / PA10 均配置为 Alternate 复用功能模式Pull 选择 No pull-up and no pull-downOutput type 选择 Push pullSpeed 选择 Low通信模式对于IIS3DWB10IS可以使用SPI或者IIC进行通讯。在CS管脚为0的时候为SPI模式。本文使用的板子原理图如下所示。管脚定义SPI通信模式静态地址为 0x1A / 0x1B取决于 SDO 引脚状态。速率该模块支持的SPI速度最快为25MHz。SPI配置IIS3DWB10IS 通过 SPI 接口与 STM32C542CCT6 进行通信。传感器的 SPC、SDI、SDO 和 CS 分别连接到 STM32C542CCT6 的 PA5、PA7、PA6 和 PB0对应 SPI_SCK、SPI_MOSI、SPI_MISO 和片选信号。原理图通过 0 Ω 电阻实现 SPI 与 I3C 接口切换。使用 SPI 时应焊接 R17、R20 和 R22不焊接 R16、R19 和 R21。在 STM32CubeMX2 中配置 STM32C542CCT6 的 SPI1 外设用于与 IIS3DWB10IS 进行通信。打开外设配置界面进入 Connectivity 分类。选择并使能 SPI1 外设。将 SPI1 工作模式设置为 SPI。在 Main features 中设置以下参数工作模式Master通信方向Full-duplex数据位宽8-bit时钟源APB2 Peripheral Clock时钟源频率144 MHz时钟分频8SPI通信速率18 Mbit/s时钟极性Low时钟相位First edge数据顺序MSB firstNSS片选Deactivated数据格式Motorola其中时钟极性为 Low、时钟相位为 First edge对应 SPI Mode 0。IIS3DWB10IS 支持 SPI Mode 0 和 Mode 3因此该配置可以正常使用。SPI1 的硬件 NSS 功能关闭传感器的 CS 引脚由 PB0 配置为普通 GPIO通过软件控制其高低电平。根据硬件连接将 SPI1 的时钟、数据输入和数据输出分别分配到 PA5、PA6 和 PA7。其中PA5 用于输出 SPI 时钟PA7 用于 STM32C542CCT6 向 IIS3DWB10IS 发送数据PA6 用于接收 IIS3DWB10IS 返回的数据。CS设置IIS3DWB10IS 通过 SPI 接口与 STM32C542CCT6 进行通信。传感器的 CS 连接到 STM32C542CCT6 的PB0对应片选信号。由于 SPI1 的硬件 NSS 功能未启用因此使用 PB0 作为普通 GPIO 控制 IIS3DWB10IS 的片选信号。在 Pinout 页面选择 PB0并将其配置为 GPIO 输出模式同时添加信号标签 CS便于后续程序调用。生成项目修改配置后左下角会提示 Click to save需要先保存当前工程配置点击左侧 Project settings进入工程生成设置页面在 IDE Project Generation 中选择工程格式和工具链本例选择 CMake GCC然后点击 Generate IDE project 生成工程导入STM32CubeIDE打开 STM32CubeIDE点击菜单栏 File选择 Import…准备导入 STM32CubeMX2 生成的 CMake 工程在 Import 窗口中展开 Import STM32 Project选择 STM32 CMake Project点击 Next进入 CMake 工程路径选择页面Project name填写导入到 STM32CubeIDE 中显示的工程名称Source directory选择 STM32CubeMX2 生成的 CMake 工程目录点击 Next继续完成工程导入Toolchain选择 MCU ARM GCC表示使用 ARM GCC 工具链进行编译MCU确认芯片型号为 STM32C542CCTx与前面 STM32CubeMX2 中选择的 MCU 保持一致CPU/Core确认内核为 Cortex-M33Core 为 0点击 Finish完成 CMake 工程导入设置工程编码在 Project Explorer 中选中当前工程点击菜单栏 Project选择 Properties进入工程属性设置在工程属性中选择 ResourceText file encoding 选择 Other编码格式输入 GBK点击 Apply and Close 保存设置添加头文件在 main.c 中添加头文件#includemx_usart1.h#includestdio.h#includestring.hprintf 重定向为了让 printf() 输出到 USART1需要重写 _write() 函数。GCC 工程中printf() 底层会调用 _write() 输出字符因此只需要在 _write() 中调用 HAL_UART_Transmit()就可以把 printf() 的内容通过串口发送出去。int_write(intfile,char*ptr,intlen){hal_uart_handle_t*huart1mx_usart1_uart_gethandle();if(huart1!NULL){HAL_UART_Transmit(huart1,ptr,len,1000);}returnlen;}参考程序https://github.com/STMicroelectronics/iis3dwb10is-pid添加对应驱动程序。CMake设置把iis3dwb10is_reg.c 加入 CMake 编译 。#Stubs to be able to add compiler flag overrides,e.g.-Ostarget_sources(${CMAKE_PROJECT_NAME}PRIVATE#Add additional source files hereiis3dwb10is_reg.c)printf 输出浮点数需要额外开启 float printf 支持。CMake 官方说明 target_link_options() 就是给可执行目标添加 linker options 的命令。target_link_options(${CMAKE_PROJECT_NAME}PUBLIC#Add additional linker flags here-u _printf_float)头文件设置添加头文件。#includeiis3dwb10is_reg.h初始换管脚IIS3DWB10IS 的 SPI 片选信号 CS 为低电平有效。系统初始化完成后先将 CS 引脚置为高电平使传感器保持在未选中状态避免上电过程中产生误通信。printf(HELLO\n);HAL_GPIO_WritePin(CS_PORT,CS_PIN,HAL_GPIO_PIN_SET);变量定义。/* Private macro -------------------------------------------------------------*/#defineBOOT_TIME20//ms/* Private variables ---------------------------------------------------------*/staticint32_tdata_raw_acceleration[3];staticint16_tdata_raw_temperature;staticfloat_tacceleration_mg[3];staticfloat_ttemperature_degC;staticuint8_twhoamI;staticuint8_ttx_buffer[1000];staticiis3dwb10is_pin_int_route_troute{0};/* Extern variables ----------------------------------------------------------*//* Private functions ---------------------------------------------------------*//* * WARNING: * Functions declare in this section are defined at the end of this file * and are strictly related to the hardware platform used. * */staticint32_tplatform_write(void*handle,uint8_treg,constuint8_t*bufp,uint16_tlen);staticint32_tplatform_read(void*handle,uint8_treg,uint8_t*bufp,uint16_tlen);staticvoidtx_com(uint8_t*tx_buffer,uint16_tlen);staticvoidplatform_delay(uint32_tms);staticvoidplatform_init(void);staticuint64_txl_event_num0,temp_event_num0;staticuint8_txl_event0,temp_event0;staticstmdev_ctx_tdev_ctx;获取ID我们可以向WHO_AM_I (0Fh)获取固定值判断是否为0x50。对应的获取ID驱动程序,如下所示。iis3dwb10is_data_rate_trate;iis3dwb10is_xl_data_cfg_txl_cfg;/* Initialize mems driver interface */dev_ctx.write_regplatform_write;dev_ctx.read_regplatform_read;dev_ctx.mdelayplatform_delay;dev_ctx.handlemx_spi1_gethandle();/* Init test platform */// platform_init();/* Wait sensor boot time */platform_delay(BOOT_TIME);/* Check device ID */iis3dwb10is_device_id_get(dev_ctx,whoamI);printf(IIS3DWB10IS_ID0x%x,id0x%x\n,IIS3DWB10IS_ID,whoamI);if(whoamI!IIS3DWB10IS_ID)while(1);配置工作参数首先读取当前加速度计数据配置在保留 X、Y、Z 三轴使能状态的基础上关闭输出寄存器的回绕读取功能然后将配置重新写入传感器。iis3dwb10is_xl_data_config_get(dev_ctx,xl_cfg);xl_cfg.roundingIIS3DWB10IS_WRAPAROUND_DISABLED;iis3dwb10is_xl_data_config_set(dev_ctx,xl_cfg);将加速度计量程设置为 ±50 g。IIS3DWB10IS 支持 ±50 g、±100 g 和 ±200 g 三种量程。本例选择 ±50 giis3dwb10is_xl_full_scale_set(dev_ctx,IIS3DWB10IS_50g);随后配置 INT1 引脚将加速度数据就绪和温度数据就绪信号映射到 INT1 。 当新的加速度数据产生时传感器可通过 INT1 输出加速度数据就绪信号当新的温度数据产生时也可通过 INT1 输出温度数据就绪信号。iis3dwb10is_pin_int1_route_get(dev_ctx,route);route.drdy_xl1;route.drdy_temp1;iis3dwb10is_pin_int1_route_set(dev_ctx,route);最后将传感器设置为连续采样模式并将输出数据速率配置为 10 kHz。/* Set Output Data Rate */rate.burstIIS3DWB10IS_CONTINUOS_MODE;rate.odrIIS3DWB10IS_ODR_10KHz;iis3dwb10is_xl_data_rate_set(dev_ctx,rate);/* Wait until the first valid sample is available */platform_delay(5);printf(IIS3DWB10IS initialization successful.\r\n);轮询读取数据进入主循环后程序不断读取 IIS3DWB10IS 的数据状态判断是否产生了新的加速度或温度数据。加速度 ODR 设置为 10 kHz。如果每次循环都打印会产生大量串口数据因此这里每读取到100次数据打印一次。while(1){/* * Poll the status register on every loop. * The previous code only checked xl_event/temp_event, but never set * these flags or read the sensor data, so the print conditions could * never become true. */iis3dwb10is_data_ready_tdrdy;memset(drdy,0x00,sizeof(drdy));iis3dwb10is_data_ready_get(dev_ctx,drdy);/* Read acceleration when a new sample is available */if(drdy.drdy_xl){xl_event1;xl_event_num;memset(data_raw_acceleration,0x00,3U*sizeof(data_raw_acceleration[0]));iis3dwb10is_acceleration_raw_get(dev_ctx,data_raw_acceleration);}/* Read temperature when a new sample is available */if(drdy.drdy_temp){temp_event1;temp_event_num;memset(data_raw_temperature,0x00,sizeof(data_raw_temperature));iis3dwb10is_temperature_raw_get(dev_ctx,data_raw_temperature);}/* 10 kHz ODR: print one acceleration sample every 100 reads */if(xl_event((xl_event_num%100U)0U)){xl_event0;acceleration_mg[0]iis3dwb10is_from_fs50g_to_mg(data_raw_acceleration[0]);acceleration_mg[1]iis3dwb10is_from_fs50g_to_mg(data_raw_acceleration[1]);acceleration_mg[2]iis3dwb10is_from_fs50g_to_mg(data_raw_acceleration[2]);printf(Acceleration [mg]:%4.2f\t%4.2f\t%4.2f\r\n,acceleration_mg[0],acceleration_mg[1],acceleration_mg[2]);}/* Temperature refresh rate is 52 Hz: print about once per second */if(temp_event((temp_event_num%52U)0U)){temp_event0;temperature_degCiis3dwb10is_from_lsb_to_celsius(data_raw_temperature);printf(Temperature [degC]:%6.2f\r\n,temperature_degC);}}平放与反放测试将 IIS3DWB10IS 传感器板分别进行平放和反放测试串口输出结果如下。这部分差值主要来自传感器的零偏。IIS3DWB10IS 数据手册中的 TyOff 参数表示加速度零重力偏移规格表给出的零偏精度为 1 g同时零偏还会随温度变化。

相关新闻

2026/9/2 8:24:19

Python实现微电网两阶段鲁棒优化调度:从理论到代码实战

简介:本资源是一套面向计算机及相关专业(如人工智能、数据科学、电子信息、物联网等)高年级本科生与研究生的毕业设计级实战代码,聚焦微电网两阶段鲁棒优化经济调度问题,完整复现了含不确定性建模、KKT条件转化、Bende…

2026/9/2 8:24:19

基于YOLOv8的小样本翻越栏杆检测:数据集构建与模型调优实战

简介:本资源是面向计算机视觉初学者与安防算法开发者的小型目标检测数据集,聚焦于“翻越栏杆”这一典型异常行为识别任务,适用于YOLO系列、Faster R-CNN等主流检测模型的训练与验证。压缩包共1538个文件,包含512张高质量JPG图像、…

2026/9/2 8:24:19

【ubuntu】U盘挂载步骤

U盘挂载abcUbuntu:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 4K 1 loop /snap/bare/5 loop1 7:1 0 74.2M 1 loop /snap/core22/1380 loop2 7:2 0 269.6M 1 loop /snap/firefox/4173 loop3 7:…

2026/9/2 8:34:24

从零构建复合型AMR控制系统:SLAM、Qt界面与多机协同实战

简介:本资源是一套面向工业自动化与机器人开发工程师的复合型AMR移动机器人控制系统完整工程实现,聚焦激光SLAM导航、多体协同与人机交互集成,解决智能物流、柔性产线中移动底盘与机械臂一体化控制的实际开发难题。压缩包含612个文件&#xf…

2026/9/2 8:34:24

ESP32手环实战:PPG心率血氧+天气提醒+低功耗设计

简介:本资源是一套基于ESP32的智能手环系统完整实现方案,面向高校电子信息、物联网、嵌入式方向的本科生开展毕业设计、课程设计与创新实践,解决健康监测类嵌入式项目中多传感器融合、Wi-Fi联网通信、低功耗交互与模块化开发等典型技术难点。…

2026/9/2 8:34:24

STM32驱动OLED显示仿真与实战:从Proteus虚拟验证到硬件移植

简介:本资源是一套面向嵌入式初学者与STM32进阶开发者的OLED显示实践方案,聚焦于STM32微控制器驱动SSD1306型OLED屏幕的核心能力训练,解决硬件连接、I2C/SPI通信配置、底层驱动移植及Proteus虚拟调试等典型学习痛点。压缩包共119个文件&#…

2026/9/2 8:34:24

从CC Switch部署看AI代理工具:原理、避坑与稳定工作流构建

最近在折腾本地大模型和AI工具链的时候,我遇到了一个挺有意思的现象:很多朋友一看到“免费”、“一键接入”、“ChatGPT”这几个词组合在一起,就两眼放光,迫不及待地想下载安装。结果往往是,软件装上了,界面…

2026/9/2 8:34:24

倍福PLC串口自由通信实战:RS232/485硬件配置与TwinCAT编程解析

简介:本资源是一套面向工业自动化工程师与倍福(Beckhoff)PLC初学者的RS232/RS485自由口通信实战案例,聚焦Twincat环境下串口协议自主解析与硬件交互,解决现场设备(如仪表、传感器、旧式控制器)无…

2026/9/2 8:29:24

STM32G031驱动VL53L0X激光测距传感器:完整工程实现与优化指南

简介:本资源是面向嵌入式初学者与STM32开发者的一套完整VL53L0X激光测距实战工程,基于STM32G031F8P6微控制器实现飞行时间(ToF)原理的高精度距离测量,解决近距离工业检测、避障系统或智能终端中毫米级非接触测距的开发…

2026/9/1 16:02:17

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/1 8:27:47

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/1 7:04:43

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/2 0:03:41

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/2 0:03:41

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

这次我们来看一个很实用的 DeepSeek 落地场景:用 DeepSeek 把英文视频字幕自动翻译成中文。具体案例是《恶魔君》1989 年第 28 集的英转中字幕任务,标题写得很直白,但背后其实是一整套可以复用的技术流程:字幕解析、模型调用、批量…

2026/9/2 0:03:41

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

当你家里摆着一台天猫精灵,却总希望语音助手偶尔“不正经”一点,不用官方腔回答问题,而是张口就接几句搞笑段子,会是什么体验?我最近动手验证了一下这个想法——没有去改装任何市面上现有的智能音箱,而是直…

2026/9/2 1:15:22

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/2 1:15:22

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/2 1:15:20

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…