韩教授
发表于 2017-7-25 09:45:12
首先非常感谢楼主的精心回复,没想到一年前的帖子楼主也能及时回复,真是什么感谢。我现在不开启接收中断模式,直接HAL_SPI_Receive()读,不过也同样遇到接收数据错位问题。就是在重启主机或从机后,接收数据偶尔会发生右移移位的问题。我怀疑是我的从机Cs信号没起作用,一直是低电平信号。可能是我没有很好理解透彻NSS的作用吧。
韩教授
发表于 2017-7-25 20:31:29
今天测试了一下,个人认为 1:从机在接收主机发来数据之前,从机应先与主机开机,从机开机后一段时间,主机在开机,可避免接收数据错位问题。2:接收数据过程中,若有一方关机了,再次再次开机后,会偶尔存在接收数据存在错位现象。这种情况下,应将两方都关机,重复情况1操作,这样就可以避免接收数据错位现象。 具体怎么从根本上解决接收数据错位问题,我还在苦恼中,哎呀。。。。。。。。。。。。
any012
发表于 2017-7-26 09:31:57
韩教授 发表于 2017-7-25 20:31
今天测试了一下,个人认为 1:从机在接收主机发来数据之前,从机应先与主机开机,从机开机后一段时间,主机 ...
谢谢你的总结。
也做过这样的实验,接收数据错误后,在spi错误处理回调函数里,软件复位单片机。但总觉得复位单片机不是太好的办法。能在合适的时候只复位SPI就好了,不过我重新初始化SPI,感觉仍是会出现错位的现象。
april1818
发表于 2017-11-21 21:36:34
any012 发表于 2017-7-26 09:31
谢谢你的总结。
也做过这样的实验,接收数据错误后,在spi错误处理回调函数里,软件复位单片机。但总觉得 ...
在搜问题的时候 看到了好多楼主发的帖子 感觉跟我遇到的问题类似。。请问你现在解决了么
我在while(1)前调用了HAL_SPI_Receive_IT while(1)里为空。。然后在回调函数了再次调用了中断接收。。我用示波器测过片选 SCK 是对的。。但是接收到的信号时钟是0。。请问你知道这是怎么回事么
Jason8057
发表于 2018-3-19 12:47:53
mark:):)
hu12319941115
发表于 2020-3-15 13:07:57
any012 发表于 2016-11-24 10:36
放到SPI2_IRQHandler(void)函数里,就可以正常再次调用了。
void SPI2_IRQHandler(void)
{
楼主我按照你的方法把回调放入中断服务函数,主机不停地发数据,按道理从机应该不停地进入中断。目前只有开机进入一次中断,且接收到数据也不对。。。