STM32F407与CS5531、CS5532、CS5533、CS5534通信程序解析

本文详述了基于STM32F407和HAL库,使用SPI与CS5532进行通信的过程。内容涵盖版本信息、参考程序、配置注意事项和常见问题解决,包括波特率限制、SPI模式设置、GPIO上下拉配置等。在调试过程中,提到了读取转换结果异常、SPI波形问题和AD转换时间过长等故障,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、版本信息

1.本文使用SMT32F407为例,使用HAL库,SPI通信。
2.CS5531、CS5532、CS5533、CS55534理论上相通,本文以CS5532为例。

二、参考程序

STM32与CS5532通信程序1
51与CS5532通信程序2

三、CS5532理解注意事项

3.1 波特率

在这里插入图片描述
如上图所示,波特率最大为2MHz。

3.2 SPI模式

在这里插入图片描述
如上图所示,CS片选有效后,SDI、SDO在SCLK的第一个时钟延采集高低电平,第二个时钟转换数据。
对应STM32程序设置如下:

void MX_SPI3_Init(void)
{

  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_32;
  hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi3.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi3) != HAL_OK)
  {
    Error_Handler();
  }

}

3.3 SPI对应GPIO口上下拉设置

void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(spiHandle->Instance==SPI3)
  {
  /* USER CODE BEGIN SPI3_MspInit 0 */

  /* USER CODE END SPI3_MspInit 0 */
    /* SPI3 clock enable */
    __HAL_RCC_SPI3_CLK_ENABLE();
  
    __HAL_RCC_GPIOC_CLK_ENABLE();
    /**SPI3 GPIO Configuration    
    PC10     ------> SPI3_SCK
    PC11     ------> SPI3_MISO
    PC12     ------> SPI3_MOSI 
    */
    GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_12;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLDOWN;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /* USER CODE BEGIN SPI3_MspInit 1 */

  /* USER CODE END SPI3_MspInit 1 */
  }

3.4 中文手册有误

中文翻译手册中,单双极性处有误,正确的请参考英文手册。
在这里插入图片描述
英文的才正确。
在这里插入图片描述

四、调试过程遇到的问题和bug

4.1读取转换全部为0xFF

分析:
读取转换结果示意图
由上图可知,由于时序图中的td时间不确定,未等到SDO拉低,然后读取转换结果将出现全部为0xFF或者0x00的情况。

4.2 SPI的波形存在异常

紫色:NSS片选信号
黄色:SCLK时钟信号
蓝色:MOSI信号
绿色:MISO信号
波形异常
由上图可知,MOSI信号发生了缓慢下降,这是由于没有下拉设置的原因。

4.3 AD转换时间过长

以下为7.5SPS下的单词转换时间
在这里插入图片描述

在这里插入图片描述

五、程序和手册下载

附件为STM32与CS5532的通信程序。测试无bug。
点击下载资料
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值