历史上的今天
今天是:2024年09月11日(星期三)
2019年09月11日 | STM32 SPI发送与接收用一个函数实现的问题
2019-09-11 来源:eefocus
今天使用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 个缓冲区,一个用于写入(发送缓冲区),一个用于读取(接收缓冲 区)。对数据寄存器执行写操作时,数据将写入发送缓冲区,从数据寄存器执行读取时,将返回接收缓冲区中的值。因此这样写并不会出现读到的数据等于发送的数据,而且发送与接收在全双工通信模式下是并行进行的。另一个要注意的问题,因为从模式是没法提供时钟的,所以主模式下必须要在接收的同时提供时钟。办法就是发送一个字节来实现,因为还是上面说的,发送一个字节就意味着收到一个字节,代码和写完全一样,只要把读出来的字节保存即可。
史海拾趣
|
芳香气体广泛存在于食品、药品、化妆品和各种日化产品中,例如风味小吃、白酒、香料、中药材、膏药、香水、香皂、洗发水等等。与无机气体和水蒸气不同的是,多数芳香气体是由产品自身散发出来的,而且更是这些产品的重要品质和主要功能(有些也是唯 ...… 查看全部问答> |
|
学了DSP一段时间,感觉嵌入式软件开发好像全是软件的问题呢。 可能是因为我用的学校提供的现成的试验箱吧,功能比较齐全,北京合众达的DM643的箱子。 从学习DSP开始,都觉得在跑例程、改写、编写程序中,困难最多的都是软件方面的问题,像是基本语法、 ...… 查看全部问答> |
|
装了CE60 R3后怎么编译不了系统,老是停在某个地方,等多久都不动的。不会是CE60 R3的版本问题吧?! 装了CE60 R3后怎么编译不了系统,老是停在某个地方,等多久都不动的。不会是CE60 R3的版本问题吧?!… 查看全部问答> |
|
小弟做WM很久。最近公司要做一WINCE 5.0的开发板的程序。废话不多说,问题如下: 用EVC+WINCE 4.2调试速度太慢,于是想换VS2008+WINCE 5.0(因开发版是5.0,所以不能用WINCE6.0) 我用PB 5.0弄好一个WINCE 5.0的模拟器,也生成了相关的SDK。在EVC4 ...… 查看全部问答> |
|
为什么NokiaBB5系列无法解网络? 比如说绑定美国cingular的Nokia E62 我做了很多搜索,没找到可以解锁的办法。(除了向cingular索取解锁密码) 在下学浅,觉得电话跟电脑差不多,如果靠密码能解锁的话,一定是软件上的限制,重写成出厂设置应该 ...… 查看全部问答> |
|
对于IIC来说只有两条线来控制数据的传输,SDA和SCL。对于IIC协议的学习,要掌握四种模式,主发送,主接收,从发送和从接收。在对设备的读写操作信号是在发送从地址时将其一起发送出去,比如主发送模式,它要从从设备中读取数据,那么在主设 ...… 查看全部问答> |




