STM32/STM8技术william hill官网
直播中

王莉

7年用户 302经验值
私信 关注
[问答]

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

之前用标准库,开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。而我接收完一组数据后,下次数据也许会等比较长的时间......

还有没有别的好的办法供参考?

回帖(14)

董薇

2018-12-20 08:48:50
思路在Datasheet里
举报

陈磊

2018-12-20 09:01:41
"HAL_SPI_Receive_IT( ),以使设备一直处于接收状态。"
HAL_SPI_Receive_IT( ) 调用的回调函数里改变状态的.
举报

王莉

2018-12-20 09:16:38

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

没明白,能否细说下?
举报

王莉

2018-12-20 09:30:22
想不用HAL_SPI_Receive_IT( )函数,而是用HAL_SPI_TransmitReceive_IT( )函数,这样,发送和接收用一个函数就完成了。可发现读取的数不对,感觉像是接收和发送都触发了中断。而再次发送的操作,我是放在了中断里进行的。
举报

董英灏

2018-12-20 09:38:21
不懂帮顶
举报

董英灏

2018-12-20 09:49:52
不懂帮顶
举报

杨柳

2018-12-20 10:06:03
不懂帮顶
举报

王蔚

2018-12-20 10:17:40
楼主,我和你遇到了基本一样的问题。我也是用cubeMX生成的工程,两个103开发板通过SPI通信,刚开始以为只要连四根线,通信过一会就出错,后来才发现还要两块开发板共地。现在能实现的是SPI主机循环发送8个字节,SPI从机接收8个字节,并在回调函数里再次开启接收中断。仅执行以上的功能是没有问题的。但我稍微改一点,我想SPI从机通过调用DMA发送大量数据给SPI主机,SPI主机需要发送无效字节来读取,而这个读取同样会进入我的接收中断回调函数。。。。后面就各种问题了,然后就再也无法进入接收回调函数了,我感觉接收中断的开启是不是有问题?楼主你的问题解决了么?
举报

王莉

2018-12-20 10:35:45
我现在是按标准库的方式处理spi中断这部分的,在这里卡的时间太长了。
举报

杨阳

2018-12-20 10:54:59

你好,请问你还有SPI双机通信的例程吗?我也是用cubeMX生成的工程,做双机主从通信,卡住了,能吧你的程序也发给我看看嘛?邮箱:534840481@qq.com
1 举报

李敏

2018-12-20 11:03:28
引用: 建企商务服务 发表于 2018-12-20 13:10
楼主,我和你遇到了基本一样的问题。我也是用cubeMX生成的工程,两个103开发板通过SPI通信,刚开始以为只要连四根线,通信过一会就出错,后来才发现还要两块开发板共地。现在能实现的是SPI主机循环发送8个字节,SPI从机接收8个字节,并在回调函数里再次开启接收中断。仅执行以上的功能是没有问题的。但我稍微改一点,我想SP ...

我现在遇到了和你一样的状况,用DMA接收,然后再在中断中启动DMA进行发送,原本以为主机读取的太快,加了延时还是一样,能不能指点一二
举报

王蔚

2018-12-20 11:23:05
鉴于大家对CubeMX生成的双机SPI通信DMA收发的问题,我就拿出来介绍一下,希望大神勿怪! 百度搜索  一知半解学CubeMX
举报

吴南加

2018-12-20 11:37:32
亲  能借你的例程参考下吗
举报

吴南加

2018-12-20 11:42:34

更多回帖

发帖
×
20
完善资料,
赚取积分