項(xiàng)目中需要使單片機(jī)STM32F070F6P6進(jìn)入低功耗模式,本文記錄整個(gè)過程。
1、STM32F070的低功耗模式:
2、低功耗模式描述,在項(xiàng)目中希望外部中斷予以喚醒,所以三種低功耗模式,都可以使用。
3、進(jìn)入Stop模式的代碼如下,實(shí)際測(cè)得進(jìn)入Stop模式后,8.0uA。在這里需要注意的是,我選用的單片機(jī)STM32F070F6P6,僅有端口A、端口B和端口F。我使用參考例程,沒有注意里面的具體寫法,增加了端口C和端口D,則一直進(jìn)入不了Stop模式,網(wǎng)上說需要停止SysTick,這些都是不正確的。只有進(jìn)入Sleep模式,才需停止SysTick,在Stop模式中,不需事先關(guān)閉SysTick。程序開始將所有的引腳都設(shè)置為GPIO_MODE_ANALOG模式,以節(jié)省功耗;后續(xù)關(guān)閉GPIO時(shí)鐘,進(jìn)一步節(jié)省功耗;然后調(diào)用SetStopModeAwakenPinCallback回調(diào)函數(shù),設(shè)置外部中斷引腳,由于在設(shè)置外部中斷引腳時(shí),需打開相應(yīng)的GPIO時(shí)鐘,在這里為了程序的書寫方便,沒有關(guān)閉GPIO時(shí)鐘,測(cè)試只差0.1uA。
void CTarget::EnterStopMode(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOF_CLK_ENABLE();
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Pin = GPIO_PIN_All;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
// __HAL_RCC_GPIOA_CLK_DISABLE();
// __HAL_RCC_GPIOB_CLK_DISABLE();
// __HAL_RCC_GPIOF_CLK_DISABLE();
SetStopModeAwakenPinCallback();
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
}
4、SetStopModeAwakenPinCallback的定義如下,可以看到只是一個(gè)空函數(shù),實(shí)際結(jié)果在main.cpp完成。
__weak void SetStopModeAwakenPinCallback(void)
{
}
5、下面是在main.cpp中的SetStopModeAwakenPinCallback函數(shù),其功能是將相應(yīng)的IO引腳設(shè)置為外部中斷引腳,傳遞的具體參數(shù),我們參看STM32CubeMX生成的例程就可以了。
void SetStopModeAwakenPinCallback(void)
{
Target.HAL.LC.SetExternalInterrupt(EXTI0_1_IRQn);
}
6、為了使外部中斷生效,還需設(shè)置相應(yīng)的中斷處理函數(shù),在stm32f0xx_it.h中加入中斷服務(wù)處理函數(shù)
#ifndef __STM32F0xx_IT_H
#define __STM32F0xx_IT_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f0xx_hal.h"
#include "main.h"
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
void NMI_Handler(void);
void HardFault_Handler(void);
void SVC_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
void TIM16_IRQHandler(void);
void USART1_IRQHandler(void);
void USART2_IRQHandler(void);
void TIM1_BRK_UP_TRG_COM_IRQHandler(void);
void EXTI0_1_IRQHandler(void);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F0xx_IT_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
7、在main.cpp中,完成中斷服務(wù)處理函數(shù)的實(shí)現(xiàn)。
void EXTI0_1_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}
8、上述設(shè)置完成后,就可以在main函數(shù)中進(jìn)行測(cè)試了,代碼如下,程序很簡(jiǎn)單,上電后L2閃10次,然后L1閃10次,接著進(jìn)入Stop模式,當(dāng)外部喚醒后,程序復(fù)位。
for (i = 0; i < 10; i++)
{
Target.HAL.L2.Turn();
Target.Delayms(500, FALSE);
}
for (i = 0; i < 10; i++)
{
Target.HAL.L1.Turn();
Target.Delayms(500, FALSE);
}
Target.EnterStopMode();
Target.Restart();
上一篇:STM32MX電源管理低功耗模式
下一篇:STM32F4 內(nèi)部flash驅(qū)動(dòng)(寄存器操作)
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲(chǔ)控制器及其訪問外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 光電融合突破算力邊界:曦智科技2025 WAIC發(fā)布多維度創(chuàng)新成果
- 阿里黑科技落地!夸克AI眼鏡全球首發(fā),高德、淘寶、支付寶都能用
- 化繁為簡(jiǎn), 適配復(fù)雜磁場(chǎng)環(huán)境,MT73xx 3D雙路輸出霍爾鎖存器賦能車規(guī)電機(jī)精準(zhǔn)控制
- 9.5億美元收購恩智浦MEMS傳感器業(yè)務(wù),意法半導(dǎo)體 在傳感器領(lǐng)域的地位再升級(jí)
- 高性能電動(dòng)滑板車 BLDC 電機(jī)驅(qū)動(dòng)器:技術(shù)解析與應(yīng)用展望
- 5G工業(yè)網(wǎng)關(guān)的“邊緣計(jì)算+AI推理”一體化設(shè)計(jì),PLC協(xié)議解析與缺陷檢測(cè)的實(shí)時(shí)聯(lián)動(dòng)
- AR眼鏡的“工業(yè)指令投射”系統(tǒng),SLAM的空間定位、PLC數(shù)據(jù)實(shí)時(shí)疊加顯示
- 多光譜氣體傳感器的抗交叉干擾設(shè)計(jì)
- 多模態(tài)融合感知的“語義-幾何”聯(lián)合建模
- 工業(yè)觸摸屏的“壓感-手勢(shì)”多模態(tài)交互設(shè)計(jì)
- TE有獎(jiǎng)活動(dòng)|如何有效應(yīng)對(duì)當(dāng)下測(cè)試測(cè)量領(lǐng)域的挑戰(zhàn)
- 身臨其境不足以窺全貌,《TI嵌入式產(chǎn)品研討會(huì)》比現(xiàn)場(chǎng)更有料的小小書
- 成都站報(bào)名 | Keysight 高速互聯(lián)技術(shù)研討會(huì)
- EEWorld 芯積分兌換年度回饋來襲~多種賺積分捷徑曝光+禮品兌換劇透
- 有獎(jiǎng)直播|堵車路上聽什么?新世代車載音頻系統(tǒng)及軟件定義汽車
- 是德科技有獎(jiǎng)直播:如何讓你的Wi-Fi測(cè)試“兔”飛猛進(jìn)?
- 點(diǎn)評(píng)《深入淺出玩TI Sitara》,精彩好禮等你拿!
- 泰克WiFi預(yù)一致性測(cè)量方案介紹會(huì) 填問卷 贏好禮
- 有關(guān)RFID的問題
- 關(guān)于51與PC的串口通訊問題
- 初學(xué)FPGA
- *((volatile unsigned *)i)=0xEA000000+0x1FFE;
- 2個(gè)月前買的飛凌板子OK6410-A
- 今天體驗(yàn)了一把網(wǎng)上繳費(fèi)~~
- [液位傳感器測(cè)評(píng)] 電容-非接觸式液位傳感器的再認(rèn)識(shí)
- 新年大家對(duì)于學(xué)習(xí)MSP430有何打算
- EEWORLD大學(xué)堂----TI傳感器的工業(yè)應(yīng)用
- TVS管選型計(jì)算,TVS元件的耗散功率大于按這個(gè)標(biāo)準(zhǔn)的波形功率就可以?這里測(cè)試波形...