You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32通过SPI驱动ADXL345时PulseView显示未启用但功能正常求助

配置遗漏及问题排查点
  • SPI外设未使能:你的初始化代码中未添加SPI开启位配置,需在SPI参数配置完成后加入 SPI1->CR1 |= SPI_CR1_SPE; 开启硬件SPI外设。功能能正常运行大概率是你在其他业务代码中额外开启了该位,但若上电后首次通信前SPE未置位,PulseView的SPI解码器无法识别到合法的SPI传输起始信号,就会判定传感器未启用。
  • CS引脚初始电平未配置:你只配置了PA12为输出模式,但没有在初始化阶段将其拉高为默认未选中状态。若上电时PA12电平为低,ADXL345从一开始就处于被选中状态,PulseView抓不到CS的下降沿作为SPI传输起始标志,无法识别后续的通信行为。需要在GPIO模式配置完成后添加 GPIOA->BSRR |= GPIO_BSRR_BS_12; 初始化CS电平为高。
  • SPI复用功能配置错误:STM32L0系列PA5/PA6/PA7的SPI1功能对应复用AF0,你的代码直接对GPIOA->AFR[0] 或上GPIO_AFRL_AFSEL5/6/7(这三个是对应AFSEL位的全1掩码,相当于设置为AF15),配置完全错误。功能可用大概率是你之前的测试代码没有擦除AF寄存器的复位值(默认0,刚好对应AF0),但如果寄存器被其他代码修改过,会导致SPI信号输出异常,PulseView无法解析。需要改为先清零对应AFSEL位,再设置为AF0:
    GPIOA->AFR[0] &= ~(GPIO_AFRL_AFSEL5 | GPIO_AFRL_AFSEL6 | GPIO_AFRL_AFSEL7);
    
  • SPI收发逻辑不规范:你当前的spi_txrx 函数只处理了发送逻辑,全双工模式下每发送1字节会自动接收1字节,你批量写入发送数据的操作可能会导致DR寄存器覆盖,出现偶发的时序错误。对于需要读传感器的场景,需要每发送1字节后等待接收完成再读取DR寄存器的值,PulseView解析时会校验收发时序的对齐,时序异常也会导致识别失败。
  • GPIO上下拉配置缺失:你没有配置PA5/PA6/PA7的PUPDR寄存器,SPI引脚悬空状态下可能出现杂波干扰,PulseView采样到杂波会干扰协议解析。可以根据硬件设计配置为上拉/下拉,无外部上下拉的情况下建议配置SPI引脚为上拉:
    GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPD5 | GPIO_PUPDR_PUPD6 | GPIO_PUPDR_PUPD7);
    GPIOA->PUPDR |= (GPIO_PUPDR_PUPD5_0 | GPIO_PUPDR_PUPD6_0 | GPIO_PUPDR_PUPD7_0);
    

内容的提问来源于stack exchange,提问作者user10575420

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:24:03