yzwzfyz 发表于 2022-10-19 08:15 spi有主从关系,a机发,b机收,需要确保b机状态,但b机返回时,不是考虑a机状态,时钟控制在a机手里,所以此时应当依然是a机考虑b机是否准备好了数据,所以很多伪spi传输会有busy线,用来从b机通知a机数据是否可以回传。 |
yzwzfyz 发表于 2022-10-20 16:53 学习了,感谢大佬相助,这就老老实实研究一下库函数 |
一个CPU在任何任何时刻只能做一件事!!! CPU发送时,不可能接收。 CPU接收时,不可能发送。 CPU发出一个字节,这个字节就瞬间被写入了嵌入式的串行模块,由模块进行移位,再从串口串出一位位地数据,这个过程通常需要几ms。优秀的程序不会让CPU在此死等这个字节串行发完,再发第二个数据。而是转去干其它的活。模块发完了一个字节会通知CPU,这时CPU再回来发下个字节。 同样, 优秀的接收程序也不会让CPU死等RI信号,而是在模块告诉CPU它收到了一个串来字节后,才转来收这个字节,收到后,通常先存放起来,就去办别的事了,决不在此花更多的时间。待下次再收到模块的通知后,才再过来收下另一个字节。如此,当CPU收到一定的数量数据后(一帧)再集中处理。 你调用的是别人的程序(函数),根本无法控制收、发过程,也不知道别人的程序是否合理。这就悲催了。 仔细研读你调用的函数吧。 |
yzwzfyz 发表于 2022-10-19 08:15 感谢帮助 程序里是用receive_it准备在接受到数据的时候进入中断,然后在中断里发送数据回主机,此时两者应该都处于收发数据的状态。 刚接触单片机不久,stm32的标准库还能看个大致,但是感觉hal库对我来说太绕了,手上设备还只能支持hal,代码确实是在网上找了例程照着大概写的,因为我不是很能看懂hal库怎么用 |
设有A,B二机。 1、A在发送时,必须保证B在接收。否则数据会丢失。 2、B在反回数据时,必须保证A在接收。同理。 想一想SPI的通讯过程序吧,假设A要发送1,2,3,4,5。程序是送一个数据等一等,还是一齐发完5个数。当A在发数据的时候CPU在干什么?是在进行B等待吗?还是在A的发送中? B接收会在何时发产中断,当B在返回数据时,CPU在干什么? 能理顺、解决好时序关系,问题就解决了。 编程不是简单地抄写语句。 |