赞
踩
原标题:一个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 被置位,提
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。