找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1314|回复: 0
收起左侧

APT32F1023单片机RTC待机超低功耗电流3.5uA源代码分享

[复制链接]
ID:6391 发表于 2023-6-26 05:12 | 显示全部楼层 |阅读模式
APT32F1023H8S6(SSOP-24封装)MCU是由爱普特微电子推出的基于平头哥半导体RISC-V内核开发的32位高性能、低成本单片机,最近有个项目需要用到其超低功耗待机和RTC中断唤醒功能(实测功耗3.5uA,带LDO后功耗5.6uA),现把源代码和原理图分享给大家,方便大家学习、使用!

电路原理图如下:
51hei.png

单片机源程序如下:
  1. /*******************************************************************************
  2. 文件名: 真空泵控制板(超低功耗,9V集成电池待机3个月后唤醒)主控程序
  3. 编  写: 李工/Michael Lee
  4. 单  位: 领岸
  5. 时  间: 2023年06月17日
  6. 修  改:
  7. 版  本: V1.0
  8. 备  注:
  9.         1.时钟选择MCU内部5MHz IMOSC振荡器;
  10.             2.接口说明:
  11.                    APT32F1023B-24PIN            -----                  外部设备
  12.                   *******************         LED指示灯           ******************
  13.                              PB0.3                  -----                    LED
  14.               *******************          真空泵             ******************
  15.                          PA0.0                  -----                 DC直流电机
  16.                 3.MCU上电后使用默认IMOSC时钟完成软硬件初始化设置,初始化完毕后系统仍选择
  17.                   此时钟作为主时钟(5分频),以降低功耗(实测电流500uA左右);
  18.                 4.由于MCU选择内部IMOSC作为主时钟,下载仿真器注意要设置ICE Clock<1000KHz;
  19.                 5.MCU上电后(自锁按键开关),先启动真空泵(DC直流电机)工作10秒钟,再初
  20.                   始化RTC并低功耗运行,然后MCU进入深度休眠模式,RTC每隔3个月(测试时间设
  21.                   为3小时)唤醒一次MCU,并启动真空泵工作10秒钟后再次进入深度休眠模式,以
  22.                   此循环,直至电池供电耗尽(实测RTC运行时整机待机功耗5.6uA,其中MCU待机功
  23.                   耗3.5uA左右,稳压LDO为HT7550-3,SOT-89封装,LDO空载功耗0.87uA);
  24.                 6.免费申请APT32系列单片机/MCU下载仿真器、学习板及FAE技术支持、软硬件
  25.                   开发咨询等请联系:18823326651(李工,微信同号)、274915968@qq.com
  26. *******************************************************************************/
  27. //加载头文件
  28. #include "sys_clk.h"
  29. #include "iostring.h"
  30. #include "csp.h"
  31. #include "pm.h"
  32. #include "rtc.h"
  33. #include <string.h>
  34. #include <drv/gpio.h>
  35. #include <drv/pin.h>
  36. #include "low_power.h"                          //加载MCU低功耗设置等操作头文件
  37. #include "rtc_time.h"                           //加载RTC初始化等操作头文件

  38. //宏定义
  39. /*** 变量类型 ***/
  40. #define uchar unsigned char
  41. #define uint unsigned int
  42. #define ushort unsigned short
  43. #define ulong unsigned long
  44. /*** LED指示灯 ***/
  45. #define LED_ON csi_pin_set_high(PB03)           //点亮LED指示灯(PB03端口输出高电平)
  46. #define LED_OFF csi_pin_set_low(PB03)           //熄灭LED指示灯(PB03端口输出低电平)
  47. /*** 直流电机真空泵 ***/
  48. #define Pump_ON csi_pin_set_high(PA00)          //开启真空泵(PA00端口输出高电平)
  49. #define Pump_OFF csi_pin_set_low(PA00)          //关闭真空泵(PA00端口输出低电平)

  50. //外部函数
  51. /*** 系统启动 ***/
  52. extern void system_init(void);
  53. extern void board_init(void);

  54. //主函数标志位
  55. uchar Pump_First_Start = 0;                     //定义、保存上电真空泵首次启动标志位

  56. //主函数变量
  57. uint Wake_Up_Times = 0;                         //定义、保存MCU低功耗唤醒次数

  58. //外部变量

  59.                            /********** GPIO口初始化操作 ***********/
  60. /*******************************************************************************
  61. 函数名: GPIO_Init()
  62. 功  能: GPIO口初始化
  63. 参  数: 无
  64. 返回值: 无
  65. *******************************************************************************/
  66. void GPIO_Init(void)
  67. {
  68.         //LED指示灯
  69.         csi_pin_set_mux(PB03,PB03_OUTPUT);                //配置PB0.3端口为输出模式
  70.         csi_pin_output_mode(PB03, GPIO_PUSH_PULL);        //推挽输出
  71.         //直流电机真空泵
  72.         csi_pin_set_mux(PA00,PA00_OUTPUT);                //配置PA0.0端口为输出模式
  73.         csi_pin_output_mode(PA00, GPIO_PUSH_PULL);        //推挽输出
  74.         //主频CLO输出
  75. //        csi_pin_set_mux(PA02, PA02_CLO);            //设置主频输出引脚为PA0.2脚
  76. //  csi_clo_config(CLO_SYSCLK, CLO_DIV8);       //CLO分频系数为8,输出频率=主频48MHz/8=6MHz
  77. }

  78.                                          /********** 其他操作函数 ***********/
  79. /*******************************************************************************
  80. 函数名: Pump_Run()
  81. 功  能: 直流电机真空泵启动10秒左右,并且LED闪烁提示
  82. 参  数: 无
  83. 返回值: 无
  84. *******************************************************************************/
  85. void Pump_Run(void)
  86. {
  87.         uint i;                                     //定义临时变量,方便后续程序使用
  88.     Pump_ON;                                    //启动直流电机真空泵
  89.         for(i=0;i<18;i++)                           //LED指示灯闪烁,并循环延时10秒
  90.         {
  91.                 LED_ON;                                 //点亮LED指示灯
  92.                 mdelay(300);                            //延时
  93.                 LED_OFF;                                //熄灭LED指示灯
  94.                 mdelay(300);                            //延时
  95.         }
  96.         Pump_OFF;                                   //关闭直流电机真空泵
  97. }

  98. //主函数
  99. int main()
  100. {
  101.         //系统、GPIO口等初始化
  102.         system_init();                              //系统时钟、TICK等配置(系统时钟5MHz 5分频)
  103. //        board_init();                               //UART2硬件串口等配置(系统打印参数用)
  104.         GPIO_Init();                                //GPIO口初始化
  105.         RTC_Init();                                 //RTC时钟初始化
  106.         Low_Power_Set();                            //MCU低功耗设置
  107.        
  108.         //主循环
  109.         while(1)
  110.         {
  111.                 //真空泵首次上电,启动10秒左右,并且LED闪烁提示(MCU被唤醒后也从此处开始执行程序)
  112.                 if(Pump_First_Start==0)
  113.                 {
  114.                         Pump_Run();                         //真空泵运行
  115.                         Pump_First_Start = 1;               //上电真空泵首次启动标志位置1
  116.                 }
  117.                 //MCU深度休眠被RTC中断唤醒,判断延时时间到后,真空泵启动10秒左右,并且LED闪烁提示
  118.                 else
  119.                 {
  120.                         Wake_Up_Times++;                    //RTC中断唤醒计时次数+1
  121.                         if(Wake_Up_Times>5)                 //延时时间达到:5*1min=5min
  122.                         {
  123.                                 Wake_Up_Times = 0;              //清零RTC中断唤醒计时次数
  124.                                 Pump_Run();                     //真空泵运行
  125.                         }
  126.                 }
  127.                 //MCU进入深度睡眠状态
  128.                 csi_pm_enter_sleep(PM_MODE_DEEPSLEEP);  //MCU选择进入深度睡眠运行状态
  129.         }
  130.        
  131.     return 0;
  132. }
复制代码
APT32F1023 RTC待机整体功耗5.6uA(带LDO稳压IC).jpg
APT32F1023 RTC待机功耗3.5uA.jpg

APT32F1023单片机RTC待机超低功耗电流3.5uA源代码分享.7z

2.29 MB, 下载次数: 9, 下载积分: 黑币 -5

代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表