STM32
直播中

学电超人

13年用户 894经验值
擅长:微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制
私信 关注
[问答]

在SPI通信中,接收到的数据与发出去的数据一样是为什么?

现在SPI通信中,接收到的数据与发出去的数据一样,详细如下,请帮忙看看该如何配置与编程?目前使用的程序如下,ID=cmd
void DACx1416_Read_ID1(void)
{
        //Power-on Device
  uint8_t SPICONFIG[3]={DACX1416_SPICONFIG,0x0A,0x86};
        SPI1_1_NSS_Enable();
        HAL_SPI_Transmit( hspi1, SPICONFIG, 3, DACx1416_timeout_3);
        SPI1_1_NSS_Disable();

        uint8_t cmd[3] = {0x81,0x00,0x00};
        uint8_t ID1[3] = {0x00,0x00,0x00};
        uint16_t DACX61416_ID = 0;
        //0x81=23-16位,R/W读写位(1x)+DEVICEID Register 01h
  SPI1_1_NSS_Enable();   
  /* Send the read ID command */
  HAL_SPI_Transmit( hspi1, cmd, 3, DACx1416_Timeout_3);  
  /* Reception of the data */
  HAL_SPI_Receive( hspi1, ID1, 3, DACx1416_Timeout_3);
        SPI1_1_NSS_Disable();
        printf("%x%xn",ID1[1],ID1[2]);
        DACX61416_ID = ((ID1[1] << 8) | ID1[2])   0xFC;
        printf("%xn",DACX61416_ID);
        //if(DACX61416_ID == 0x24C || ID1[0] == 0x81)
        if(DACX61416_ID == 0x24C)
        {
    HAL_GPIO_WritePin(VIO_1V8_2_EN_GPIO_Port, VIO_1V8_2_EN_Pin, GPIO_PIN_RESET);
          HAL_GPIO_WritePin(VAA_VDD_5V_2_EN_GPIO_Port, VAA_VDD_5V_2_EN_Pin, GPIO_PIN_RESET);
        }
}


回帖(1)

李鑫

2024-4-8 17:32:49
在SPI通信中,接收到的数据与发出去的数据一样通常是因为配置或编程错误导致的。以下是一些可能的原因和解决方法:

1. 错误的SPI模式设置:首先,请确保你已正确配置SPI的模式,包括数据传输模式(全双工、半双工或单工)、数据位顺序(MSB或LSB)和时钟极性(CPOL)和相位(CPHA)。

2. 错误的数据发送:请检查你发送的数据是否正确。确保数据的格式、大小和字节顺序与设备的要求相符。

3. 错误的片选操作:在SPI通信中,设备的片选信号(NSS)通常用于选择要与之通信的设备。确保在发送或接收数据之前,正确地启用或禁用片选信号。

4. 错误的时钟设置:SPI通信需要正确的时钟频率。请确保你的时钟设置与设备的要求相匹配。

5. 错误的引脚连接:如果引脚连接有错,可能导致数据在发送和接收之间丢失或损坏。请检查你的引脚连接,确保正确连接到SPI设备。

你提供的程序不完整,无法判断具体的问题。建议你仔细检查你的SPI配置和编程,确保与设备的要求相匹配。如果问题仍然存在,请提供更多的代码和硬件信息,以便我们可以更好地帮助你。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分