完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用STM32F103的SPI2作为SPI从设备接收主设备发送过来的固定长度的数据。 主设备每秒发送一次。切有个类似片选信号给了从设备的PC6引脚。 那么我在PC6上升沿中断里,开启SPI中断接收函数。 现在主设备先启动后,从设备再启动,接收没问题。 如果主从设备同时启动,则从设备只接收了一次数据就不再接收了,且接收的数据是错误的。(也许主设备启动时发送的数据就是错的) 现在发现出错时是SPI接收溢出了。 我在溢出判断部分那里,加了个printf语句,如果printf语句里有rn,则接收错误出现两次后就变正常了。而是其他的字符的话,则一直是溢出错误。 请教,为什么会一直是溢出错误呢?这里明明是判断溢出错误后就把溢出标志清楚了,然后调用了错误处理回调函数(没有处理,也就是空的吧)。那么为什么下次接收数据时还是溢出错误呢? SPI中断处理函数为: 下图为溢出错误判断部分,加入了printf("rn")语句后的接收数据。是利用串口发送上来的。 下图为将printf语句中的rn去掉后的情况。 |
|
相关推荐
6个回答
|
|
在中断服务函数里调用printf可真糟糕,中断执行时间太长,来不及处理。
|
|
|
|
|
|
本帖最后由 any012 于 2017-5-18 09:47 编辑
找到问题了。 接收的时候,出现异常时,接收数据溢出,中断处理函数里,判断溢出错误后,就清掉溢出错误标志,然后转到错误处理部分。 错误处理部分里关闭了接收中断,但是在关闭接收中断之前,又有新的数据到来,结果又溢出错误了。 最后的结果就是下次开启接收中断时,直接就溢出错误了。以上,周而复始。 在错误处理部分,关闭接收中断后,再清一次溢出错误标志即可。 或者,开启SPI接收的时候,是否应该先把各标志位清一遍? |
|
|
|
虽然SPI中断接收遇到的这个问题解决了,但是用DMA方式接收还是没解决...
|
|
|
|
额,用万用表表笔反复碰触,结果接收数据仍发生位移,且位移会一直保持。和DMA方式接收的现象基本一致。
|
|
|
|
你可以试试用模拟的SPI,stm32自带的spi确实有数据位移的现象。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2028 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1879 浏览 3 评论
4470 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2027 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2535 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 17:05 , Processed in 0.833439 second(s), Total 84, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号