STM32功耗(STM32消耗多少电量)

2023-10-05 08:42

STM32功耗(STM32消耗多少电量)

Stc和stm32功耗对比

STC和STM32的功耗有差异。 STC的功耗较低,可以达到几微瓦,而STM32的功耗一般都在几十微瓦以上。

stm32f407待机功耗

疑问
在做待机唤醒实验时,会出现这样的疑问:只有进入待机模式的代码,那么如何唤醒呢?
原理
(本节主要简单介绍一下待机唤醒的原理,大家可以根据自己的情况自动跳过)
STM32F4待机模式
系统或供电后复位后,单片机处于运行状态。运行中的 HCLK 为 CPU 提供时钟,内核执行程序代码。当CPU不需要继续运行时,例如等待外部事件时,可以使用多种低功耗模式来节省功耗。
STM32F4的3种低功耗模式
这三种低功耗模式中,功耗最低的是待机模式。该模式下,所需最小电流仅为2.2uA左右。停止模式的功耗次低,其典型电流消耗约为 350uA。最后一件事是睡眠模式。
进入/退出待机模式
扩展:
进入模式的第三步:清除WUF 位并检查寄存器PWR_CSR。
清零需要通过PWR_CR:CWUF位1进行配置。
退出模式
根据图1和下面时钟树的stm32部分,在待机状态下,PLL、HSI和HSE振荡器为断电,1.2V电源断电。可以认为只有LSI和LSE振荡器件在工作,因此RTC和独立看门狗可以工作来进行待机唤醒。(也是 WKUP 上升沿,NRST 复位)
Code
#include "wkup.h"
#include "led.h"
#include "delay.h"
#include " usart .h"

//系统进入待机模式
void Sys_Enter_Standby(void)
{
while(WKUP_KD); //等待WK_UP按钮释放(当有RTC中断时,必须等待WK_UP释放才能进入待机)

RCC_AHB1PeriphResetCmd(0X04FF,ENABLE);//复位所有IO口

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR , ENABLE);//使能 PWR 时钟
? ,可以在RTC实验中打开。
RTC_ClearITPendingBit(RTC_IT_TS|RTC_IT_WUT|RTC_IT_ALRB|RTC_IT_ALRA);//清除RTC相关中断标志位。? PWR_EnterSTANDBYMode(); //进入待机模式

}
//检测WKUP引脚信号
//返回值 1:连续按下3秒以上
//0:错误触发
u8 Check_WKUP(void)
{
u8 t=0;
u8 tx=0;//记录释放次数
LED0=0; //点亮 DS0
while(1)
{
if(WKUP_KD)//已按下
{
t++;
tx=0;
}否则
{
tx++;
if(tx> 3) //超过90ms内没有WKUP信号
{
LED0=1;
return 0;//按键错误,按下不够
}
}
delay_ms( 30);
if(t>=100)//按下超过3秒
{
LED0=0; //点亮DS0
return 1; //按下超过3秒
}
}
}
//中断,检测到PA0引脚上升沿。
//中断线0线上的中断检测
void EXTI0_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line0); // 清除LINE10上的中断标志位
if(Check_WKUP())//关闭?
{
Sys_Enter_Standby( ); //进入待机模式
}
}
//PA0 WKUP唤醒初始化
void WKUP_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //使能SYSCFG时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //输入模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure。 GPIO_PuPd = GPIO_PuPd_DOWN; //下拉
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); //PA0连接中断线0

EXTI_InitStructure.EXTI_Line = EXTI_Line0 ;//LINE0
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件
EXTI_InitStru EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能Can LINE0
EXTI_Init( &EXTI_InitStructure);//配置
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//外部中断0
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//启用外部中断通道
NVIC_Init(&NVIC_InitStructure);//配置NVIC

//(检查是否正常开启)
if(Check_WKUP()==0)
{ Sys_Enter_Standby(); //不是开机,而是进入待机模式
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
这里是wkup.c代码,比较简单,这里不再赘述。下面主要解释一下上面的问题(查资料自己理解的逻辑)
明白
首先开机后从int main()函数初始化,进入WKUP_Init();配置相关PA0,检查电源键是否长按,否,进入Sys_Enter_Standby()函数,最后在函数内进入待机模式:PWR_EnterSTANDBYMode()。
PWR_EnterSTANDBYMode()配置原理中已介绍,不再赘述。主要介绍函数内部的WFI:
WFI:等待中断,即会一直保持在这里,直到下一次中断发生。工作
换句话说:当前环境处于正常运行状态。运行到这里就卡住了,没有后续代码执行,相当于待机处理。
所以在初始化的时候,运行到WFI的时候,就卡在一处了
按下wkup按钮的时候,其实已经进行了待机唤醒过程了(从亮起的灯可以看出当按下时),程序已开始运行并且不会卡在同一个地方)。此时,从int main()函数的第一行开始重新运行。继续执行WKUP_Init();对PA0进行相关配置,检查电源键是否被长按。
如果 3 秒内未按下该键,请重复上述步骤 1 和 2;
当按键按下3秒后,跳过WKUP_Init()函数中的ifCheck_WKUP()函数,程序将正常运行,从而实现唤醒功能。并配置PA0中断模式。
再次按下按钮3秒后,会进入中断,判断是否已按下3秒。如果时间不够,则继续以正常状态运行;当时间达到3秒时,Sys_Enter_Standby()
再次进入待机模式。
void EXTI0_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line0); // 清除LINE10上的中断标志位
if(Check_WKUP())//关闭?
{
Sys_Enter_Standby (); //进入待机模式
}
}
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8

stm32g031功耗

STM32G031 是一款低功耗微控制器,具有以下功能:
1。静态功耗低:待机模式下,功耗仅略高于1微安(uA)。
2。低动态功耗:工作模式下,工作电压范围为1.8V至3.6V,功耗极低。
3。多种功耗模式:STM32G031支持多种功耗模式,包括低功耗运行模式、低功耗待机模式、低功耗睡眠模式和深度低功耗关断模式。
4。系统中集成了各种低功耗功能:例如动态电压调节、低功耗定时器和RTC等。
5。支持快速唤醒:能够从低功耗模式快速唤醒,达到低功耗和高性能的平衡。
综上所述,STM32G031微控制器具有优异的低功耗性能,并且支持多种优秀的电源管理功能。适用于需要长时间运行、需要在功率限制下工作的应用场景。

如何理解STM32单片机的功耗单位mA?

单片机STM32的功耗单位是mA。这是错误的。应该是mAH,即毫安是功耗的单位,mA是电流的单位。具体做法如下:

1。通过数据线连接电脑和单片机,打开FlyMcu软件,界面如图所示。

2。单击 ,搜索串口。如果出现如图所示的提示,则表示连接成功。

3。然后点击状态栏后面的省略号,选择需要烧录的.hex文件。

4。然后勾选“验证”、“编程前重新加载文件”和“编程后执行”复选框,然后单击“开始编程”。

5。最后等待右侧状态栏的提醒出现,则表示stm32单片机烧录过程完成。

以上是小编对STM32功耗(STM32消耗多少电量)及相关问题的解答。希望这个关于STM32功耗(STM32消耗多少电量)的问题对您有用!