历史上的今天
返回首页

历史上的今天

今天是:2025年04月08日(星期二)

正在发生

2019年04月08日 | STM32的SPI接收卡死问题

2019-04-08 来源:eefocus

调试时在调用如下SPI函数时,发现以下两个问题:


1、如果在第三行语句while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);处设断点,将会卡死在这个while语句内,并导致看门狗复位;


2、全速运行,会触发看门狗复位程序,程序只调用spi,无中断,确定为spi导致,SPI速率由16M降至2M,则短时内不见复位;


uint8_t SPI2_SendOneByte(uint8_t u8Data)//SPI2发送一字节


{

/* 等待发送缓冲区为空, TXE 事件 */

while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);


/* 写入数据寄存器,把要写入的数据写入发送缓冲区 */

SPI_I2S_SendData(SPI2, u8Data);


/* 等待接收缓冲区非空, RXNE 事件 */

while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);


/* 读取数据寄存器,获取接收缓冲区数据 */

return SPI_I2S_ReceiveData(SPI2);

}


经过试验及查阅网上资料,发现是由调试时对spi寄存器进行跟踪导致的,解决办法就是调试时关闭对应SPI寄存器跟踪窗口即可,具体原因没有在官方文档中找到,在网上看到这样一段话,可以解释这个想象:


在调试的过程中,使用调试软件的寄存器或存储器显示窗口,可以很方便地查看外设寄存器的状态。


很多朋友都碰到过这样的问题:在单步调试时始终不能在显示窗口看到某些标志位的变化,应该设置这些标志位的时候,窗口中却显示为0,不少人都错误地认为这是芯片的问题。


我们知道,不少STM32外设的状态寄存器位,可以通过对某些寄存器的读操作而清除(例如I2C的I2C_SR1中的很多标志位),在调试过程中,每当程序停止在设置的断点或单步停止时,调试软件都会自动地读出所有指定的寄存器和存储器中的内容,并刷新窗口的显示,调试软件的这个读操作恰好清除了那些标志位,造成了上面描述的现象。


有几个简单的办法解决这个问题: 1. 关闭寄存器或存储器显示窗口。2. 在寄存器或存储器显示窗口中不显示这些敏感的寄存器。3. 不要把断点放在对这些敏感的寄存器位操作的前面,以保证这些寄存器位不被调试软件意外地操作。

推荐阅读

史海拾趣

ALCOA公司的发展小趣事

近年来,随着环保意识的提高,ALCOA积极推动可持续发展和环保倡议。公司致力于减少生产过程中的能源消耗和废弃物排放,同时也在研发更环保的铝材和生产工艺。这些努力不仅提升了公司的社会形象,也为其在电子行业中的长期发展奠定了坚实的基础。

以上五个故事,只是ALCOA公司发展历程中的一部分。然而,这些故事足以展现出这家公司在电子行业中的卓越成就和持续创新的精神。

Adamant Co Ltd公司的发展小趣事

Adamant Co Ltd在电子行业的初期,以其独特的技术突破迅速崭露头角。公司研发出一款高效能、低成本的芯片,为智能手机市场带来了革命性的变化。凭借这一技术,Adamant Co Ltd迅速获得了市场份额,并与多家知名手机厂商建立了合作关系。随着产品的广泛应用,公司逐渐在电子行业中稳固了地位。

Fujisoku Corporation公司的发展小趣事

在电子行业的早期,一家名为“未来电子”的公司(虚构名称,代指类似Fujisoku Corporation的企业)通过自主研发,成功突破了半导体材料的瓶颈,开发出了一种新型的高效能硅基材料。这一创新不仅大幅提升了芯片的性能和稳定性,还降低了生产成本,使“未来电子”迅速在半导体市场崭露头角。公司凭借这一技术优势,不断推出具有竞争力的电子产品,逐步建立起行业领先地位。

南京中科微公司的发展小趣事

CSM深知在半导体领域,合作是实现共赢的关键。因此,公司积极与TSMC、UMC、SMIC等国内外领先的半导体芯片厂商建立合作关系,共同推进流片生产和技术研发。这种合作模式不仅提高了CSM的生产效率和产品质量,也促进了整个半导体产业链的发展。

General Industrial Controls ( GIC )公司的发展小趣事
电感器的工作频率应与LM2596的开关频率相匹配以确保最佳性能。由于LM2596的开关频率为150kHz,因此所选电感器的工作频率也应接近这个值。
华润微(CRMICRO)公司的发展小趣事

2001年,华润微成立矽科公司,开始涉足芯片设计业务。这一举措使公司能够为客户提供更加完整的解决方案,并进一步提升其市场竞争力。同时,华润微也意识到封装测试在半导体产业链中的重要性,于是在2003年成立安盛公司,开始进入封装测试领域。通过建立6英寸产线,华润微进一步巩固了其在半导体产业链中的地位。

问答坊 | AI 解惑

如何选择ARM CPU的操作系统

从8位/16位单片机发展到以ARM CPU核为代表的32位嵌入式处理器,嵌入式操作系统将替代传统的由手工编制的监控程序或调度程序,成为重要的基础组件。更重要的是嵌入式操作系统对应用程序可以起到屏蔽的作用,使应用程序员面向操作系统级开发应用软件 ...…

查看全部问答>

做电子设计大赛B题的请进

本帖最后由 paulhyde 于 2014-9-15 09:09 编辑 做今年电子设计大赛B题的,请进,或者QQ,419605141  …

查看全部问答>

LED问题

我想用移位的方法是3个LED 循环点亮 可是调试的时候不能进入if语句中 #include \"inc\\44b.h\" #include \"inc\\option.h\" /*************************************************************************** 【功能说明】通用延时函数,延时tim ...…

查看全部问答>

【藏书阁】晶体管电路设计

目录: 第一章 概述  学习晶体管电路或FET电路的必要性  晶体管和FET的工作原理  晶体管和FET的近况 第二章 放大电路的工作  观察放大电路的波形  放大电路的设计   放大电路的性能  共发射极应用电路  第三章 增强输出的 ...…

查看全部问答>

请大家帮忙看看我的usb设备流驱动有什么问题?

对应DeviceIOControl函数写了如下的流驱动代码: BOOL  TES_IOControl (DWORD dwCtx, DWORD dwCode,                PBYTE pInpBuf, DWORD dwInpLen,       & ...…

查看全部问答>

vs2005中在c#的智能设备上实现显示地图

  请问,在c#的智能设备的模拟器上显示一副地图,需要什么控件,怎么导入?…

查看全部问答>

在wince上实现画图板的功能实现

请教各位大侠: 想实现画线功能,捕获 WM_MOUSEMOVE ,WM_LBUTTONDOWN 就可以拉,还是应该去实现驱动里发送的消息。。 …

查看全部问答>

求DSP与ARM9(WINCE)串口通信的源代码(C++)、、、急用..谢谢啊。。。。

最近加入一个项目,需要DSP与ARM9的串口通信,可是本人实在是刚接触这嵌入式这块,不懂得该怎么办,又因为急着用,所以向各位大大求救。。谢谢啊。。我的邮箱是812786455@qq.com。。。。万分感谢。。…

查看全部问答>

H.264官方中文版

没钱了,卖点东西…

查看全部问答>

求STM32的USB例程

大家好:      我想用stm32的USB口和电脑通讯。有电脑发送查询信息,板子接收到以后根据相应的信息进行查询,将查询的结果返回给电脑。请问有相似的接收和发送的历程吗?有的请给我一份谢谢…

查看全部问答>