【求助】SPI通信stm32从机返回数据有错位

2019-08-23 15:01发布

之前发过帖子请教用STM32做SPI从机时候给主机返回的数据有误。可是问题还是没有解决。我再描述一下吧,从机给主机返回的数据有错位。主机的时钟极性跟从机是一模一样的,master跟slave也没有设置错。请问有没有人知道从机返回数据有错位这个大概会是什么原因。从机的程序在配置好RCC GPIO 和SPI之后就直接senddata(0x32)了。能这样操作吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
33条回答
dichi
1楼-- · 2019-08-23 19:34
 精彩回答 2  元偷偷看……
林春霞
2楼-- · 2019-08-24 01:12
之前在百度文库见过有文章说从机的波特率设置要比主机要低。那从机那个baudrate怎么设置?我这里是设置成跟主机一样的。都是256分频。还有一点,从机的baudrate应该跟整个通信过程没有一点关系,是吗?这是同步通信,时钟信号来自于主机。。。。。
Rocks
3楼-- · 2019-08-24 02:48
Master端
uint8_t RX_Data;
uint8_t TX_Data = 0xFF;

SPI1->DR = TX_Data;
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE) == RESET){};
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY) == SET){}
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE) == 1){
RX_Data = SPI1->DR;
}

Slave端
主循環用這段試試

uint8_t RX_Data;
uint8_t TX_Data = 0x32;
while(1)
{
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)== RESET);
RX_Data = SPI1->DR;
SPI1->DR = TX_Data;
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE) == RESET){};
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY) == SET){}
}

看最後Master端有收到0x32嗎?


官方例程有主從對傳的 但是要去找找
mzwhhwj
4楼-- · 2019-08-24 04:18
STM32用SPI双芯片通信,最好是用TI Mode,把NSS引脚配置成硬件模式,这样可以有NSS可以做帧同步,目前我使用上就没有发现有数据错乱的情况出现了
林春霞
5楼-- · 2019-08-24 08:51
回复【3楼】Rocks:
---------------------------------
好的谢谢您的回答。笨死了,我今天一条数据线留在学校图书馆了。估计是丢了,我只能再买一条数据线才可以接着实验了。请问ST库的官方例程哪里有得找,我去找找看
林春霞
6楼-- · 2019-08-24 10:28
 精彩回答 2  元偷偷看……

一周热门 更多>