衔胆栖冰 发表于 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不好实现吧。
页: 1 [2] 3 4
查看完整版本: HAL库如何设置SPI2一直使能接收中断?