硬汉嵌入式论坛

 找回密码
 立即注册
查看: 307|回复: 2
收起左侧

[STM32H7] H7 SPI通信问题,收到的数据跟发送的数据相同

[复制链接]

10

主题

34

回帖

64

积分

初级会员

积分
64
发表于 2024-5-23 17:13:11 | 显示全部楼层 |阅读模式
本帖最后由 fendoushuai 于 2024-5-23 17:15 编辑

使用H7的SPI4,与ADC芯片通信
发送读取寄存器命令时,发现收到的数据和发送的命令一样。
又多发了几条命令,发现ADC会将发送的命令当作数据返回来。
用其他板子外接测试ADC电路,确认ADC工作正常。
怀疑是H7的SPI工作不对。
有人遇到过类似问题没?



下面是SPI初始化的参数

[C] 纯文本查看 复制代码
    /* SPI4 parameter configuration*/
    SPIADCHandle.Instance = SPI4;
    // BSP_vDeInitSPIADC();
    // if(HAL_SPI_GetState(&SPIADCHandle) == HAL_SPI_STATE_RESET) {
        SPIADCHandle.Init.Mode = SPI_MODE_MASTER;                       /* SPI works in master control mode */
        SPIADCHandle.Init.Direction = SPI_DIRECTION_2LINES;             /* full duplex */
        SPIADCHandle.Init.DataSize = SPI_DATASIZE_8BIT;                 /* Set data width */
        SPIADCHandle.Init.CLKPolarity = SPI_POLARITY_LOW;               /* Configure clock polarity */
        SPIADCHandle.Init.CLKPhase = SPI_PHASE_1EDGE;                   /* Configure clock phase */
        SPIADCHandle.Init.NSS = SPI_NSS_SOFT;                           /* Use software to manage chip select pins */
        SPIADCHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128; /* Set baud rate, 100Mhz/16=6.25MHz */
        SPIADCHandle.Init.FirstBit = SPI_FIRSTBIT_MSB;                  /* Data transmission is transmitted first */
        SPIADCHandle.Init.TIMode = SPI_TIMODE_DISABLE;                  /* Disable TI mode */
        SPIADCHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;  /* Disable CRC */
        SPIADCHandle.Init.CRCPolynomial = 0x0A;                          /* This three bits are invalid after disabling CRC */
        // SPIADCHandle.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
        // SPIADCHandle.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
        // SPIADCHandle.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;             /* Disable pulse output */
        // SPIADCHandle.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;           /* This bit is invalid after disabling pulse output */
        // SPIADCHandle.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;    /* Set the FIFO size as a data item */
        // SPIADCHandle.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
        // SPIADCHandle.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
        // SPIADCHandle.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
        SPIADCHandle.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE; /* SPI pins maintain current status after disabled */
        SPIADCHandle.Init.IOSwap = SPI_IO_SWAP_DISABLE;                 /* Disable invert MISO/MOSI alternate functions */
        if (HAL_SPI_Init(&SPIADCHandle) != HAL_OK) {
            ERROR_HANDLER();
        }



芯片发送的数据: 0xc8140000 是读取寄存器命令


选定的照片 (3).jpg


正常情况下,ADC在收到命令后会在第二帧数据返回寄存器的值,
但是现在返回的是收到的读寄存器命令0xC8140000。
后面多发的几个数据,ADC也是依次返回来了。
下面是ADC返回的数据:
选定的照片 (2).jpg





回复

使用道具 举报

2

主题

92

回帖

98

积分

初级会员

积分
98
发表于 2024-5-24 11:16:15 | 显示全部楼层
SPI4就是挺奇怪的,用HAL_SPI_Transmit可以,HAL_SPI_TransmitReceive就不行,
回复

使用道具 举报

1万

主题

6万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
110375
QQ
发表于 2024-5-24 14:12:53 | 显示全部楼层
只测试过spi1和spi3,正常。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-9-21 21:13 , Processed in 0.234898 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表