完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
硬件是这样设计的: 芯片为STM32f103vb,作为从设备接收SPI主设备发送过来的固定长度的数据,现定为每秒发送一次,数据为9个16位数据。 从机的PC6引脚检测到有上升沿,表明主设备将要发送数据过来。发送完数据后,过一段时间PC6被拉低。 一开始是想用DMA方式接收的,PC6上升沿中断的回调函数里调用DMA接收函数,接收9个数据。 结果发现,用万用表表笔或示波器表笔碰触SCLK引脚,会产生数据错位。且,一旦错位,以后接收的数据会始终保持错位。 后来就想先改成SPI中断方式接收。同样再PC6上升沿中断回调函数里调用SPI中断接收函数,接收9个数据,并在PC6下降沿时关闭SPI中断。 结果可能是主设备开机时发送的数据不正常,如果主从设备同时开机的话,从设备就总是接收溢出错误。 后来在溢出错误处理部分的关闭SPI中断后,又清了一次溢出错误标志,开机问题算是解决了。 但,同样存在,用表笔碰触SCLK引脚,会造成接收数据移位的问题。 请大家帮忙分析下为何错位会一直存在? |
|
相关推荐
22个回答
|
|
SPI接收时,应该是按sclk来8个或16个信号后,将移位寄存器的数据放到接收缓冲区,如果接收中断使能的话,会置位RXNE。 读DR,应该是读接收缓冲区吧? 疑惑,读DR,会产生哪些影响? --------------------------------------------------------------------------- 我的理解是有个计数器,计SCLK信号为8或16时,移位寄存器数据放到接收缓冲区,置位RXNE。 读DR,RXNE复位。但这个计数器是否也会跟着复位? ------------------------------------------------------------------------------ 试了下,在PC6下降沿中断里,多加了几句读SPI的DR寄存器,没有效果。 |
|
|
|
看样子数据在移位寄存器里面了,可以尝试一下关闭SPI使移位寄存器,使位计数清零,控制SPI关闭的寄存器SPI_CR1的bit6位SPE!
|
|
|
|
奇怪的是总是错8位,或16位,为啥不会错 5位,7位呢?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
956 浏览 2 评论
STM32CUBEMX(13)--SPI,W25Q128外部Flash移植
1987 浏览 0 评论
OV7670摄像头使用串口发送数据到另一个板子上的lcd,出现花屏
1998 浏览 1 评论
1345 浏览 0 评论
793 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-19 04:39 , Processed in 0.546603 second(s), Total 45, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号