<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > stm32 低功耗設(shè)計[操作寄存器+庫函數(shù)]

          stm32 低功耗設(shè)計[操作寄存器+庫函數(shù)]

          作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          庫函數(shù)操作
          main.c
          001#include "stm32f10x.h"
          002#include "stdio.h"
          003
          004#define PRINTF_ON 1
          005
          006voidRCC_Configuration(void);
          007voidGPIO_Configuration(void);
          008voidNVIC_Configuration(void);
          009voidEXTI_Configuration(void);
          010voidIWDG_Configuration(void);
          011
          012#define PWR_MODE_Sleep 0 //開啟睡眠模式
          013
          014#define PWR_MODE_DeepSleep 1 //開啟停機模式
          015
          016#define PWR_MODE_STANDBY 0 //開啟待機模式
          017
          018
          019vu32 DelayTime = 10000000;
          020
          021intmain(void)
          022{
          023RCC_Configuration();
          024GPIO_Configuration();
          025NVIC_Configuration();
          026EXTI_Configuration();
          027
          028SysTick_Config(10000000);
          029
          030while(--DelayTime);
          031
          032#if PWR_MODE_Sleep //睡眠模式
          033
          034PWR_EnterSTOPMode(PWR_Regulator_ON,PWR_STOPEntry_WFI);//喚醒后時鐘變?yōu)閮?nèi)置8MHz
          035
          036#elif PWR_MODE_DeepSleep //停機模式
          037
          038PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);//喚醒后時鐘變?yōu)閮?nèi)置8MHz
          039
          040#elif PWR_MODE_STANDBY //待機模式
          041
          042IWDG_Configuration();//設(shè)置為2s內(nèi)不喂狗復(fù)位,使用獨立看門狗喚醒
          043
          044PWR_EnterSTANDBYMode();//喚醒后會初始化程序
          045
          046#endif
          047
          048while(1);
          049
          050}
          051
          052voidIWDG_Configuration(void)
          053{
          054RCC_LSICmd(ENABLE);//打開LSI
          055while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)==RESET);
          056
          057IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
          058IWDG_SetPrescaler(IWDG_Prescaler_32);
          059IWDG_SetReload(2000);//max 0xFFF 0~4095
          060IWDG_ReloadCounter();
          061IWDG_Enable();
          062}
          063
          064voidGPIO_Configuration(void)
          065{
          066GPIO_InitTypeDef GPIO_InitStructure;
          067GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          068GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_7;
          069GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
          070GPIO_Init(GPIOA , &GPIO_InitStructure);
          071
          072GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
          073GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
          074GPIO_Init(GPIOA , &GPIO_InitStructure);
          075
          076GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
          077GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
          078GPIO_Init(GPIOA , &GPIO_InitStructure);
          079
          080GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
          081GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
          082GPIO_Init(GPIOA , &GPIO_InitStructure);
          083
          084GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
          085}
          086
          087
          088voidRCC_Configuration(void)
          089{
          090/* 定義枚舉類型變量 HSEStartUpStatus */
          091ErrorStatus HSEStartUpStatus;
          092
          093/* 復(fù)位系統(tǒng)時鐘設(shè)置*/
          094RCC_DeInit();
          095/* 開啟HSE*/
          096RCC_HSEConfig(RCC_HSE_ON);
          097/* 等待HSE起振并穩(wěn)定*/
          098HSEStartUpStatus = RCC_WaitForHSEStartUp();
          099/* 判斷HSE起是否振成功,是則進入if()內(nèi)部 */
          100if(HSEStartUpStatus == SUCCESS)
          101{
          102/* 選擇HCLK(AHB)時鐘源為SYSCLK 1分頻 */
          103RCC_HCLKConfig(RCC_SYSCLK_Div1);
          104/* 選擇PCLK2時鐘源為 HCLK(AHB) 1分頻 */
          105RCC_PCLK2Config(RCC_HCLK_Div1);
          106/* 選擇PCLK1時鐘源為 HCLK(AHB) 2分頻 */
          107RCC_PCLK1Config(RCC_HCLK_Div2);
          108/* 設(shè)置FLASH延時周期數(shù)為2 */
          109FLASH_SetLatency(FLASH_Latency_2);
          110/* 使能FLASH預(yù)取緩存 */
          111FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
          112/* 選擇鎖相環(huán)(PLL)時鐘源為HSE 1分頻,倍頻數(shù)為9,則PLL輸出頻率為 8MHz * 9 = 72MHz */
          113RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
          114/* 使能PLL */
          115RCC_PLLCmd(ENABLE);
          116/* 等待PLL輸出穩(wěn)定 */
          117while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
          118/* 選擇SYSCLK時鐘源為PLL */
          119RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
          120/* 等待PLL成為SYSCLK時鐘源 */
          121while(RCC_GetSYSCLKSource() != 0x08);
          122}
          123/* 打開APB2總線上的GPIOA時鐘*/
          124RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1, ENABLE);
          125
          126//RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
          127
          128RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
          129//RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP|RCC_APB1Periph_WWDG, ENABLE);
          130
          131}
          132
          133
          134voidUSART_Configuration(void)
          135{
          136USART_InitTypeDef USART_InitStructure;
          137USART_ClockInitTypeDef USART_ClockInitStructure;
          138
          139USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
          140USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
          141USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
          142USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
          143USART_ClockInit(USART1 , &USART_ClockInitStructure);
          144
          145USART_InitStructure.USART_BaudRate = 9600;
          146USART_InitStructure.USART_WordLength = USART_WordLength_8b;
          147USART_InitStructure.USART_StopBits = USART_StopBits_1;
          148USART_InitStructure.USART_Parity = USART_Parity_No;
          149USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
          150USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
          151USART_Init(USART1,&USART_InitStructure);
          152
          153USART_Cmd(USART1,ENABLE);
          154}
          155
          156voidEXTI_Configuration(void)
          157{
          158EXTI_InitTypeDef EXTI_InitStructure;
          159
          160EXTI_InitStructure.EXTI_Line = EXTI_Line0;
          161EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
          162EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
          163EXTI_InitStructure.EXTI_LineCmd = ENABLE;
          164
          165EXTI_Init(&EXTI_InitStructure);
          166
          167}
          168
          169voidNVIC_Configuration(void)
          170{
          171NVIC_InitTypeDef NVIC_InitStructure;
          172
          173NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
          174
          175NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
          176NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
          177NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
          178NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          179NVIC_Init(&NVIC_InitStructure);
          180}
          181
          182#if PRINTF_ON
          183
          184intfputc(intch,FILE*f)
          185{
          186USART_SendData(USART1,(u8) ch);
          187while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
          188returnch;
          189}
          190
          191#endif
          stm32f10x_it.c
          view source
          print?
          01#include "stm32f10x_it.h"
          02
          03#include "stdio.h"
          04
          05
          06voidEXTI0_IRQHandler(void)
          07{
          08GPIO_WriteBit(GPIOA,GPIO_Pin_7,Bit_SET);
          09
          10//EXTI_ClearFlag(EXTI_Line0); //清除此中斷標(biāo)志位,系統(tǒng)由于喚醒將直接復(fù)位
          11
          12}
          13
          14voidSysTick_Handler(void)
          15{
          16GPIO_WriteBit(GPIOA,GPIO_Pin_4,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_4)));
          17}


          上一頁 1 2 下一頁

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();