spi收发时的寄存器sr不变_一个SPI通信功能异常的案例

本文通过一个STM32F303芯片的SPI通信问题案例,探讨了当SPI SR寄存器的OVR溢出标志未被正确清除时导致的通信异常。在非调试状态下,由于未及时读取SPI_DR寄存器,导致数据溢出。而在调试模式下,调试组件会读取SPI寄存器,从而避免溢出。解决方法是确保在读取数据前清除OVR标志位。
摘要由CSDN通过智能技术生成

原标题:一个SPI通信功能异常的案例

有人使用STM32F303‍芯片开发产品,用到SPI1外设。SPI工作在主模式,不定期地通过SPI接口读取外部ADC芯片的数据。他发现在MDKKEIL调试模式下并打开SPI外设寄存器窗口时就能正常工作;其它状态下SPI就不正常工作。也就是说只有通过进行下面操作并打开SPI1的寄存器窗口时才能正常工作。

客户还补充道,他的软件代码之前在STM32F103VE上使用是没问题的,移植到32F303这个片子上才出现问题。【注:后来的结果证明,这个补充往往无意中把人往沟里带了。移植过程中前后工程代码细节上的差异客户自己其实也未必清楚。】

从客户反馈的问题现象来看,根据经验判断很可能是某些SPI相关的标志位在他的代码里没有及时做清除操作导致了异常,尤其那些被读取后内容发生变化的寄存器或寄存器标志位。所以,一边提醒该用户认真检查SPI有关标志寄存器的变动情况,一边自己去查看STM32F3参考手册中有关SPI的寄存器读写特性以及STM32F303相关的勘误手册。

从勘误手册上没看到相关问题的内容。从SPI各个寄存器的读写属性,尤其读属性上没有很快发现读与不读而导致内容差异的寄存器或寄存器位。但基本可以肯定问题出在代码上。客户是基于之前的标准库移植过来的,便建议他干脆基于Cube库和他现有硬件重新建立个简单的SPI读写工程项目。

很快客户进一步反馈,他在我的提示下重点检查了SPI_SR状态寄存器的内容及变化情况,并找到解决办法,至于原因不是很清爽。

他反馈说,当他把所有SPI寄存器用变量显示出来,发现其中SR寄存器确实有置位的情况,即那个数据溢出标志位OVR@SPIx_SR 被置位,提

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值