MDHS_ 2025-05-07 14:38 采纳率: 0%
浏览 28

STM32H750VB与AD5292通讯

使用ad5292菊花链模式出现点问题。通过spi发送数据,ad5292的阻值没有变化。spi 配置如下

void MX_SPI4_Init(void)
{

  /* USER CODE BEGIN SPI4_Init 0 */

  /* USER CODE END SPI4_Init 0 */

  /* USER CODE BEGIN SPI4_Init 1 */

  /* USER CODE END SPI4_Init 1 */
  hspi4.Instance = SPI4;
  hspi4.Init.Mode = SPI_MODE_MASTER;
  hspi4.Init.Direction = SPI_DIRECTION_2LINES;
  hspi4.Init.DataSize = SPI_DATASIZE_16BIT;
  hspi4.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi4.Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi4.Init.NSS = SPI_NSS_SOFT;
  hspi4.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
  hspi4.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi4.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi4.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi4.Init.CRCPolynomial = 0x0;
  hspi4.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
  hspi4.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
  hspi4.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
  hspi4.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
  hspi4.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
  hspi4.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
  hspi4.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
  hspi4.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
  hspi4.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
  hspi4.Init.IOSwap = SPI_IO_SWAP_DISABLE;
  if (HAL_SPI_Init(&hspi4) != HAL_OK)
  {
    Error_Handler();
  }
void AD5292_SPI4_SetResistance(uint16_t value, uint8_t num_devices) {
    // 检查阻值范围
    value = (value > 1023) ? 1023 : value;

    // 构造RDAC写命令
    uint16_t tx_value = AD5292_WRITE_CMD | (value & 0x03FF);

    // 构造发送数据
    uint16_t tx_data_zz[8] = {0};
    for (int i = 0; i < num_devices; i++) {
        tx_data_zz[num_devices - 1 - i] = tx_value;
    }

    // 发送阻值设置命令

   HAL_GPIO_WritePin(AD5292_SPI4_NSS_PORT, AD5292_SPI4_NSS_PIN, GPIO_PIN_RESET);
   
        
   HAL_SPI_Transmit(&hspi4, (uint8_t*)tx_data_zz, num_devices, 100);
    

   
    HAL_GPIO_WritePin(AD5292_SPI4_NSS_PORT, AD5292_SPI4_NSS_PIN, GPIO_PIN_SET);
        

}

初始化 ad5292发送的 0x1802 ,在写入阻值前,在发送0x1803 然后写入阻值。 写入代码如上。但是阻值始终没有变化,求各位给看看,到底是哪里出了问题,使用示波器测量,时钟数据都正确。再也要求范围内

  • 写回答

4条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2025-05-07 14:41
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    1. 关键点分析:
      - 问题在于使用SPI与AD5292进行菊花链模式通讯时,发送数据后AD5292阻值无变化,这意味着SPI通讯可能存在问题,比如SPI配置参数不正确、数据传输错误等。
      - 目前仅给出了SPI初始化函数的开头部分,缺少完整配置信息,需要全面检查SPI配置参数是否符合AD5292的要求。
    2. 解决方案:
      - 首先完善SPI4的初始化函数MX_SPI4_Init,确保SPI配置参数正确。以下是一个完整的SPI初始化示例代码:
    void MX_SPI4_Init(void)
    {
        SPI_HandleTypeDef hspi4;
    
        hspi4.Instance = SPI4;
        hspi4.Init.Mode = SPI_MODE_MASTER;
        hspi4.Init.Direction = SPI_DIRECTION_2LINES;
        hspi4.Init.DataSize = SPI_DATASIZE_8BIT;
        hspi4.Init.CLKPolarity = SPI_POLARITY_LOW;
        hspi4.Init.CLKPhase = SPI_PHASE_1EDGE;
        hspi4.Init.NSS = SPI_NSS_SOFT;
        hspi4.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
        hspi4.Init.FirstBit = SPI_FIRSTBIT_MSB;
        hspi4.Init.TIMode = SPI_TIMODE_DISABLE;
        hspi4.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
        hspi4.Init.CRCPolynomial = 10;
        if (HAL_SPI_Init(&hspi4) != HAL_OK)
        {
            // 初始化错误处理
            Error_Handler();
        }
    }
    
    • 检查发送数据的代码部分,确保数据格式和传输逻辑正确。假设要发送控制AD5292阻值的字节数据data,发送代码示例如下:
    uint8_t data = 0x00; // 示例数据,根据实际需求设置
    HAL_SPI_Transmit(&hspi4, &data, 1, HAL_MAX_DELAY);
    
    • 确认硬件连接是否正确,包括SPI信号线(SCK、MOSI、MISO、NSS)以及AD5292菊花链连接方式是否正确。
      3. 多种解决方案的优缺点:
    • 优点
      • 上述完善SPI初始化和检查发送数据代码的方法,是较为常规和基础的排查方式。通过确保SPI配置正确,可以从根本上解决通讯问题的可能性较大。完整的初始化代码可以适应不同的SPI通讯需求和硬件平台。
    • 缺点
      • 这种方式相对较为繁琐,需要仔细检查多个配置参数和代码逻辑。如果硬件连接存在隐蔽问题,可能无法直接通过代码排查发现,还需要进一步检查硬件连接。
        4. 总结:
    • 首先要确保SPI的初始化配置正确,使其符合AD5292的通讯要求。然后检查发送数据的代码逻辑是否正确,最后确认硬件连接无误。通过逐步排查这几个方面,可以定位并解决SPI与AD5292菊花链模式通讯时阻值无变化的问题。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月7日