0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CKS32F4xx系列低功耗模式STOP模式

jf_pJlTbmA9 来源:中科芯MCU 作者:中科芯MCU 2023-11-06 17:08 次阅读

在本章节中,首先向大家介绍电源系统结构,接着简述三种低功耗模式,最后重点介绍CKS32F4xx系列如何进入STOP模式以及使用按键实现中断唤醒。

CKS32F4xx电源系统介绍

wKgaomUDxAqAWADiAAFEKvLWiVg971.png

CKS32F4xx系列的电源系统框图

CKS32F4xx系列的器件工作电压(VDD)为1.8~3.6V。

①备份域电路:包含LSE振荡器、RTC、备份寄存器及备份SRAM电源开关自动切换VDD和VBAT供电

②调压器电路(1.2V域):为备份域及待机电路外的所有数字电路供电,其中包括内核、数字外设及RAM。

ADC电路和参考电压:ADC工作电源使用VDDA引脚输入,使用VSSA作为独立的地连接,VREF引脚则为ADC提供测量使用的参考电压。

低功耗模式简介

CKS32F4xx系列按功耗由高到低排列,分别是运行、睡眠、停止(STOP)和待机(STANDBY)四种工作模式。上电复位后,CKS32F4xx系列会处于正常运行状态,当不需要继续运行内核时,就可以选择进入后面的三种低功耗模式降低功耗。这三种模式中,电源消耗不同、唤醒时间不同、唤醒源不同,用户需要根据应用需求,选择最佳的低功耗模式。其中,最低功耗的是待机模式,停机模式(STOP)是次低功耗的,最后是睡眠模式。低功耗相关寄存器主要有SCB_SCR、PWR_CR、PWR_CSR,进入各种低功耗需要调用的指令有WFI或WFE,以下做简要介绍。

1.SCB_SCR(系统控制寄存器)

wKgaomUDxAyAW2s-AAA4ylwKEnM241.png

wKgZomUDxA6AdYMcAACy_ijj-xE440.jpg

若进入停止模式or待机模式,需将SLEEPDEEP置1。

2.PWR_CR(电源控制寄存器)

wKgZomUDxA-AITDZAAOMYUqQ5vE359.png

若进入停止模式,需将PDDS清0,LPDS选调节器模式;若进入待机模式,需将PDDS置1,清除唤醒位CWUF。

3.PWR_CSR(电源控制/状态寄存器)

wKgaomUDxBGAR8w-AAOSoIyhhew142.png

芯片处于待机模式下,需使用使用WKUP引脚唤醒并需要清除WUF标记位。

注:WKUP上升沿才能唤醒待机状态,清除WUF标记位实则需操作CWUF位。

4.WFI与WFE指令

实质上都是内核指令,在库文件core_cmInstr.h中把这些指令封装成了函数,调用它们都能进入低功耗模式。调用时,需要使用函数的格式“__WFI();”和“__WFE();”,这是因为__wfi及__wfe是编译器内置的函数,函数内部使用调用了相应的汇编指令。其中WFI指令决定了它需要用中断唤醒,而WFE则决定了它可用事件来唤醒。

以下表格是对三种低功耗模式的简要概述。

wKgaomUDxBKAU9eeAAEk7zuEscM308.jpg

本章中,我们主要对CKS32F4xx系列的低功耗模式—停止模式(STOP)做详细介绍。该模式中,由于其1.2V区域的部分电源没有关闭,会保留内核的寄存器、内存的信息,所以从STOP模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码。停止模式可以由任意一个外部中断(EXTI)唤醒。在停止模式中可以选择电压调节器为开模式或低功耗模式,可选择内部FLASH工作在正常模式或掉电模式。那我们如何进入STOP模式,可以按照下述表格中的步骤执行即可:

wKgaomUDxBOAUMUFAAIct7PHd98353.jpg

CKS32F4xx系列标准库把进入STOP模式这部分的操作封装到PWR_EnterSTOPMode函数中了,并且需要注意的是进入STOP模式后,CKS32F4xx系列的所有IO都保持在停止前的状态,且当它被唤醒时,CKS32F4xx系列使用HSI作为系统时钟运行,由于系统时钟会影响很多外设的工作状态,所以一般我们在唤醒后会重新开启HSE,把系统时钟设置为原来的状态。上面表格也提到在停止模式中,还可以控制FLASH的供电,使用库函数PWR_FlashPowerDownCmd配置进入掉电状态还是正常供电状态,本质上是封装了一个对FPDS寄存器位操作的语句,使用时需要再进入停止模式前被调用,可以进一步降低功耗。

采用EXTI唤醒STOP模式实验

程序设计主要要点如下:

①初始化用于唤醒的中断按键;

②配置不用的I/O端口

③设置停滞状态是FLASH掉电以及选择电压调节器的工作模式并进入停止状态;

④使用按键中断唤醒芯片;

⑤重启HSE时钟,使系统完全恢复停止之前的状态。

1)初始化用于唤醒的中断按键

此处选择连接PB1引脚的按键用于将芯片从STOP模式唤醒,代码如下:

voidCKS_EXTI_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
EXTI_InitTypeDefEXTI_InitStructure;
NVIC_InitTypeDefNVIC_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);

/*ConfigurePB1asEXTI*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOB, GPIO_InitStructure);

/*ConfigurePB1toEXTIline1*/
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource1);

/*EXTIconfiguration*/
EXTI_InitStructure.EXTI_Line=EXTI_Line1;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init( EXTI_InitStructure);

/*NVICconfiguration*/
NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init( NVIC_InitStructure);
}

在CKS_EXTI_Init函数中,首先使能GPIOB时钟,又因为用到外部中断,所以必须先使能SYSCFG时钟,接着对GPIOB初始化为上拉输入,并调用函数 SYSCFG_EXTILineConfig配置GPIOB.1连接到中断线1,最后初始化EXTI中断线以及NVIC中断优先级。

voidEXTI1_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line1)!=RESET)
{
EXTI_ClearITPendingBit(EXTI_Line1);
}
}

在中断服务函数EXTI1_IRQHandler内,主要是清除LINE1上的中断标志位。

2)配置未使用的I/O口

进入STOP模式之前,需要对I/O进行处理,若不处理很多配置为输入浮空的I/O口在受到外界干扰的时候,状态不定,消耗大量的电流,代码如下:

voidCKS_Stop_Mode_IO_Set(void)
{
/*setpinsnotusedtoAIN*/
GPIO_InitTypeDefGPIO_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;

GPIO_Init(GPIOA, GPIO_InitStructure);
GPIO_Init(GPIOC, GPIO_InitStructure);
GPIO_Init(GPIOD, GPIO_InitStructure);
GPIO_Init(GPIOF, GPIO_InitStructure);
GPIO_Init(GPIOG, GPIO_InitStructure);
GPIO_Init(GPIOH, GPIO_InitStructure);
GPIO_Init(GPIOI, GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=(~GPIO_Pin_1);
GPIO_Init(GPIOB, GPIO_InitStructure);
}

由上述代码可知,我们将没用到的I/O全部设置为模拟输入,保留PB1作为按键,产生外部中断来将芯片从STOP模式唤醒。

3)芯片进入STOP模式

该部分代码一般是程序执行一段时间再调用,我们先使用PWR_FlashPowerDownCmd配置停止模式下FLASH使用掉电模式,随后调用PWR_EnterSTOPMode把调压器设置在低功耗模式,最后使用WFI指令进入停止状态。由上文可知,WFI进入停止模式可由任意的EXTI的中断唤醒,所以此处使用按键中断唤醒是可行的,代码如下:

voidCKS_Set_Stop_Mode(void)
{
PWR_FlashPowerDownCmd(ENABLE);
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
}

4)主函数配置

本例程中主函数主要对上文所述函数调用,程序编译下载至开发板,先进行相关外设初始化后,直接进入STOP模式,此时按下按键,芯片可立即被唤醒,随即又进入STOP模式,循环往复,主函数代码如下:

intmain(void)
{
GPIO_Configuration();
CKS_EXTI_Init();
CKS_Stop_Mode_IO_Set();
while(1)
{
CKS_Stop_Mode_IO_Set();
CKS_Set_Stop_Mode();
SystemInit();
Delay(0xffffff);
}
}

来源:中科芯MCU

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17117

    浏览量

    350930
  • 低功耗
    +关注

    关注

    10

    文章

    2394

    浏览量

    103665
  • 电源系统
    +关注

    关注

    3

    文章

    619

    浏览量

    37777
  • STOP模式
    +关注

    关注

    0

    文章

    9

    浏览量

    3070
收藏 人收藏

    评论

    相关推荐

    MCU微课堂|CKS32F4xx系列产品时钟配置

    ,并且高时钟频率将导致功耗增加、抗电磁干扰能力变弱,因此,CKS32F4xx系列产品内部具备多个时钟源。本文将对CKS32F4xx系列产品时
    发表于 12-12 10:17 825次阅读

    CKS32F4xx系列MCU的低功耗模式之睡眠模式

    本课讲为大家讲解CKS32F4xx系列产品的低功耗模式之睡眠(Sleep)模式。MCU为满足某些应用场景:如小型化低容量设备,长期监测设备等
    发表于 06-26 10:02 637次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>MCU的<b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>之睡眠<b class='flag-5'>模式</b>

    CKS32F4xx系列DSP功能介绍

    CKS32F4xx系列使用高性能的32位内核,支持浮点运算单元(FPU),同时还支持DSP指令以及存储保护(MPU)用来加强应用的安全性。
    的头像 发表于 03-04 13:43 1535次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DSP功能介绍

    CKS32F4xx系列产品串口DMA传输

    在上一讲,我们讲过CKS32F4xx系列的6个串口都支持DMA传输。因此本节我们对CKS32F4xx系列的DMA进行介绍,同时利用DMA对串口数据进行传输。
    的头像 发表于 04-10 11:18 1028次阅读

    CKS32F4xx系列低功耗模式之STANDBY模式

    本章中,我们主要对CKS32F4xx系列的待机模式(STANDBY)做详细介绍。在该模式下,芯片功耗最低,1.2V供电区域、PLL、HSI和
    的头像 发表于 07-07 09:41 1166次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b><b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>之STANDBY<b class='flag-5'>模式</b>

    CKS32F4xx系列RNG功能设置

      MCU 微课堂 CKS32F4xx 系 列RNG功能 随机数发生器简介     CKS32F4xx系列自带了硬件随机数发生器(RNG),RNG处理器是一个以连续模拟噪声为基础的随机数发生器,在
    的头像 发表于 09-08 10:01 602次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>RNG功能设置

    CKS32F4xx系列DAC功能

    CKS32F4xx系列DAC功能
    的头像 发表于 11-06 16:56 841次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DAC功能

    CKS32F4xx系列ADC多通道DMA电压采集

    CKS32F4xx系列ADC多通道DMA电压采集
    的头像 发表于 11-06 16:53 1095次阅读

    CKS32F4xx系列ADC单通道电压采集

    CKS32F4xx系列ADC单通道电压采集
    的头像 发表于 11-06 16:54 979次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>ADC单通道电压采集

    CKS32F4xx系列低功耗模式STANDBY模式

    CKS32F4xx系列低功耗模式STANDBY模式
    的头像 发表于 11-06 16:57 471次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b><b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>STANDBY<b class='flag-5'>模式</b>

    CKS32F4xx系列低功耗模式SLEEP模式

    CKS32F4xx系列低功耗模式SLEEP模式
    的头像 发表于 11-06 16:59 671次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b><b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>SLEEP<b class='flag-5'>模式</b>

    CKS32F4xx系列产品Timer的基本使用方法-比较输出

    CKS32F4xx系列产品Timer的基本使用方法-比较输出
    的头像 发表于 11-09 17:39 845次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>产品Timer的基本使用方法-比较输出

    CKS32F4xx系列产品Timer的基本使用方法-定时操作

    CKS32F4xx系列产品Timer的基本使用方法-定时操作
    的头像 发表于 11-09 17:41 613次阅读
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>产品Timer的基本使用方法-定时操作

    MCU微课堂 | CKS32F4xx系列产品SPI通信

    MCU微课堂 | CKS32F4xx系列产品SPI通信
    的头像 发表于 10-24 17:12 694次阅读
    MCU微课堂 | <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>产品SPI通信

    MCU微课堂 | CKS32F4xx系列产品GPIO口配置

    MCU微课堂 | CKS32F4xx系列产品GPIO口配置
    的头像 发表于 10-24 15:14 771次阅读
    MCU微课堂 | <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>产品GPIO口配置