用STM32F103RBT6芯片做一短信卡,所用资源:串口1,2,3;定时器2,4;外加几个IO口(有一发光管指示)。使用8M晶振。
在系统时钟72M时实测GSM模块启动后电流40~45mA。
降低系统时钟为40M时电流:28~34
mA。
降低系统时钟为24M时电流:
23~28 mA。
此时还有一耗电大户LED,IO推挽输出电阻220欧,电流大概8
mA ((3.3-1.4)/220),改电阻为1.6K
实测24M时电流为:19
mA 。到现在为止跟手册上的电流功耗基本接近(毕竟有外部电路IO口工作)。
GSM模块工作是电流在10
mA左右(手册上说明),根据上面测试频率降低16M时工作电流减少大概5
mA,降低IO口频率不大明显,毕竟我只有一个LED输出。
为了进一步降低功耗,使系统进入睡眠模式,关闭通用定时器后设置
*(u32*)0xE000ED10 &= ~(1<<2); //SLEEPDEEP =0 这个最重要,绝对是睡眠还是深度睡眠(停止或待机)模式
*(u32*)0xE000ED10 &= ~(1<<1); //SLEEPONEXIT =0
PWR->CR |= (1<<3); //CSBF 后面4个设置不重要
PWR->CR |= (1<<2); //CWUF
PWR->CR &= ~(1<<1); //PDDS
PWR->CR &= ~(1<<0); //LPDS
WFI_SET();
通过串口指令,控制进入睡眠模式,测试整机电流降至15mA。
但串口激活睡眠模式时发现系统不是继续运行,而是复位运行。
查看中英文手册,确认休眠模式不会产生系统复位,经反复测试及仿真,发现执行完
WFI_SET(); 后系统所有寄存器变成0XAAAAAAAA,
这样
SLEEPONEXIT =1,PDDS=1,SBF=1,这是待机标志啊?
|