由于去年的缺芯潮,原本基于STM32F105的设备需要pin对pin换成GD32F105。代码直接使用的ST库微修改。

设备装在重柴车上,开始一两个月是没啥问题的。后面出现了休眠后无法唤醒的问题。设置stop模式前,振动传感器中断引脚和CAN的RX引脚设置为外部中断。结果都无法唤醒。使用ST时,不会出现这个问题。

和GD的FAE现场调试,最终确认问题出在stop休眠函数上
而且在GD的官网上,找到了一份《关于 deep-sleep 模式的使用说明》,GD32系列MCU都有这个问题???也是挺无语的。

原ST的stop函数如下:

void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry)
{uint32_t tmpreg = 0;/* Check the parameters */assert_param(IS_PWR_REGULATOR(PWR_Regulator));assert_param(IS_PWR_STOP_ENTRY(PWR_STOPEntry));/* Select the regulator state in STOP mode ---------------------------------*/tmpreg = PWR->CR;/* Clear PDDS and LPDS bits */tmpreg &= CR_DS_MASK;/* Set LPDS bit according to PWR_Regulator value */tmpreg |= PWR_Regulator;/* Store the new value */PWR->CR = tmpreg;/* Set SLEEPDEEP bit of Cortex System Control Register */SCB->SCR |= SCB_SCR_SLEEPDEEP;/* Select STOP mode entry --------------------------------------------------*/if(PWR_STOPEntry == PWR_STOPEntry_WFI){   /* Request Wait For Interrupt */__WFI();}else{/* Request Wait For Event */__WFE();}/* Reset SLEEPDEEP bit of Cortex System Control Register */SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP);
}

修改后:

//GD32F105
void GD_PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry)
{uint32_t tmpreg = 0;static uint32_t reg_snap[ 4 ];/* Check the parameters */assert_param(IS_PWR_REGULATOR(PWR_Regulator));assert_param(IS_PWR_STOP_ENTRY(PWR_STOPEntry));/* Select the regulator state in STOP mode ---------------------------------*/tmpreg = PWR->CR;/* Clear PDDS and LPDS bits */tmpreg &= CR_DS_MASK;/* Set LPDS bit according to PWR_Regulator value */tmpreg |= PWR_Regulator;/* Store the new value */PWR->CR = tmpreg;/* Set SLEEPDEEP bit of Cortex System Control Register */SCB->SCR |= SCB_SCR_SLEEPDEEP;reg_snap[ 0 ] =  (*(volatile uint32_t *)(0xE000E010));//REG32( 0xE000E010 );reg_snap[ 1 ] =  (*(volatile uint32_t *)(0xE000E100));//REG32( 0xE000E100 );reg_snap[ 2 ] =  (*(volatile uint32_t *)(0xE000E104));//REG32( 0xE000E104 );reg_snap[ 3 ] =  (*(volatile uint32_t *)(0xE000E108));//REG32( 0xE000E108 );(*(volatile uint32_t *)(0xE000E010)) &= 0x00010004;   //( 0xE000E010 )(*(volatile uint32_t *)(0xE000E180))  = 0XFF7FF83D;   //( 0xE000E180 )(*(volatile uint32_t *)(0xE000E184))  = 0XBFFFF8FF;   //( 0xE000E184 )(*(volatile uint32_t *)(0xE000E188))  = 0xFFFFFFFF;      //( 0xE000E188 )/* Select STOP mode entry --------------------------------------------------*/if(PWR_STOPEntry == PWR_STOPEntry_WFI){ /* Request Wait For Interrupt */__WFI();}else{/* Request Wait For Event */__SEV();__WFE();__WFE();}(*(volatile uint32_t *)(0xE000E010)) = reg_snap[ 0 ] ;(*(volatile uint32_t *)(0xE000E100)) = reg_snap[ 1 ] ;(*(volatile uint32_t *)(0xE000E104)) = reg_snap[ 2 ] ;(*(volatile uint32_t *)(0xE000E108)) = reg_snap[ 3 ] ;  /* Reset SLEEPDEEP bit of Cortex System Control Register */SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP);
}

注意,使用GD芯片时,stop函数前,需要关闭滴答定时器,stop函数后再打开。

修改后运行了几个月,暂未再重新出现问题。

解决GD32F105休眠后无法唤醒的问题相关推荐

  1. 解决win10休眠后无法唤醒黑屏的问题

    1.右击开始,在菜单开始时选择设备管理器. 2.双击系统设备选项 3.右击[Intel(R)ManagementEngineInterface]选项,选择属性 4.选择电源管理,将允许计算机关闭此设备 ...

  2. Win7系统电脑休眠后无法唤醒的解决方法

    Win7电脑休眠后黑屏无法唤醒?很多用户都喜欢设置休眠模式,这样在自己想要使用电脑的时候能够快速进入系统,但是有的就遇到了在自己的win7系统进入休眠后黑屏无法唤醒,那要怎么解决这个问题呢,一起来学习 ...

  3. 电脑休眠后无法唤醒的解决办法!

    转自:https://jingyan.baidu.com/article/a24b33cd3a751119fe002bf9.html 电脑的休眠功能,为长时间不用的电脑进行了关闭显示.硬盘停转的深度节 ...

  4. 计算机休眠后无法唤醒出现蓝屏,电脑休眠后无法唤醒怎么办【解决方法】

    电脑是目前人们使用最多的电子产品之一,不论是学习还是工作,亦或者休闲娱乐,我们的都经常会使用到电脑.如果电脑在一段时间当中不使用,就会自动进入休眠状态,在进入休眠状态的时候,只有我们将电脑唤醒,它才能 ...

  5. win8计算机睡眠无法唤醒,win8.1系统休眠后无法唤醒的解决方法

    大家都知道,一般情况下,电脑开机后一段时间没有使用的话,就会自动进入休眠状态,这样不仅可以节省电源,还能够延长电脑的使用寿命.但是有些用户却反映说,电脑进入休眠状态后,就无法唤醒了,这是怎么回事呢?今 ...

  6. win10计算机休眠后无法唤醒,win10电脑休眠后无法唤醒的解决办法

    win10为什么电脑休眠后无法唤醒屏幕 原发布者:聆听※雨声 如果电脑休眠后无法唤醒,那是因为唤醒条件不满足,主要原因有以下几种:1.键盘或鼠标所使用的中断没有被设置成可用于唤醒,解决的方法是进... ...

  7. win10 休眠设置无效_win10电脑休眠后无法唤醒的解决办法

    电脑的休眠功能,为长时间不用的电脑进行了关闭显示.硬盘停转的深度节能模式,不仅节约能源,还保护设备. 但有些时候也会出现一些问题,如休眠后无法唤醒,无法移动鼠标,敲击键盘都无效,最后只能长按电源键来强 ...

  8. win10 休眠唤醒 电源_win10电脑休眠后无法唤醒解决方法(图文)

    win10电脑休眠后无法唤醒解决方法是什么?在win10系统中,很多用户会出现电脑休眠后无法唤醒的情况,那电脑休眠后无法唤醒怎么解决呢,win10电脑休眠后无法唤醒解决方法是什么,下面就和小编一起来看 ...

  9. win10计算机休眠后无法唤醒,win10电脑休眠后唤不醒怎么回事_win10电脑休眠后唤不醒的三种原因和解决方法...

    win10系统进入休眠模式能节约电源和开机时间,如果长时间不用电脑,在不关机的情况下,可以让系统进入休眠模式,不仅节约能源,还保护设备.有时候也会出现一些问题,比如win10电脑休眠后唤不醒,移动鼠标 ...

最新文章

  1. STM32的ADC笔记
  2. 利用jqueryRotare实现抽奖转盘
  3. LiveVideoStackCon 2021北京站 9月再次启航!
  4. leetcode 213. House Robber II | 213. 打家劫舍 II(Java)
  5. FusionInsight LibrA V100R002C80SPC300安装指南
  6. 使用完成端口监控文件目录的例子
  7. ARM7寄存器分布图
  8. Sqlite error- INSERT failed: datatype mismatch
  9. jQuery之jQuery扩展和事件
  10. java 各种数据类型的互相转换
  11. 升级到Oracle 19c:你不可不知的十大SQL问题(上)
  12. Oracle数据库空间突然增大,Oracle数据库突然宕机,处理方案
  13. Leave the world behind,山巅雪莲的再次绽放
  14. 泛微OA前端代码开发方式
  15. 5%和1%精度的贴片电阻标称阻值表
  16. ComposeOptions.kotlinCompilerVersion is deprecated
  17. 房多多Q2营收同比下降46%:亏损同比扩大8.9倍,股价再创新低
  18. 【项目】关于杉德支付接口对接
  19. 嵌入式硬件入门——Flash Memory(W25Q64+SPI协议)
  20. 对象、对象的属性、对象字面量、枚举对象中的属性、可变类型、变量和对象——JS对象

热门文章

  1. 最本质的相机内参intrinsics与外参extrinsics分析,从建模,推导到求解
  2. 多类隶属度的模糊支持向量机(FSVM)
  3. password MD5加密方法
  4. 电影、酒店、外卖红包天天领
  5. 什么是redis数据库?
  6. windows 睡眠倒计时_如何在手机上设置音乐睡眠计时器
  7. Ubuntu 修复弹出U盘“An operation is pending”
  8. 命主属性是水什么意思_算命中红兔 请大师看看“此命盘的主人是 黑马,出生于红兔。日干代表命主,所以属 水”是什么意思...
  9. 淘宝新版打标足迹在哪里浏览?
  10. Thunar文件管理器新增一个使用root权限打开当前目录或者文件夹