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

NUCLEO-F103RB与MAX31865 SPI同步写入失败问题求助

MAX31865 SPI写入故障排查(NUCLEO-F103RB)

我正在将MAX31865温度传感器通过SPI集成到NUCLEO-F103RB开发板,但无法完成单次写入传输,SPI波形参考此处。

现有代码

初始化函数

void INIT_SPI_MAX(void)
{
    uint8_t spi_reg =0b11000000;  //V_BIAS ON, Auto off, 4-wire, returns all fault status bits in register, 50Hz
    uint16_t low_fault = (100) & 0x7FFF;;
    uint8_t threshold[2] = {0x85, 0x86};  //RTD resistance data address registers

    SPI_Write1Byte(0x80);
    SPI_Write1Byte(spi_reg);
    SPI_Write1Byte(threshold[0]);
    SPI_Write1Byte((uint8_t)((low_fault & 0xFF00) >> 8));
    SPI_Write1Byte(threshold[1]);
    SPI_Write1Byte((uint8_t)((low_fault & 0x00FF) << 1));
}

字节写入函数

void SPI_Write1Byte(uint8_t data)
{
    HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET);
    HAL_Delay(1);
    HAL_SPI_Transmit(&hspi1, &data, 1, HAL_MAX_DELAY);
    HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);
    HAL_Delay(1);
}

环境与配置

  • 代码在PIC单片机MPLAB环境中可正常运行
  • STM32 Cube IDE配置SPI模式3(CPOL:HIGH、CPHA:2 Edge)
  • GPIO配置确认无误(CS为GPIO_OUTPUT)
  • SPI时钟为32分频,2MBits/s(传感器支持最高5MBits/s)

排查方向

  • CS时序错误:MAX31865要求寄存器写入需在同一CS拉低周期内完成地址+数据的连续传输,当前代码每次单字节都独立拉放CS,不符合传感器的SPI传输协议。比如写配置寄存器应改为:CS拉低→发送0x80→发送spi_reg→CS拉高,而非分两次调用SPI_Write1Byte。
  • HAL传输状态检查:给HAL_SPI_Transmit添加返回值判断,确认是否返回HAL_OK,排查底层SPI硬件是否存在总线错误、超时等问题。
  • 时序一致性验证:用示波器对比STM32与PIC的SPI波形,确认CLK空闲电平、数据采样边沿是否完全匹配模式3的要求(空闲高电平,第二个边沿采样)。
  • 延迟优化:1ms的延迟可能冗余,尝试替换为微秒级延时(比如使用HAL_Delay(0)或自定义微秒函数),避免传感器因时序超时丢弃数据。
  • 寄存器格式核对:写入阈值寄存器时,low_fault <<1操作是否符合MAX31865的15位数据格式(最低位保留为0)?需对照数据手册确认该操作的正确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:57:38