HAL库想实现SPI从设备接收并发送数据

2019-07-14 15:06发布

之前用标准库,开SPI接收中断,接收后到数据后判断是否位帧首,是的话,置个标志位,将再接收的数据存放到一个数组里。接收的同时,发送下一个将要发送的数据,等待下一次接收时自动发送出去。接收到一定数量后,判断校验位,清标志位。

现在改用HAL库了,HAL_SPI_Receive_IT( )函数使调用一次开启一次中断,执行完后关闭中断及SPI,然后执行回调函数。
我尝试在回调函数里,再次调用HAL_SPI_Receive_IT( ),以使设备一直处于接收状态。结果,没调成功。
后改成在void SPI2_IRQHandler(void)里,再次调用HAL_SPI_Receive_IT( )函数,暂时可以正常接收。
帧首尾的判断也放在了void SPI2_IRQHandler(void)里,现在接收完一组数据后,通过串口发送过来,是正确的。
按原来的思路,接收一个数据后,就应准备发送下一个准备发送的数据,于是就调用HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t timeout)函数,可最后一个参数,是超时判断用的,超时后,貌似会自动关闭SPI中断及SPI。而我接收完一组数据后,下次数据也许会等比较长的时间......

还有没有别的好的办法供参考?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
peternie
1楼-- · 2019-07-15 00:43
 精彩回答 2  元偷偷看……
谦谦三君子
2楼-- · 2019-07-15 06:31
lzongpuliu 发表于 1970-1-1 08:00

HAL_SPI_Receive_IT( ) 调用的回调函数里改变状态的.

没明白,能否细说下?
谦谦三君子
3楼-- · 2019-07-15 07:31
想不用HAL_SPI_Receive_IT( )函数,而是用HAL_SPI_TransmitReceive_IT( )函数,这样,发送和接收用一个函数就完成了。可发现读取的数不对,感觉像是接收和发送都触发了中断。而再次发送的操作,我是放在了中断里进行的。
60user162
4楼-- · 2019-07-15 09:09
不懂帮顶
60user162
5楼-- · 2019-07-15 13:30
不懂帮顶
chm10
6楼-- · 2019-07-15 15:52
 精彩回答 2  元偷偷看……

一周热门 更多>