单片机
返回首页

GD32F103系列SPI导致死机问题

2025-03-05 来源:jianshu

提出问题

几年前的一个产品,一直用的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差一截。


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 1瓦四级调频发射机

  • 500W MOS场效应管电源逆变器,12V转110V/220V

  • 12V 转 28V DC-DC 变换器(基于 LM2585)

  • 红外开关

  • 12V转110V/220V 500W逆变器

  • DS1669数字电位器

    相关电子头条文章