发 帖  
张飞软硬开源:基于MST32的BLDC直流无刷电机驱动器,👉戳此立抢👈

[经验] STM32 SPI发送与接收用一个函数实现的问题

2019-5-15 21:02:59  812 SPI SPI接收出错 ReadWriteByte STM32
分享
0
今天使用STM32F407读取flash中的数据的实验中,发现一个问题读取到的问题一直不对,找了半天问题,后面找到原子的例程看了一下,发现是SPI数据的读取与发送函数写的有问题,我原本的发送与接收函数是单独的两个函数,而原子的发送与接收函数全都放在 一起。看了半天没搞懂为什么要这么写,但这么写读写确实正常,网上找了找终于找到了一个解答,因此分享出来,方便自己记忆也方便遇到同样问题的人能尽快找到解决办法。

u8 SPI1_ReadWriteByte(u8 TxData)
{                                          
     while((SPI1->SR & SPI_I2S_FLAG_TXE) == (uint16_t)RESET);

     SPI_I2S_SendData(SPI1, TxData);

     while((SPI1->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);  
    return SPI_I2S_ReceiveData(SPI1);
}
发送与接收为什么这么写?
首先我们 要知道数据寄存器(SPIX->DR)分为 2 个缓冲区,一个用于写入(发送缓冲区),一个用于读取(接收缓冲 区)。对数据寄存器执行写操作时,数据将写入发送缓冲区,从数据寄存器执行读取时,将返回接收缓冲区中的值。因此这样写并不会出现读到的数据等于发送的数据,而且发送与接收在全双工通信模式下是并行进行的。另一个要注意的问题,因为从模式是没法提供时钟的,所以主模式下必须要在接收的同时提供时钟。办法就是发送一个字节来实现,因为还是上面说的,发送一个字节就意味着收到一个字节,代码和写完全一样,只要把读出来的字节保存即可。



为了让生活美好 2019-5-15 21:05:58
http://blog.sina.com.cn/s/blog_946e29790102vuji.html参考这个链接
回复

举报

为了让生活美好 2019-5-16 22:50:24
编译FATFS报错,更改一下头文件位置又好了,不知道什么原因呢
回复

举报

fair2017 2019-5-19 08:45:24
不知道你自己的代码如何写的。目前帖出的代码就是发一个数据,然后收一个数据。完全可以分为两个函数来操作,只是没有必要。
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

发经验
课程
    关闭

    站长推荐 上一条 /8 下一条

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