完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
[tr]在使用STM32f051r8 进行2.4G芯片调试,在发送端发送一帧固定的数据,接收端去进行接收,使用MDK调试,将收到的数据放入一个内存数组中观察,使用普通的SPI模式从DR接收数据时,可以看到数组收到的数据基本正确的,后来为提高速度,使用SPI DMA模式去读DR,发现一开始时,收到的数据正确,但运行一段时间后,收到的整帧数据右移了三个字节(发送的数据前三字节为0),再运行一段时间,数据右移两个字节(发送的数据前两个字节为0),之后再运行一段时间,数据右移一个字节(类似前一个字节为0),之后数据基本正常,此后反复此过程,我也注意到以下几点: 1:每次重新打开DMA之前再设置发送的数据长度; 2:在中断函数中,发送完毕后清除发送中断,接收完毕清除接收中断; 除此之外还有其它的原因导致我的问题吗? 这个问题找了几天的原因,还是没找出问题的所在,请各位指导,谢谢! [/tr] |
|
相关推荐
9个回答
|
|
在发送结束中断中清除发送中断,接收完成中清除接收中断,已经做了这个操作了!
|
|
|
|
发送完清除发送中断还是会进入一次中断。建议是关闭中断。
|
|
|
|
回复第 4 楼 于2014-07-08 14:38:07发表:
发送完清除发送中断还是会进入一次中断。建议是关闭中断。 使用TX推动RX,当tx发送完毕数据,关闭TX,当RX接收完一帧数据,再关闭RX if(DMA_GetFlagStatus(DMA1_FLAG_TC4) == SET) { DMA_ClearITPendingBit(DMA1_FLAG_TC4 | DMA1_FLAG_HT4 |DMA1_FLAG_TE4); //DMA1_FLAG_TC2 | DMA1_FLAG_HT2 | DMA1_FLAG_TE2 DMA_Cmd(DMA1_Channel4, DISABLE); SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Rx, DISABLE); } //发送完成 if(DMA_GetITStatus(DMA1_IT_TC5) == SET) { DMA_ClearITPendingBit(DMA1_FLAG_TC5 | DMA1_FLAG_HT5 |DMA1_FLAG_TE5); DMA_Cmd(DMA1_Channel5, DISABLE); SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, DISABLE); } |
|
|
|
接收可以不用关,发送关了就可以了。
|
|
|
|
不明白版主的意思?你是说只是在tx完成中断处清除其中断,然后RX就不管了?
|
|
|
|
TX发送完成以后关闭发送中断,接收中断可以不用去处理。
|
|
|
|
用接收中断就行,发送中断不用,你两个都开就得进两次中断
|
|
|
|
中断程序可以检查一些最基本的漏洞
|
|
|
|
感谢楼主,分享!!!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
OV7670摄像头使用串口发送数据到另一个板子上的lcd,出现花屏
1375 浏览 1 评论
692 浏览 0 评论
674 浏览 0 评论
STM32CUBEMX(12)--IIC,12864OLED(0.96寸)移植
712 浏览 0 评论
STM32CUBEMX(5)--自定义红外NEC解码,定时器TIM捕获方式
648 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-29 01:22 , Processed in 0.805242 second(s), Total 90, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号