https://www.stmcu.org.cn/module/forum/thread-622619-1-1.html SPI1->CR1 = SPI_CR1_MSTR | 0x28;//48M/64=0.75M SPI1->CR2 = SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN | SPI_CR2_RXNEIE | SPI_CR2_FRXTH |SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0; /* (2) */ SPI1->CR1 |=SPI_CR1_SSM; SPI1->CR1 |= SPI_CR1_SPE; 按这个顺序配置,结果SPE使能不了,MSTR位也清0了。我本意是改TI模式为MOTO模式的,原先配置是这样的: SPI1->CR1 = SPI_CR1_MSTR | 0x28;//48M/64=0.75M SPI1->CR2 = SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN | SPI_CR2_FRF| SPI_CR2_RXNEIE | SPI_CR2_FRXTH |SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0; /* (2) */ SPI1->CR1 |= SPI_CR1_SPE; /* (3) */ |
接之前的帖子,改模式不能根本解决你说的问题。从原理上讲,SPI是同步通讯,在时钟边缘采集数据,如果这时候干扰,是不能采集准确的。 但是一般错位有开关SPI的时间同步异常可能,建议你检测一下 |
改了数据线和时钟线的干扰不会导致数据错位,但NSS的干扰解决不了。 |
如果干扰导致数据不对,只能用CRC校验,如果不对,重发吧 |