项目用的是stm32的芯片,型号stm32L431RCT6,
项目中用到了SPI通信方式与另一个系统芯片通信。
spi初始化代码如下:
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_SLAVE;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 7;
hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
从MCU的视角来看。接收到的数据 以及 用示波器测到的信号是对的,但DR寄存器中用到了高8位。
而且发送出去的数据是16位的,导致系统芯片接收不到正确数据。
我在网上找了些说法有提到FIFO接收阈值,我看寄存器里面CR2对应的标志位设置也没错。有点摸不着头脑了,望各位提供些思路。