| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 华大单片机HC32L072KATA低功耗调试笔记 -> 正文阅读 |
|
[嵌入式]华大单片机HC32L072KATA低功耗调试笔记 |
硬件工程师做的测试自制最小系统,系统 供电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 致此,低功耗的功耗验证完成。 这里,总结一下问题点:
附源码如下: /****************************************************************************** ?* 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) ?******************************************************************************/ |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 0:48:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |