衔胆栖冰
发表于 2016-11-24 19:00:32
楼主,你自己顶了那么多。我也没时间看那么多。你调用的接收函数原型是HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size)。这个跟标准库不一样的是,你调用这个函数,就会一直等待接收完Size个字节。你调用这个函数之后,再去while轮询访问接收寄存器当然读不到数据了。
peter001
发表于 2016-11-25 00:12:43
帮顶:):)
any012
发表于 2016-11-25 08:45:20
衔胆栖冰 发表于 2016-11-24 19:00
楼主,你自己顶了那么多。我也没时间看那么多。你调用的接收函数原型是HAL_StatusTypeDef HAL_SPI_Receive_ ...
没有在while(1)里轮询访问接收寄存器,而是在接收完成回调函数里,想再次调用这个函数,结果却不行。现在是放到void SPI2_IRQHandler(void)里了,暂时能用了。但想不明白为什么放到回调函数里却不行,从串口发上来的数看,应该是中断了2次才调用了一次回调函数。可能我设置还是有问题。
zbber
发表于 2016-11-25 11:38:02
放到SPI2_IRQHandler
any012
发表于 2016-11-25 11:48:28
zbber 发表于 2016-11-25 11:38
放到SPI2_IRQHandler
现在确实是这样做的,但好奇,为什么放到回调函数里就出问题?
zxcscm
发表于 2016-11-25 13:32:03
关注中,也遇到类似的问题,中断始终进不了。都快放弃hal库了
衔胆栖冰
发表于 2016-11-25 16:06:24
zxcscm 发表于 2016-11-25 13:32
关注中,也遇到类似的问题,中断始终进不了。都快放弃hal库了
用DMA,速度杠杠的,我两路同时发送接收,每路40M bit/s,相当于单路80M bit/s,有没有很变态;P
衔胆栖冰
发表于 2016-11-25 16:06:51
zxcscm 发表于 2016-11-25 13:32
关注中,也遇到类似的问题,中断始终进不了。都快放弃hal库了
用DMA,速度杠杠的,我两路同时发送接收,每路40M bit/s,相当于单路80M bit/s,有没有很变态;P
any012
发表于 2016-11-25 16:33:43
衔胆栖冰 发表于 2016-11-25 16:06
用DMA,速度杠杠的,我两路同时发送接收,每路40M bit/s,相当于单路80M bit/s,有没有很变态 ...
没接触过DMA,也曾考虑过DMA。但有个疑问,我这个是作为接收设备,需要判断帧首,长度的。用DMA的话,只能循环接收吧?
any012
发表于 2016-11-25 16:58:11
接收是固定长度,且有帧头的;发送同样是固定长度且有帧头,并且,还需要接收帧头时,发送的也是发送帧的帧头。
我觉得DMA不好实现吧。