stm32 低功耗设计[操作寄存器+库函数]
时间:11-25
来源:互联网
点击:
71 72 } User/stm32f10x_it.c
01 #include "stm32f10x_it.h" 02 #include "system.h" 03 04 #define LED1 PAout(4) 05 #define LED2 PAout(5) 06 #define LED3 PAout(6) 07 #define LED4 PAout(7) 08 09 10 voidEXTI0_IRQHandler(void) 11 { 12 LED4 = !LED4; 13 EXTI->PR = 1<0;//清除中断标志位 14 } 待机相关代码参见 system.c文件中
库函数操作
main.c
001 #include "stm32f10x.h" 002 #include "stdio.h" 003 004 #define PRINTF_ON 1 005 006 voidRCC_Configuration(void); 007 voidGPIO_Configuration(void); 008 voidNVIC_Configuration(void); 009 voidEXTI_Configuration(void); 010 voidIWDG_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 019 vu32 DelayTime = 10000000; 020 021 intmain(void) 022 { 023 RCC_Configuration(); 024 GPIO_Configuration(); 025 NVIC_Configuration(); 026 EXTI_Configuration(); 027 028 SysTick_Config(10000000); 029 030 while(--DelayTime); 031 032 #if PWR_MODE_Sleep //睡眠模式 033 034 PWR_EnterSTOPMode(PWR_Regulator_ON,PWR_STOPEntry_WFI);//唤醒后时钟变为内置8MHz 035 036 #elif PWR_MODE_DeepSleep //停机模式 037 038 PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);//唤醒后时钟变为内置8MHz 039 040 #elif PWR_MODE_STANDBY //待机模式 041 042 IWDG_Configuration();//设置为2s内不喂狗复位,使用独立看门狗唤醒 043 044 PWR_EnterSTANDBYMode();//唤醒后会初始化程序 045 046 #endif 047 048 while(1); 049 050 } 051 052 voidIWDG_Configuration(void) 053 { 054 RCC_LSICmd(ENABLE);//打开LSI 055 while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)==RESET); 056 057 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 058 IWDG_SetPrescaler(IWDG_Prescaler_32); 059 IWDG_SetReload(2000);//max 0xFFF 0~4095 060 IWDG_ReloadCounter(); 061 IWDG_Enable(); 062 } 063 064 voidGPIO_Configuration(void) 065 { 066 GPIO_InitTypeDef GPIO_InitStructure; 067 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 068 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_7; 069 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 070 GPIO_Init(GPIOA , &GPIO_InitStructure); 071 072 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; 073 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 074 GPIO_Init(GPIOA , &GPIO_InitStructure); 075 076 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; 077 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 078 GPIO_Init(GPIOA , &GPIO_InitStructure); 079 080 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; 081 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 082 GPIO_Init(GPIOA , &GPIO_InitStructure); 083 084 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0); 085 } 086 087 088 voidRCC_Configuration(void) 089 { 090 /* 定义枚举类型变量 HSEStartUpStatus */ 091 ErrorStatus HSEStartUpStatus; 092 093 /* 复位系统时钟设置*/ 094 RCC_DeInit(); 095 /* 开启HSE*/ 096 RCC_HSEConfig(RCC_HSE_ON); 097 /* 等待HSE起振并稳定*/ 098 HSEStartUpStatus = RCC_WaitForHSEStartUp(); 099 /* 判断HSE起是否振成功,是则进入if()内部 */ 100 if(HSEStartUpStatus == SUCCESS) 101 { 102 /* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */ 103 RCC_HCLKConfig(RCC_SYSCLK_Div1); 104 /* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */ 105 RCC_PCLK2Config(RCC_HCLK_Div1); 106 /* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */ 107 RCC_PCLK1Config(RCC_HCLK_Div2); 108 /* 设置FLASH延时周期数为2 */ 109 FLASH_SetLatency(FLASH_Latency_2); 110 /* 使能FLASH预取缓存 */ 111 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); 112 /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */ 113 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); 114 /* 使能PLL */ 115 RCC_PLLCmd(ENABLE); 116 /* 等待PLL输出稳定 */ 117 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); 118 /* 选择SYSCLK时钟源为PLL */ 119 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); 120 /* 等待PLL成为SYSCLK时钟源 */ 121 while(RCC_GetSYSCLKSource() != 0x08); 122 } 123 /* 打开APB2总线上的GPIOA时钟*/ 124 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1, ENABLE);
stm32低功耗设计操作寄存器库函 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)