国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

歷史上的今天

今天是:2025年07月16日(星期三)

2019年07月16日 | STM32開發(fā)筆記29:STM32L0低功耗設(shè)計(jì)——STOP_RTC模式的真實(shí)功耗

發(fā)布者:AngelicHeart 來源: eefocus關(guān)鍵字:STM32L0  低功耗設(shè)計(jì)  STOP_RTC模式  真實(shí)功耗 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

單片機(jī)型號(hào):STM32L053R8T6


   本例程測(cè)試STOP_RTC模式的真實(shí)功耗,主程序如下:


int main(void)

{

while(1)

{

    HAL_Delay(5000);

Target.HAL.Rtc.EnterStopRtcMode();

Target.HAL.SystemClock.SetMode(2);

  }

}

    系統(tǒng)進(jìn)入主循環(huán)后,先進(jìn)行5秒延時(shí),然后進(jìn)入低功耗模式,低功耗模式設(shè)置的RTC時(shí)間為4秒,4秒過后退出低功耗模式,重新進(jìn)行時(shí)鐘設(shè)置。


    在進(jìn)入main函數(shù)之前,執(zhí)行了3個(gè)操作:時(shí)鐘設(shè)置、低功耗設(shè)置和RTC設(shè)置,如下面程序:


class CHAL

{

public:

CSystemClock SystemClock;

CSystemLowPower SystemLowPower;

CRtc Rtc;

};

    時(shí)鐘設(shè)置相關(guān)程序如下:


void CClock::SetMode(uint8_t mode)

{

RCC_OscInitTypeDef RCC_OscInitStruct;

RCC_ClkInitTypeDef RCC_ClkInitStruct;

RCC_PeriphCLKInitTypeDef PeriphClkInit;

__HAL_RCC_PWR_CLK_ENABLE();

if (mode  == 0)

{

//Configure the main internal regulator output voltage 

__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

 

//Initializes the CPU, AHB and APB busses clocks 

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;

RCC_OscInitStruct.HSEState = RCC_HSE_ON;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_8;

RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_3;

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

{

Target.ErrorHandler(__FILE__, __LINE__);

}

 

//Initializes the CPU, AHB and APB busses clocks 

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

 

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)

{

Target.ErrorHandler(__FILE__, __LINE__);

}

 

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_USART2;

PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;

PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;

if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)

{

Target.ErrorHandler(__FILE__, __LINE__);

}

 

//Configure the Systick interrupt time 

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

 

//Configure the Systick 

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

 

//SysTick_IRQn interrupt configuration

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

}

else if (mode  == 1)

{

//Configure the main internal regulator output voltage 

__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

 

//Initializes the CPU, AHB and APB busses clocks 

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;

RCC_OscInitStruct.HSEState = RCC_HSE_ON;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_8;

RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_3;

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

{

Target.ErrorHandler(__FILE__, __LINE__);

}

 

//Initializes the CPU, AHB and APB busses clocks 

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

 

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)

{

Target.ErrorHandler(__FILE__, __LINE__);

}

 

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_USART2

|RCC_PERIPHCLK_USB;

PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;

PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;

PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL;

if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)

{

Target.ErrorHandler(__FILE__, __LINE__);

}

 

//Configure the Systick interrupt time 

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

 

//Configure the Systick 

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

 

//SysTick_IRQn interrupt configuration

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

}

else if (mode == 2)

{

//Configure the main internal regulator output voltage 

__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

 

//Initializes the CPU, AHB and APB busses clocks 

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI;

RCC_OscInitStruct.HSEState = RCC_HSE_ON;

RCC_OscInitStruct.LSIState = RCC_LSI_ON;

RCC_OscInitStruct.HSIState = RCC_HSI_ON;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_8;

RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_3;

RCC_OscInitStruct.HSICalibrationValue = 0x10; //HSIDT?y?μ

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

{

Target.ErrorHandler(__FILE__, __LINE__);

}

 

//Initializes the CPU, AHB and APB busses clocks 

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)

{

Target.ErrorHandler(__FILE__, __LINE__);

}

 

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_USART2|RCC_PERIPHCLK_RTC;

PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;

PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;

PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;

if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)

{

Target.ErrorHandler(__FILE__, __LINE__);

}

 

//Configure the Systick interrupt time 

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

 

//Configure the Systick 

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

 

//SysTick_IRQn interrupt configuration

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

}

}

    低功耗設(shè)置相關(guān)程序如下:


CLowPower::CLowPower(uint8_t mode)

{

if (mode == 1)

{

GPIO_InitTypeDef GPIO_InitStructure;

HAL_PWREx_EnableUltraLowPower(); //ê1?ü3?μí1|o?

    HAL_PWREx_EnableFastWakeUp(); //ê1?ü?ì?ù??D?

__HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI); //??HSIê±?ó×÷?a??D?oóμ??÷ê±?ó

//???ùóDòy?????????a?£?aê?è??£ê?

    __HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();

__HAL_RCC_GPIOC_CLK_ENABLE();

__HAL_RCC_GPIOD_CLK_ENABLE();

__HAL_RCC_GPIOH_CLK_ENABLE();  

GPIO_InitStructure.Pin = GPIO_PIN_All;

GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;

GPIO_InitStructure.Pull = GPIO_NOPULL;

HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); 

HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);

HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);

HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);

HAL_GPIO_Init(GPIOH, &GPIO_InitStructure);

__HAL_RCC_GPIOA_CLK_DISABLE();

__HAL_RCC_GPIOB_CLK_DISABLE();

__HAL_RCC_GPIOC_CLK_DISABLE();

__HAL_RCC_GPIOD_CLK_DISABLE();

__HAL_RCC_GPIOH_CLK_DISABLE();

}

}

    RTC設(shè)置相關(guān)程序如下:


CRtc::CRtc(void)

{

  this->hRTC.Instance = RTC;

pRTC = &this->hRTC;

this->hRTC.Init.HourFormat = RTC_HOURFORMAT_24;

this->hRTC.Init.AsynchPrediv = 124;

this->hRTC.Init.SynchPrediv = 295;

this->hRTC.Init.OutPut = RTC_OUTPUT_DISABLE;

this->hRTC.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE; //2???DDê?3?òy????ó3é?

this->hRTC.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;

this->hRTC.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;

if (HAL_RTC_Init(&this->hRTC) != HAL_OK)

{

Target.ErrorHandler(__FILE__, __LINE__);

}

}

    程序運(yùn)行后,5秒為正常功耗,4秒為低功耗,測(cè)得實(shí)際功耗2.4uA,手冊(cè)中指出的STOP_RTC模式為1uA,產(chǎn)生差錯(cuò)的原因在《STM32L0低功耗設(shè)計(jì)3: Stop模式下的真實(shí)功耗》中已經(jīng)介紹過,2.4uA已經(jīng)能夠滿足項(xiàng)目本身的設(shè)計(jì)了,還算不錯(cuò)。



關(guān)鍵字:STM32L0  低功耗設(shè)計(jì)  STOP_RTC模式  真實(shí)功耗 引用地址:STM32開發(fā)筆記29:STM32L0低功耗設(shè)計(jì)——STOP_RTC模式的真實(shí)功耗

上一篇:STM32開發(fā)筆記30:STM32L0低功耗設(shè)計(jì)-STOP_RTC模式下的休眠時(shí)間
下一篇:STM32開發(fā)筆記28: 中斷請(qǐng)求的移植與處理

推薦閱讀

智能網(wǎng)聯(lián)汽車正在全球掀起一股技術(shù)研究、產(chǎn)業(yè)布局和戰(zhàn)略投資的新熱潮,值得汽車從業(yè)人員持續(xù)地關(guān)注和重視。我們有幸邀請(qǐng)到了中國工程院院士、中國汽車工程學(xué)會(huì)理事長(zhǎng)李駿為這本書寫序,代表企業(yè)和產(chǎn)業(yè)對(duì)目前智能網(wǎng)聯(lián)汽車發(fā)展的態(tài)勢(shì)以及中國在這場(chǎng)變革中面臨的機(jī)遇和挑戰(zhàn)進(jìn)行了深入剖析。智能汽車迅速興起,泥沙俱下,整個(gè)行業(yè)要走向健康發(fā)展,需要厘清概念...
智能世界正加速走來,網(wǎng)絡(luò)連接將成為無處不在的自然存在。華為在北京舉辦智簡(jiǎn)全光網(wǎng)戰(zhàn)略及系列重磅產(chǎn)品發(fā)布會(huì)。此次發(fā)布會(huì)上,華為重磅發(fā)布了其智簡(jiǎn)全光網(wǎng)戰(zhàn)略,全場(chǎng)景OptiXstar光終端系列產(chǎn)品、業(yè)界唯一商用級(jí)全光交叉OXC產(chǎn)品。 華為傳送與接入產(chǎn)品線總裁靳玉志指出:“全球光產(chǎn)業(yè)正面臨歷史性的發(fā)展機(jī)遇,我們需要基于未來的業(yè)務(wù)需求來思考產(chǎn)業(yè)發(fā)展方向...
新加坡國立大學(xué)(NUS)的兩名研究人員,同時(shí)也是英特爾神經(jīng)擬態(tài)研究社區(qū)(INRC)的成員發(fā)表了最新研究結(jié)果,表明在機(jī)器人領(lǐng)域,與基于事件的視覺和觸覺感知相結(jié)合,英特爾神經(jīng)擬態(tài)計(jì)算大有可為。這項(xiàng)工作著重介紹了與目前只有視覺的系統(tǒng)相比,將觸覺引入機(jī)器人技術(shù)能夠顯著提升系統(tǒng)能力和功能,并且神經(jīng)擬態(tài)芯片在處理此類感官數(shù)據(jù)方面能夠超越傳統(tǒng)架構(gòu)。 ...
局部放電是絕緣介質(zhì)中的一種電氣放電,這種放電僅限制在被測(cè)介質(zhì)中一部分且只使導(dǎo)體間的絕。緣局部橋接這種放電可能發(fā)生或可能不發(fā)生于導(dǎo)體的鄰近電力設(shè)備絕緣中的某些薄弱部位在強(qiáng) 電場(chǎng)的作用下發(fā)生局部放電是高壓絕緣中普遍存在的問題雖然局部放電一般不會(huì)引起絕緣的穿透性擊穿但可以導(dǎo)致電介質(zhì)特別是有機(jī)電介質(zhì)的,局部損壞若局部放電長(zhǎng)期存在在一定條...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved