硬件工程师做的测试自制最小系统,系统 供电3V

测试目标:

使用原厂的例程,修改GPIO配置后的代码

按键进入深度睡眠状态,

再次按键,唤醒,点亮LED灯2秒。

测试过程:

测试第一次发现,深度睡眠后电流,3V时高达260 uA

找了一圈问题,各个引脚检查,发现引脚状态不正常的KEY2,断开相应的连接。

重新测试后,下降到90 uA

再次排查非GPIO口,将AVCC_USB/AVSS_USB断开,

再次测试,电流下降到36 uA

找不到问题点。再检查 特殊功能IO口,发现BOOT0的电压不正常,不是0,也不是VDD,而是中间的一个值,断开BOOT0连接,电流测试为2.2 uA

但BOOT0是不能悬浮的,检查 程序发现,引脚被配置为输入上拉,将引脚改为输入下拉。

再次测试,电流为2.2uA

致此,低功耗的功耗验证完成。

这里,总结一下问题点:

  • 不连接AVCC_USB/AVSS_USB。
  • 外部电路的配置不合理。
  • PORTF的对应BOOT0的引脚配置错误。

附源码如下:

/******************************************************************************

* Include files

******************************************************************************/

#include gpio.h

#include lpm.h

/******************************************************************************

* Local pre-processor symbols/macros ('#define')

******************************************************************************/

/******************************************************************************

* Global variable definitions (declared in header file with 'extern')

******************************************************************************/

/******************************************************************************

* Local type definitions ('typedef')

******************************************************************************/

/******************************************************************************

* Local function prototypes ('static')

******************************************************************************/

/******************************************************************************

* Local variable definitions ('static')                                      *

******************************************************************************/

/******************************************************************************

* Local pre-processor symbols/macros ('#define')

******************************************************************************/

/*****************************************************************************

* Function implementation - global ('extern') and local ('static')

******************************************************************************/

static void App_LedInit(void);

static void App_UserKeyInit(void);

static void App_LowPowerModeGpioSet(void);

static void _UserKeyWait(void);

/**

******************************************************************************

** \brief  Main function of project

**

** \return uint32_t return value, if needed

**

** This sample

**

******************************************************************************/

int32_t main(void)

{

///< 配置Demo板上所有不使用的IO为高阻输入,避免端口漏电

App_LowPowerModeGpioSet();

///< LED 端口初始化

App_LedInit(); //初始化LED,并点亮

///< ===============================================

///< ============ 警告,警告,警告!!!============

///< ===============================================

///< 本样例程序会进入深度休眠模式,因此以下两行代码起防护作用(防止进入深度

///< 休眠后芯片调试功能不能再次使用),

///< 在使用本样例时,禁止在没有唤醒机制的情况下删除以下两行代码。

delay1ms(2000);

_UserKeyWait();     ///< 等待按键按下后进入休眠模式

Gpio_SetIO(EVB_LEDR_PORT, EVB_LEDR_PIN);        //关闭LED灯

///< 打开并配置按键端口为下降沿中断

Gpio_EnableIrq(EVB_KEY1_PORT, EVB_KEY1_PIN, GpioIrqFalling);

EnableNvic(PORTA_IRQn, IrqLevel3, TRUE);

///< 进入低功耗模式——深度休眠(使能唤醒后退出中断自动休眠特性)

Lpm_GotoDeepSleep(TRUE);

while(1)

{

;

}

}

///< PortC 中断服务函数

void PortA_IRQHandler(void)

{

if(TRUE == Gpio_GetIrqStatus(EVB_KEY1_PORT, EVB_KEY1_PIN))

{

///< LED点亮

Gpio_ClrIO(EVB_LEDR_PORT, EVB_LEDR_PIN);

delay1ms(2000);

///< LED关闭

Gpio_SetIO(EVB_LEDR_PORT, EVB_LEDR_PIN);

Gpio_ClearIrq(EVB_KEY1_PORT, EVB_KEY1_PIN);

}

}

static void _UserKeyWait(void)

{

while(1)

{

///< 检测电平(USER按键是否按下(低电平))

if(FALSE == Gpio_GetInputIO(EVB_KEY1_PORT, EVB_KEY1_PIN))

{

break;

}

else

{

continue;

}

}

}

static void App_LowPowerModeGpioSet(void)

{

///< 打开GPIO外设时钟门控

Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);

//swd as gpio

Sysctrl_SetFunc(SysctrlSWDUseIOEn, TRUE);

///< 配置为数字端口

M0P_GPIO->PAADS = 0;

M0P_GPIO->PBADS = 0;

M0P_GPIO->PCADS = 0;

M0P_GPIO->PDADS = 0;

M0P_GPIO->PEADS = 0;

M0P_GPIO->PFADS = 0;

///< 配置全为上拉使能

M0P_GPIO->PAPU = 0XFFFF;

M0P_GPIO->PBPU = 0XFFFF;

M0P_GPIO->PCPU = 0XFFFF;

M0P_GPIO->PDPU = 0XFFFF;

M0P_GPIO->PEPU = 0XFFFF;

M0P_GPIO->PFPD = 0XFFFF;     //PORTF改为下拉

///< 配置为端口输入(除LED端口外)

M0P_GPIO->PADIR = 0XFFFF;

M0P_GPIO->PBDIR = 0XFFFF;

M0P_GPIO->PCDIR = 0XFFFF;

M0P_GPIO->PDDIR = 0XFFFF;

M0P_GPIO->PEDIR = 0XFFFF;

M0P_GPIO->PFDIR = 0XFFFF;

}

static void App_UserKeyInit(void)

{

stc_gpio_cfg_t stcGpioCfg;

///< 打开GPIO外设时钟门控

Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);

///< 端口方向配置->输入

stcGpioCfg.enDir = GpioDirIn;

///< 端口驱动能力配置->高驱动能力

stcGpioCfg.enDrv = GpioDrvL;

///< 端口上下拉配置->无

stcGpioCfg.enPu = GpioPuEnable;

stcGpioCfg.enPd = GpioPdDisable;

///< 端口开漏输出配置->开漏输出关闭

stcGpioCfg.enOD = GpioOdDisable;

///< 端口输入/输出值寄存器总线控制模式配置->AHB

stcGpioCfg.enCtrlMode = GpioAHB;

///< GPIO IO USER KEY初始化

Gpio_Init(EVB_KEY1_PORT, EVB_KEY1_PIN, &stcGpioCfg);

}

static void App_LedInit(void)

{

stc_gpio_cfg_t stcGpioCfg;

///< 打开GPIO外设时钟门控

Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);

///< 端口方向配置->输出(其它参数与以上(输入)配置参数一致)

stcGpioCfg.enDir = GpioDirOut;

< 端口上下拉配置->无

stcGpioCfg.enPu = GpioPuDisable;

stcGpioCfg.enPd = GpioPdDisable;

///< GPIO IO LED端口初始化

Gpio_Init(EVB_LEDR_PORT, EVB_LEDR_PIN, &stcGpioCfg);

///< LED关闭

Gpio_ClrIO(EVB_LEDR_PORT, EVB_LEDR_PIN);

}

/**

*****************************************************************************

** \brief 进入深度睡眠模式

**

** \input bOnExit - TRUE:当退出异常处理后,自动再次进入休眠;

** FALSE:唤醒后不再自动进入休眠

**

** \retval NULL

*****************************************************************************/

void Lpm_GotoDeepSleep(boolean_t bOnExit)

{

SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;

SCB->SCR |= 1u

__WFI();

}

/******************************************************************************

* EOF (not truncated)

******************************************************************************/

华大单片机HC32L072KATA低功耗调试笔记相关推荐

  1. 华大单片机 HC32F460 串口调试

    华大单片机 HC32F460 串口调试 吐槽下,华大官方例程写到太复杂了,不熟练的一时摸不上手. #include "drvs.h" /********************** ...

  2. lis3dh低功耗调试笔记

    最近在调试整机的低功耗,发现在单片机进入低功耗后,整体功耗在400多uA, 不带加速度计(我用的是SPI模式)的硬件版本低功耗为100uA. 两个硬件版本除了加速度计的区别,其他硬件电路都相同: 于是 ...

  3. stm32f103 低功耗调试笔记 低功耗模式下一直有个800多uA的电流

    最新在做一个低功耗项目 ,用到stm32f103芯片,用到的stop模式和standby模式. 因 stop 只比 standby 模式多1-3uA,最终选用了 stop 模式.下面是官方文档中对几种 ...

  4. 单片机笔记十一:华大单片机

    最近在用华大的芯片做开发,因为某些芯片涨价太厉害,而且太难买了,专门买了华大的开发板回来用,这是一款国产的芯片,用的ARM公司的"Cortex-M0"内核,以前用过stm32f10 ...

  5. 华大单片机低功耗注意事项

    文章目录 前言 一.进低功耗的步骤 1.关闭外设时钟 2.配置IO电平(重要) 3.内核进入睡眠 二.详细说明 1.关闭外设时钟 2.配置IO电平(重要) 3.内核进入睡眠 总结 前言 对于一些电池供 ...

  6. 使用st-link+keil下载和调试华大单片机的教程

    使用st-link+keil下载和调试华大单片机的教程 首先说明一下,手里只有M0和M4内核的芯片,也就只测试了这两种,但是理论上讲这个方法是通用的 一.下载支持包 从华大官网找到你芯片资料页,下载D ...

  7. PIC单片机低功耗调试心得

    PIC单片机低功耗调试心得 因项目需求,需要长时间低功耗,在调试PIC16LF18系列单片机时,发现其低功耗设置的关键地方与STM32和STM8还是有很大区别的,特别整理出来记录如下 : 1.PIC单 ...

  8. 国产超低功耗华大单片机HC32L136开发板上手入门

    今天介绍下国产超低功耗华大单片机HC32L136开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950 免费申请).HC32L136开发板(如下图所示)分为板载调试模块(左半部分 ...

  9. 国产超低功耗华大单片机HC32F003开发板上手入门

    今天介绍下国产超低功耗华大单片机HC32F003开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950 免费申请).HC32F003开发板(如下图所示)分为板载调试模块(左半部分 ...

最新文章

  1. 如何选择数据分析可视化工具?Excel, Tableau还是Power BI?
  2. linux组类型,LINUX用户以及用户组
  3. 【图像处理】中的“滤镜算法”:灰度、黑白、反向、去色、单色、高斯模糊、怀旧、连环画
  4. IOS开发UI控件UIScrollView和Delegate的使用
  5. 洛谷——P2440 木材加工
  6. “AI+遥感”产品研究现状
  7. Subversion for Windows 相关工具
  8. 报错处理——# Creating Server TCP listening socket *:6379: bind: Address already in use
  9. SAP ABAP里数据库表的Storage Parameters从哪里来的 1
  10. cad导出pdf_CAD手机看图软件中dwg格式图纸导出为PDF格式后没有颜色怎么办?
  11. 7.STC15W408AS单片机串口通信
  12. 360顽固木马专杀工具 千万别用
  13. ue4 源码编译 虚拟内存不足 堆限制
  14. 微软行星云计算Planetary Computer——previsa南美洲亚马逊雨林森林损坏系统AI智能评估
  15. 锐度、对比度、和清晰度的区别
  16. Linux手动释放显卡内存
  17. 8Manage:采购谈判的6个成功策略
  18. python png 背景透明_Python - 移除PNG透明图的alpha通道
  19. 计算机论文答辩注意哪些问题,计算机毕业设计答辩(问题+技巧)
  20. 【读懂Autosar代码】-6-Function函数的定义

热门文章

  1. 浙江高考600分计算机专业,理科600分的想学计算机可以报什么学校?
  2. 给大家介绍一个大文件传输软件
  3. 企业客户关系管理的作用
  4. 你知道卷积是如何发挥作用的吗?使用opencv4 解剖卷积功能
  5. uniapp 封装导航栏
  6. 教室占座小程序 微信小程序毕业设计开发
  7. 企业如何选择合适的CRM系统 CRM系统推荐
  8. 实现阿里云OSS文件上传
  9. Neo4j 操作与 py2neo 用法
  10. xshell删除文件夹命令_XShell常用命令