我之前项目里低功耗处理部分的代码, 你参考下(STM8L052R8) /******************************************************************************* ****输入:无 ****输出:无 ****端口:无 ****说明:低功耗模式开启 ****举例:lowpower_mode_on();//进入低功耗模式 ****作者: *******************************************************************************/ void lowpower_mode_on(void) { //低功耗模式下的GPIO配置 //设置PA7,PA6,PA5,PA4,PA2为推挽输出低电平,速率2MHz PA_DDR |= 0xf4; //0b1111-0100 PA_CR1 |= 0xf4; //0b1111-0100 PA_CR2 &= 0x0b; //0b0000-1011 PA_ODR &= 0x0b; //0b0000-1011 //设置PB7,PB6,PB5,PB4,PB3,PB2,PB1,PB0为推挽输出低电平,速率2MHz PB_DDR |= 0xff; //0b1111-1111 PB_CR1 |= 0xff; //0b1111-1111 PB_CR2 &= 0x00; //0b0000-0000 PB_ODR &= 0x00; //0b0000-0000 //设置PC7,PC4,PC3,PC2,PC1,PC0为推挽输出低电平,速率2MHz PC_DDR |= 0x9f; //0b1011-1111 PC_CR1 |= 0x9f; //0b1011-1111 PC_CR2 &= 0x60; //0b0100-0000 PC_ODR &= 0x60; //0b0100-0000 //PC5设置为浮空输入不带中断模式,不能设置为推挽输出低电平模式 PC_DDR_DDR5 = 0; //输入 PC_CR1_C15 = 0; //浮空 PC_CR2_C25 = 0; //不带中断 //设置PD7,PD6,PD5,PD4,PD3,PD2,PD1,PD0为推挽输出低电平,速率2MHz PD_DDR |= 0xff; //0b1111-1111 PD_CR1 |= 0xff; //0b1111-1111 PD_CR2 &= 0x00; //0b0000-0000 PD_ODR &= 0x00; //0b0000-0000 //设置PE7,PE6,PE5,PE4,PE3,PE2,PE1,PE0为推挽输出低电平,速率2MHz PE_DDR |= 0xff; //0b1111-1111 PE_CR1 |= 0xff; //0b1111-1111 PE_CR2 &= 0x00; //0b0000-0100 PE_ODR &= 0x00; //0b0000-0100 //设置PF7,PF6,PF5,PF4,PF1,PF0为推挽输出低电平,速率2MHz PF_DDR |= 0xf3; //0b1111-0011 PF_CR1 |= 0xf3; //0b1111-0011 PF_CR2 &= 0x0c; //0b0000-1100 PF_ODR &= 0x0c; //0b0000-1100 //设置PG7,PG6,PG5,PG4,PG3,PG2,PG1,PG0为推挽输出低电平,速率2MHz PG_DDR |= 0xff; //0b1111-1111 PG_CR1 |= 0xff; //0b1111-1111 PG_CR2 &= 0x00; //0b0000-0000 PG_ODR &= 0x00; //0b0000-0000 //复位按键(外部中断,用于低功耗唤醒)端口初始化-PA3,低电平有效 PA_DDR_DDR3 = 0; //输入 PA_CR1_C13 = 1; //上拉 PA_CR2_C23 = 1; //带中断 CPU_CCR = 0X28; //等级3,0最低,3最高 ITC_SPR3_VECT11SPR = 0x01; //中断等级1(0低-->3高) EXTI_CR1_P3IS = 0x02; //设置lin3中断线上的触发方式为 下降沿触发 //充电检测(外部中断)端口初始化-PC6,高电平有效 PC_DDR_DDR6 = 0; //输入 PC_CR1_C16 = 0; //浮空 PC_CR2_C26 = 1; //带中断 CPU_CCR = 0X28; //等级3, 0最低,3最高 ITC_SPR4_VECT14SPR = 0x01; //中断等级1(0低-->3高) EXTI_CR2_P6IS = 0x01; //设置lin6中断线上的触发方式为 上升沿触发 //低功耗模式下关掉ADC ADC1_CR1_ADON = 0; //关闭ADC转换 //低功耗模式下,USART1恢复默认状态 USART1_CR1_USARTD = 1; //关闭USART1,低功耗模式要设置为1 USART1_CR2_TIEN = 0; //关闭USART1发送中断 USART1_CR2_RIEN = 0; //关闭USART1接收中断 USART1_CR2_TEN = 0; //关闭USART1发送 USART1_CR2_REN = 0; //关闭USART1接收 //低功耗模式下,USART3恢复默认状态 USART3_CR1_USARTD = 1; //关闭USART3,低功耗模式要设置为1 USART3_CR2_TIEN = 0; //关闭USART3发送中断 USART3_CR2_RIEN = 0; //关闭USART3接收中断 USART3_CR2_TEN = 0; //关闭USART3发送 USART3_CR2_REN = 0; //关闭USART3接收 //关闭主板电源,减小主电源消耗 MAIN_PWR_CTRL = 0; //关闭主板电源 //打开总中断,为从HALT模式下用外部中断唤醒做准备 asm("rim"); //rim为开中断,sim为关中断 //关闭内部参考电压,降低MCU电源消耗 PWR_CSR2 = 0x02; //关闭片内系统外设时钟 CLK_PCKENR1 = 0x00; //关闭片内外设时钟 CLK_PCKENR2 = 0x80; //关闭片内外设时钟,保留BootROM CLK_PCKENR3 = 0x00; //关闭片内外设时钟 //先清除中断标志,防止干扰进入HALT模式 EXTI_SR1_P3F = 1; //清除lin3线上中断标志 EXTI_SR1_P5F = 1; //清除lin5线上中断标志 EXTI_SR1_P6F = 1; //清除lin6线上中断标志 EXTI_SR1_P7F = 1; //清除lin7线上中断标志 TIM2_SR1_UIF = 0; //清除中断标志 //进入HALT模式,只有外部中断可以唤醒 asm("halt"); }
所在话题
参与活动
-
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16