GD32F103系列SPI导致死机问题

发布者:EternalWhisper最新更新时间:2025-03-05 来源: jianshu关键字:SPI  死机问题 手机看文章 扫描二维码
随时随地手机看文章

提出问题

几年前的一个产品,一直用的STM32F103系列的MCU,2021年上半年意法半导体在市场上的MCU货源稀疏,高价都买不到,只能用国产芯片代替。国产芯片中,首选兆易创新,毕竟是上市公司,也是最早在国内与意法半导体竞争的公司。用GD32F103代替STM32F103。

发现问题

很幸运,STM32F103的程序是可以直接在GD32F103直接使用的。直接下载STM32F103的程序到GD32F103。没想到,好景不长,产品在用户运行一段时间后,客户发现“死机”现象。开门狗也没有起作用?但定时中断是可以运行的。

解决问题

既然中断可以运行(因为现实是数码管,用的定时扫描。显示是正常的,因此判断定时中断正常。),那么程序一定是运行到一个死循环里,而且这个死循环中还有清看门狗。
第一个想到的就是SPI接口,里面有等待SPI接口就绪等,而且在等待过程中,还有清看门狗。

  1. 降低SPI速率试试。
    结果:不尽人意,在强干扰,或者手动将SPI的CS引脚和地短接一下的话,依然出现死机现象。

  2. 百度搜索问题,有人提出SPI的输入脚需要设置为浮空输入。

    GPIO_InitStructure.GPIO_Pin =  PIN_SPIFLASH_MISO;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIO_SPIFLASH_MISO, &GPIO_InitStructure);

本产品中使用SPIFLASH,SPI作为主设备,只有MISO为输入脚,设定为浮空输入。
结果:没起作用。依然存在死机现象。

  1. 会不会是SPI接口被干扰的不工作了呢?如果在使用SPIFlash的地方首先复位SPI,是否可行?

    SPIFLASH_CS_DISABLE();
    SPI_I2S_DeInit(SPI_FLASH);

结果:不负众望。死机现象消失。

结论

STM32的芯片不需要每次对SPI控制器复位,而GD32在一点点干扰的情况下就需要对SPI控制器进行复位,说明GD32芯片的稳定性还是照STM32差一截。


关键字:SPI  死机问题 引用地址:GD32F103系列SPI导致死机问题

上一篇:HWS-2021部分题解
下一篇:RT-Thread 移植 EasyFlash

推荐阅读最新更新时间:2026-03-23 11:46

GigaDevice发布多款GD32F103和GD32F101系列大容量增强型MCU
    2013 年 9 月 25 日 — 业界领先的半导体供应商 GigaDevice ( 兆易创新 ) 日前在北京发布基于 108MHz ARM Cortex-M3 内核的多款大容量增强型 GD32F103 和 GD32F101 系列微控制器新品。目前,该系列产品已经开始提供样片并将于下月正式投入量产。   新发布的 GD32F103/GD32F101 系列大容量增强型 MCU 片上闪存容量从 256KB 起最大可至 3072KB ,这也是迄今为止业界最大容量的 Cortex-M3 内核通用微控制器。高性能高可靠性的片上 Flash 可重复擦写 100000 次,保存数据超过 20 年。 CPU 访问闪
[手机便携]
stm32死机问题的处理
死机过程 基本概念: 连接寄存器LR:调动子程序时,自动存储下一次返回的地址,其实就是最近调用的那一次函数的地址。 死机的过程: 这里我们最需要关注的是第一步入栈: 其中8个寄存器的顺序是 其中出现异常时LR里面的值是固定的 最后更新堆栈指针,我们根据最后使用的堆栈里面的内容,就可以知道出问题时的最后现场。 死机定位 思路简单来讲就是: 找到死机时候的lr寄存器,然后根据lr寄存器的值,找到此时压入的是psp堆栈,还是msp堆栈。然后根据堆栈里的内容(最后压入堆栈的8个寄存器的值)。其中压入到堆栈里面的return address这个值至关重要,这个是上一次,压入堆栈的最后一个函
[单片机]
stm32<font color='red'>死机</font><font color='red'>问题</font>的处理
关于STM32 使用sprintf 死机问题
在使用 sprintf 函数时遇到的造成死机的两种原因: 1、 指针未声明内存 char *p; sprintf(p, %d,%d,%f ,1,1,2.1); 解决方法:对指针申请内存,或定义成数组类型。 2、打印float/double 类型数据。 解决方法:修改为int类型打印。 有网友说栈空间不足造成的死机,本人测试后以上两种死机原因均为改善。 启动文件中 Heap_Size 为 0x00000200修改为0x00000C00 Heap_Size EQU 0x00000200 Stack_Size EQU 0x00000400 Heap_Size EQU 0x00
[单片机]
关于STM32莫名死机的一些问题记录
问题描述 ZET6跑了ucosII系统,在运行过程中有时会出现死机的情况,经过硬件调试发现,是进入延时的时候导致的这个问题,延时函数是没有问题的,而且这个问题是偶尔出现 问题排查 死机之后指针指向了硬件错误中断,初步猜测是因为栈溢出,因为跑了系统,并且函数的嵌套层数比较多,导致栈内存不够,进入了硬件错误中断 解决方法 将函数分离出来,减少函数嵌套,因为每一个函数都会分配单独的内存空间,所以多层的函数嵌套就会有多个函数空间,解决办法就是减少函数嵌套,这样当一个函数执行完弹栈之后,它的内存空间就会被释放。 其他资料 使用keil编译程序的时候,会显示程序对内存的占用情况,其含义如下 Code为程序代码部分
[单片机]
电脑死机可能不是质量问题而是宇宙射线造成?
  据美国媒体报道,当电脑奔溃或手机卡住时,不要马上就怪生产商,这很可能是宇宙射线,或者射线产生的带电粒子造成的。虽然这些粒子如果数量少,对生物是无害的,但其携带的能量足以干扰我们个人设备微电子电路的运行。这种现象被称为单粒子翻转(SEU)。 在SEU期间,粒子会改变芯片内存储存数据的位,后果可以很小如只是改变摄影中一个像素,也可以很大如造成客机失事。2003年比利时斯哈尔贝克电子投票故障就是SEU引起的,电子投票机的一个位翻转导致一位候选人多拿了4096张选票。如果不是因为该候选人不可能得到这么多票,还发现不了这个问题。 范德堡大学辐射效应研究部的研究者巴拉特·布瓦称:“这是很大的问题,但公众基本上还不知道。”该机构是1987
[嵌入式]
意法半导体(ST)Smart Reset™芯片解决电子产品死机问题
中国,2012年4月12日 ——横跨多重电子应用领域、全球领先的半导体供应商、世界领先的标准芯片制造商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)推出新一代Smart Reset™芯片。智能复位集成IC为手机、媒体播放器等便携式消费电子设备提供安全、便利且直接的系统复位方法,作为智能复位芯片市场的领导者,意法半导体向主要消费电子厂商的出货量已达到数千万片。 当电子产品死机或系统锁死时,用户通常做法是取出电池,但是这种方法不是很方便;另一种方法是找到一个适合的工具,插入装置上的一个复位孔,按压嵌入在里面的复位按钮,但这个方法的缺点是通常很难找到合适的工具插入到复位孔。智能复位芯片可以
[家用电子]
WP7版Facebook应用出现死机问题 将出补丁解决
  北京时间3月18日午间消息,微软与Facebook周四表示,他们正在给Windows Phone 7版Facebook应用开发补丁,以解决部分用户遇到的死机问题。   同时,两家公司还建议,用户可以先暂时通过WP7手机People Hub进行Facebook个人状态更新及查看其他信息。People Hub是WP7手机整合的一项功能,可使用户通过社交网站与朋友联系。   Facebook发言人在一封电子邮件中表示:“微软和Facebook均已发现,某些WP7用户在使用Facebook应用时,手机会出现死机问题,但嵌入 Windows Phone 7 People hub 的 Facebook功能没有受到影响。微软和Facebo
[手机便携]
Linux系统死机的软硬件问题分析
  系统出现死机,一般分为两种情况:一是硬件问题;二是软件问题。    一、硬件问题   可以考虑分析以下几点:   1、不要超频CPU,如果已经超频的先回复到原来的频率   虽然平时运行没有问题,但可能在高负载的使用中就会出现不可预料的故障了。特别是Linux系统在某些应用上,是可以把硬件的性能发挥到极限的,但这样的硬件运行Windows可能是没有问题的。   2、确认电源供电充足   必须确保在高负载的状态下,电源可以满足负载。   3、使用memtest86检查内存状态   4、恢复BIOS到默认状态   对于服务器,可以使用自带的监测工具进行测试,也是一个不错的排错方法。    二、
[嵌入式]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved