gd32f103 调试 ad7606

使用的是spi接线方式,需要注意DB7数据线也就是MISO,接一根就行,也不需要给ad7606发数据。而且最重要的是DB15需要接地,是串口并口选择线,会影响数据的稳定性。

用cubemx生成stm32的工程然后用GD的库编译,生成时可以选择 

/* SPI1 init function */
void MX_SPI1_Init(void)
{

  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES_RXONLY;
  hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
  hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 7;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }

}

SPI_DIRECTION_2LINES_RXONLY,只读,就少一根线。

SPI_DATASIZE_16BIT,数据16位模式,每次可以读两字节。

可以直接用16位数组读取8通道的数据。但是hal库spi接收函数是uint8_t,可以直接强转。因为配置的是16位宽,是所以返回的就是16位数据。

如下:

uint16_t adRxBuf_M1[8] = {0};
int16_t adRxData_M1[8] = {0};
void ad7606_IRQSrc(void)
{
    uint8_t i=0;
    
    AD_CS_L();
    
ad7606_RecvData(); //先读一次数据,再读8数据
    HAL_SPI_Receive(&hspi1, (uint8_t*)adRxBuf_M1, 8, 10);
    AD_CS_H();
    
    for(i=0; i<8; i++)
    {
        adRxData_M1[i] = ((int32_t)5000)*((float)((short)adRxBuf_M1[i])/32768);
    }
    
    ad7606_StartConv();
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值