完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
之前用标准库,开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个回答
|
|
思路在Datasheet里
|
|
|
|
|
|
|
|
|
|
|
|
想不用HAL_SPI_Receive_IT( )函数,而是用HAL_SPI_TransmitReceive_IT( )函数,这样,发送和接收用一个函数就完成了。可发现读取的数不对,感觉像是接收和发送都触发了中断。而再次发送的操作,我是放在了中断里进行的。
|
|
|
|
不懂帮顶
|
|
|
|
不懂帮顶
|
|
|
|
不懂帮顶
|
|
|
|
楼主,我和你遇到了基本一样的问题。我也是用cubeMX生成的工程,两个103开发板通过SPI通信,刚开始以为只要连四根线,通信过一会就出错,后来才发现还要两块开发板共地。现在能实现的是SPI主机循环发送8个字节,SPI从机接收8个字节,并在回调函数里再次开启接收中断。仅执行以上的功能是没有问题的。但我稍微改一点,我想SPI从机通过调用DMA发送大量数据给SPI主机,SPI主机需要发送无效字节来读取,而这个读取同样会进入我的接收中断回调函数。。。。后面就各种问题了,然后就再也无法进入接收回调函数了,我感觉接收中断的开启是不是有问题?楼主你的问题解决了么?
|
|
|
|
我现在是按标准库的方式处理spi中断这部分的,在这里卡的时间太长了。
|
|
|
|
|
|
|
|
建企商务服务 发表于 2018-12-20 13:10 我现在遇到了和你一样的状况,用DMA接收,然后再在中断中启动DMA进行发送,原本以为主机读取的太快,加了延时还是一样,能不能指点一二 |
|
|
|
鉴于大家对CubeMX生成的双机SPI通信DMA收发的问题,我就拿出来介绍一下,希望大神勿怪! 百度搜索 一知半解学CubeMX
|
|
|
|
亲 能借你的例程参考下吗
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于STM32F103C8T6控制多路VL53L0X激光测距传感器
888 浏览 0 评论
STM32F103RCT6采集不同采样率传感器数据发送到位机数据不完整
1197 浏览 1 评论
2044 浏览 0 评论
2472 浏览 1 评论
2452 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-4-26 21:47 , Processed in 0.990919 second(s), Total 99, Slave 83 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191