无法使用SPI与DAC通信

时间:2019-08-24 09:46:57

标签: stm32 spi dac

我正在尝试使用来自STM32L4控制器的SPI与DAC通信。我基本上想测试SPI线路是否工作正常,即我是否能够分别与DAC进行数据传输和接收。我已经将DAC引脚配置如下-

list1 = [i for i in input('Words: ').split(' ')]
print(sorted(list1))

我想读取状态寄存器的内容,我必须在SPI线上向其发送0xC0(如数据手册中所指定)。作为回报,DAC返回状态寄存器的内容。因此,我为此编写了以下代码-

static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

    GPIO_InitStruct.Pin = RST_Pin|M_Z_Pin|TC_SB_Pin|LDAC_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = PD_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = SPI3_Chip_Select_DAC_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /*Configure GPIO pins : READY_Pin LDAC_Pin BUSY_Pin */
  GPIO_InitStruct.Pin = READY_Pin|BUSY_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    HAL_GPIO_WritePin(RST_GPIO_Port,RST_Pin,GPIO_PIN_SET);
    HAL_GPIO_WritePin(M_Z_GPIO_Port,M_Z_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(TC_SB_GPIO_Port,TC_SB_Pin,GPIO_PIN_SET);
    HAL_GPIO_WritePin(LDAC_GPIO_Port,LDAC_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(PD_GPIO_Port,PD_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(SPI3_Chip_Select_DAC_GPIO_Port,SPI3_Chip_Select_DAC_Pin,GPIO_PIN_SET);



}

但是,作为DAC的确认,我无法获得任何数据。我已经检查了SPI_CLOCK和SPI_MOSI引脚是否正在使用示波器获取信号。有什么方法可以检查DAC是否工作正常?

1 个答案:

答案 0 :(得分:0)

感谢您的支持,但是我能够找出问题所在。我不得不按如下方式更改SPI设置-

static void MX_SPI3_Init(void)
{
  /* SPI3 parameter configuration*/
  hspi3.Instance = SPI3;
  hspi3.Init.Mode = SPI_MODE_MASTER;
  hspi3.Init.Direction = SPI_DIRECTION_2LINES;
  hspi3.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi3.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi3.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi3.Init.NSS = SPI_NSS_SOFT;
  hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi3.Init.CRCPolynomial = 7;
  hspi3.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi3.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
  if (HAL_SPI_Init(&hspi3) != HAL_OK)
  {
    Error_Handler();
  }
}

hspi3.Init.DataSize初始化为SPI_DATASIZE_4BIT,而不是SPI_DATASIZE_8BIT