你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
zxcscm 发表于 2016-11-25 13:32 关注中,也遇到类似的问题,中断始终进不了。都快放弃hal库了
衔胆栖冰 发表于 2016-11-25 16:06 用DMA,速度杠杠的,我两路同时发送接收,每路40M bit/s,相当于单路80M bit/s,有没有很变态 ...
any012 发表于 2016-11-25 16:58 接收是固定长度,且有帧头的;发送同样是固定长度且有帧头,并且,还需要接收帧头时,发送的也是发送帧的帧 ...
查看全部评分
海迹天涯 发表于 2016-12-30 09:19 楼主要养成追踪代码的习惯啊,在HAL_SPI_Receive_IT函数中调用了__HAL_SPI_ENABLE_IT(hspi, (SPI_IT_RXNE | ...
any012 发表于 2016-12-30 10:19 后来改成类似于库函数那样的操作了。 在串口接收的时候也遇到了类似的问题,不确定原因是否一样。当时想 ...
hpdell 发表于 2016-12-30 10:33 SPI 貌似没有空闲中断啊 ??
韩教授 发表于 2017-7-24 10:35 楼主你好,请问你最后怎么解决的?您的帖子我看了好几遍,还是没明白怎么解决的!太郁闷了,一直头疼这个问 ...
用DMA,速度杠杠的,我两路同时发送接收,每路40M bit/s,相当于单路80M bit/s,有没有很变态
用DMA,速度杠杠的,我两路同时发送接收,每路40M bit/s,相当于单路80M bit/s,有没有很变态
没接触过DMA,也曾考虑过DMA。但有个疑问,我这个是作为接收设备,需要判断帧首,长度的。用DMA的话,只能循环接收吧?
我觉得DMA不好实现吧。
我推测你的逻辑是这样的:收到第一个字节判断是否是包头,是的话继续读取一定长度的数据作为数据包的长度,然后接收一定长度的数据,最后还有检验位和结束位。这样的话,你觉得DMA不好处理
评分
查看全部评分
也许那个片子压根没SPI2啊!
后来改成类似于库函数那样的操作了。
在串口接收的时候也遇到了类似的问题,不确定原因是否一样。当时想串口中断接收1个数据,然后在接收完成回调函数里再次打开中断接收。实际调试的时候,只能接收到第一个数据,然后就溢出错误了。原因应该是数据间隔太短,用HAL中断方式来不及处理这个字节下个字节就来到了,从而造成数据溢出。
现在回头想想,SPI这里可能也是由于这个问题。
串口那里,最后用的DMA+空闲中断解决了,参考论坛里的例子。
对,串口也是这样处理的,不过你说的溢出错误我没遇到过,最大使用过115200没出错,虽然HAL库的效率确实低了点,但是对于强大m3核的处理器来说这点延迟不影响的
评分
查看全部评分
SPI 貌似没有空闲中断啊 ??
额,我说的是串口。
用HAL库的话,用中断方式接收的话,在中断函数里做太多的判断或其它操作,有可能还没处理完下个数据就来了,结果造成接收数据溢出错误,从而无法继续下去。
当时我改成类似于标准库那样的操作了,就是用那些带__前缀的宏和函数去实现的,挺麻烦的,不过总算能即使处理完数据。
现在想想,可以在错误处理回掉函数里做错误处理,重启SPI接收也许能解决这个问题。
后来我又重做了一般这个程序,改用DMA方式接收。由于我这个板子有个特点,相当于有个类似于片选的信号过来,我就在片选信号有效的那个沿,调用DMA接收函数,接收固定长度。接收完成回调函数里再对数据进行判断处理。
不过也有问题,又干扰时数据错位后就会一直错位。我试着在片选信号无效的那个沿,重新初始化SPI。有一点效果,但偶尔还是出错。