久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16587|回復: 12
收起左側

STM32學習-功耗控制sleep模式

  [復制鏈接]
ID:81272 發表于 2015-5-27 16:33 | 顯示全部樓層 |閱讀模式
完整程序源代碼工程文件下載地址: 功耗控制sleep模式.rar (122.79 KB, 下載次數: 120)

  1. /*******************************************************************************

  2. STM32學習日志(15)---- 功耗控制 sleep 模式

  3. 編譯環境:        EWARM V5.30
  4. STM32 FW:        V3.0.0
  5. 作者        :        szlihongtao
  6. 時間        :          2016-07-17
  7. 說明        :   全速運行,實測功耗為31mA,sleep,實測功耗為10mA,即降低了21mA的功耗
  8. *******************************************************************************/
  9. #include "stm32f10x.h"
  10. #include "stm32_m.h"
  11. //******************************************************************************
  12. INT8U f_tb;
  13. //******************************************************************************
  14. static void delayms(INT16U cnt)
  15. {
  16.         INT16U i;

  17.         while(cnt--)
  18.                 for (i=0; i<7333; i++);
  19. }
  20. //******************************************************************************
  21. // 時鐘設置初始化
  22. //******************************************************************************
  23. static void RCC_Configuration(void)
  24. {
  25.   ErrorStatus HSEStartUpStatus;
  26. /*
  27. RCC_AdjustHSICalibrationValue 調整內部高速晶振(HSI)校準值
  28. RCC_ITConfig 使能或者失能指定的RCC中斷
  29. RCC_ClearFlag 清除RCC的復位標志位
  30. RCC_GetITStatus 檢查指定的RCC中斷發生與否
  31. RCC_ClearITPendingBit 清除RCC的中斷待處理位
  32. */
  33.           /* RCC system reset(for debug purpose) */
  34.           // 時鐘系統復位
  35.           RCC_DeInit();

  36.         // 使能外部的8M晶振
  37.         // 設置外部高速晶振(HSE)
  38.           /* Enable HSE */
  39.           RCC_HSEConfig(RCC_HSE_ON);

  40.         // 使能或者失能內部高速晶振(HSI)
  41.         RCC_HSICmd(DISABLE);

  42.         // 等待HSE起振
  43.         // 該函數將等待直到HSE就緒,或者在超時的情況下退出
  44.           /* Wait till HSE is ready */
  45.           HSEStartUpStatus = RCC_WaitForHSEStartUp();

  46.           if(HSEStartUpStatus == SUCCESS)
  47.           {
  48.             /* HCLK = SYSCLK */
  49.                 // 設置AHB時鐘(HCLK)
  50.             RCC_HCLKConfig(RCC_SYSCLK_Div1);        // 72 MHz

  51.             /* PCLK1 = HCLK/2 */
  52.                 // 設置低速AHB時鐘(PCLK1)
  53.             RCC_PCLK1Config(RCC_HCLK_Div2);        // 36 MHz

  54.             /* PCLK2 = HCLK */
  55.                 // 設置高速AHB時鐘(PCLK2)
  56.             RCC_PCLK2Config(RCC_HCLK_Div1);        // 72 MHz

  57.             /* ADCCLK = PCLK2/8 */
  58.                 // 設置ADC時鐘(ADCCLK)
  59.                    RCC_ADCCLKConfig(RCC_PCLK2_Div8);

  60.                 // 設置USB時鐘(USBCLK)
  61.                 // USB時鐘 = PLL時鐘除以1.5
  62.                 RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);

  63.                 // 設置外部低速晶振(LSE)
  64.                 RCC_LSEConfig(RCC_LSE_OFF);

  65.                 // 使能或者失能內部低速晶振(LSI)
  66.                 // LSE晶振OFF
  67.                 RCC_LSICmd(DISABLE);

  68.                 // 設置RTC時鐘(RTCCLK)
  69.                 // 選擇HSE時鐘頻率除以128作為RTC時鐘
  70.                 RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128);

  71.                 // 使能或者失能RTC時鐘
  72.                 // RTC時鐘的新狀態
  73.                 RCC_RTCCLKCmd(DISABLE);

  74.             /* Flash 2 wait state */
  75.             FLASH_SetLatency(FLASH_Latency_2);

  76.             /* Enable Prefetch Buffer */
  77.             FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

  78.             /* PLLCLK = 8MHz * 9 = 72 MHz */
  79.                 // 設置PLL時鐘源及倍頻系數
  80.             RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

  81.             /* Enable PLL */
  82.                 // 使能或者失能PLL
  83.             RCC_PLLCmd(ENABLE);

  84.             /* Wait till PLL is ready */
  85.                 // 檢查指定的RCC標志位設置與否
  86.             while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
  87.             {
  88.             }

  89.             /* Select PLL as system clock source */
  90.                 // 設置系統時鐘(SYSCLK)
  91.             RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

  92.             /* Wait till PLL is used as system clock source */
  93.                 // 返回用作系統時鐘的時鐘源
  94.             while(RCC_GetSYSCLKSource() != 0x08)
  95.             {
  96.             }
  97.   }

  98.         // 使能或者失能AHB外設時鐘
  99.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1
  100.                                                         |RCC_AHBPeriph_DMA2
  101.                                                         |RCC_AHBPeriph_SRAM
  102.                                                         |RCC_AHBPeriph_FLITF
  103.                                                         |RCC_AHBPeriph_CRC
  104.                                                         |RCC_AHBPeriph_FSMC
  105.                                                         |RCC_AHBPeriph_SDIO,DISABLE);
  106.         // 使能或者失能APB1外設時鐘
  107.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_ALL,DISABLE);

  108.         // 強制或者釋放高速APB(APB2)外設復位
  109.         RCC_APB2PeriphResetCmd(RCC_APB2Periph_ALL,ENABLE);
  110.         // 退出復位狀態
  111.         RCC_APB2PeriphResetCmd(RCC_APB2Periph_ALL,DISABLE);

  112.         // 強制或者釋放低速APB(APB1)外設復位
  113.         RCC_APB1PeriphResetCmd(RCC_APB1Periph_ALL,ENABLE);
  114.         // 退出復位狀態
  115.         RCC_APB1PeriphResetCmd(RCC_APB1Periph_ALL,DISABLE);

  116.         // 強制或者釋放后備域復位
  117.         RCC_BackupResetCmd(ENABLE);

  118.         // 使能或者失能時鐘安全系統
  119.         RCC_ClockSecuritySystemCmd(DISABLE);
  120. }
  121. //******************************************************************************
  122. // SysTick設置初始化
  123. //******************************************************************************
  124. static void SysTick_Config1(void)
  125. {
  126.         #define SystemFreq                72000000.0        // 單位為Hz
  127.         #define TB_SysTick                50000.0                // 單位為uS

  128.         INT32U ticks;

  129.         ticks=(INT32U)((TB_SysTick/1000000.0)*SystemFreq);
  130.         SysTick_Config(ticks);
  131. }//******************************************************************************
  132. // GPIO設置
  133. //******************************************************************************
  134. static void GPIO_Configuration(void)
  135. {
  136.         GPIO_InitTypeDef GPIO_InitStructure;

  137.         // 使能或者失能APB2外設時鐘
  138.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  139.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  140.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  141.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  142.           GPIO_Init(GPIOB, &GPIO_InitStructure);
  143. }
  144. //******************************************************************************
  145. static void myPWR_EnterSleepMode(void)
  146. {
  147. /*
  148. 通過執行WFI或WFE指令進入睡眠狀態。根據Cortex.-M3系統控制寄存器中的SLEEPONEXIT
  149. 位的值,有兩種選項可用于選擇睡眠模式進入機制:
  150. ● SLEEP-NOW:如果SLEEPONEXIT位被清除,當WRI或WFE被執行時,微控制器立即進
  151. 入睡眠模式。
  152. ● SLEEP-ON-EXIT:如果SLEEPONEXIT位被置位,系統從最低優先級的中斷處理程序中退
  153. 出時,微控制器就立即進入睡眠模式。
  154. */
  155.         NVIC_SystemLPConfig(NVIC_LP_SLEEPDEEP,DISABLE);
  156.         NVIC_SystemLPConfig(NVIC_LP_SLEEPONEXIT,DISABLE);
  157.         __WFI();                                                 /* Request Wait For Interrupt */
  158. }
  159. //******************************************************************************
  160. // 主程序
  161. //******************************************************************************
  162. int main(void)
  163. {
  164.         INT8U i;

  165.         RCC_Configuration();
  166.           GPIO_Configuration();
  167.         SysTick_Config1();

  168.         for (i=0;i<100;++i)                        // 全速運行,實測功耗為31mA
  169.         {
  170.                 GPIOB->ODR ^= GPIO_Pin_1;        // led toogle
  171.                 delayms(50);
  172.         }
  173. //------------------------------------------------------------------------------
  174.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
  175.         for (;;)
  176.         {
  177.                 myPWR_EnterSleepMode();        // sleep,實測功耗為10mA
  178.                 if (f_tb)
  179.                 {
  180.                         f_tb=0;
  181.                         GPIOB->ODR ^= GPIO_Pin_1;// led toogle
  182.                 }
  183.         }
  184. }
  185. //******************************************************************************
  186. #ifdef  USE_FULL_ASSERT

  187. /**
  188.   * @brief  Reports the name of the source file and the source line number
  189.   *   where the assert_param error has occurred.
  190.   * @param file: pointer to the source file name
  191.   * @param line: assert_param error line source number
  192.   * @retval : None
  193.   */
  194. void assert_failed(uint8_t* file, uint32_t line)
  195. {
  196.   /* User can add his own implementation to report the file name and line number,
  197.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  198.   /* Infinite loop */
  199.   while (1)
  200.   {
  201.   }
  202. }
  203. #endif

  204. /**
  205.   * @}
  206.   */
  207. //******************************************************************************
  208. /******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
  209. //******************************************************************************

復制代碼


回復

使用道具 舉報

ID:96950 發表于 2015-11-24 15:03 | 顯示全部樓層
請教樓主,您的功耗是如何測量的?
回復

使用道具 舉報

ID:1 發表于 2015-12-7 06:25 | 顯示全部樓層
Jsir 發表于 2015-11-24 15:03
請教樓主,您的功耗是如何測量的?

用萬用表測電流
回復

使用道具 舉報

ID:99124 發表于 2015-12-10 13:20 | 顯示全部樓層
sleep下systick停不停啊?
回復

使用道具 舉報

ID:114936 發表于 2016-4-18 14:40 | 顯示全部樓層
謝謝分享,
回復

使用道具 舉報

ID:138166 發表于 2016-9-1 15:24 | 顯示全部樓層





完整程序源代碼工程文件下載地址:  功耗控制sleep模式.rar (122.79 KB, 下載次數: 26)   
回復

使用道具 舉報

ID:158012 發表于 2016-12-27 13:13 | 顯示全部樓層
kidlu1412 發表于 2016-9-1 15:24
**** 作者被禁止或刪除 內容自動屏蔽 ****

謝謝您的分享
回復

使用道具 舉報

ID:161252 發表于 2017-1-11 09:15 | 顯示全部樓層
感謝樓主分享!!!
回復

使用道具 舉報

ID:232462 發表于 2018-1-5 16:57 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

ID:322741 發表于 2018-5-5 13:58 | 顯示全部樓層
感謝,正好可以參考參考
回復

使用道具 舉報

ID:475858 發表于 2019-9-18 13:48 | 顯示全部樓層
分享非常好
回復

使用道具 舉報

ID:384006 發表于 2020-6-11 00:25 | 顯示全部樓層
沒多大用
回復

使用道具 舉報

ID:777315 發表于 2020-6-12 15:00 | 顯示全部樓層
這個功耗有多少??
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人免费 | 日本午夜网站 | 国产精品美女www | 美日韩一区二区 | 色婷婷综合成人av | 国产精品久久久久久久岛一牛影视 | 亚洲黄色av | 免费在线观看黄网站 | 久久国产亚洲 | 国产欧美精品一区二区 | 一区二区三区四区免费视频 | 国产一级毛片视频 | 国产一区在线免费观看 | 国产成人免费在线观看 | 一区二区三区四区国产 | 国产一级视频在线播放 | 91视频久久| 日本不卡视频在线播放 | 免费黄色网址视频 | 香蕉久久久| 天天拍天天操 | 中文字幕亚洲国产 | 亚洲成人午夜在线 | 99九九视频 | 欧美精产国品一二三区 | 黑人精品欧美一区二区蜜桃 | 中文字幕成人免费视频 | 狠狠ri| 国产日韩一区二区三区 | 国产在线高清 | 久久免费国产 | va在线| 日日摸夜夜添夜夜添特色大片 | 日韩高清av | 国产色网| 91视频在线看 | 久久天天综合 | 欧美精品福利 | 国产成人精品视频在线观看 | 国产精品精品视频一区二区三区 | 久久婷婷国产香蕉 |