OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2867|回复: 2

stm32f103用RTC闹钟唤醒停止模式

[复制链接]

29

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2016-8-10
在线时间
51 小时
发表于 2016-11-8 12:25:36 | 显示全部楼层 |阅读模式
1金钱
#include "RTC.h"
void RTC_Configuration(void)

{

/*EnablePWRandBKPclocks*/

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);

/*AllowaccesstoBKPDomain*/

PWR_BackupAccessCmd(ENABLE);

/*ResetBackupDomain*/
BKP_DeInit();

/*EnableLSE*/


RCC_LSICmd(ENABLE);

/*WaittillLSEisready*/

while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)==RESET)

{}

/*SelectLSEasRTCClockSource*/

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

/*EnableRTCClock*/

RCC_RTCCLKCmd(ENABLE);

/*WaitforRTCregisterssynchronization*/

RTC_WaitForSynchro();

/*WaituntillastwriteoperationonRTCregistershasfinished*/

RTC_WaitForLastTask();

/*SetRTCprescaler:setRTCperiodto1sec*/

RTC_SetPrescaler(40000);
RTC_WaitForLastTask();

/*EnabletheRTCALARM*/

RTC_ITConfig(RTC_IT_ALR,ENABLE);

/*WaituntillastwriteoperationonRTCregistershasfinished*/

RTC_WaitForLastTask();
}
void RTC_Initializes(uint32_t wake_up)
{   
  if( wake_up <5       ) wake_up = 5;         //5s
  if( wake_up > 24*3600  ) wake_up = 24*3600;   //24h

  RTC_Configuration();
  RTC_SetCounter(0);
  RTC_WaitForLastTask();
  RTC_SetAlarm(wake_up);//唤醒时间
  RTC_WaitForLastTask();
  RTC_NVIC_Config();
  RTC_Alarm_EXIT();
}
void RTC_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn;  //闹钟中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //比RTC全局中断的优先级高
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void RTC_Alarm_EXIT(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_ClearITPendingBit(EXTI_Line17);
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
void
App_cpu_sleep(uint32_t wake_up)
{
   RTC_Initializes(wake_up);

   Befor_goto_Standby();
  //PWR_EnterSTANDBYMode();
   PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFE);//STOP模式
}
void Befor_goto_Standby(void)
{
       uint32_t pin = 1;


       GPIO_InitTypeDef GPIO_InitStructure;
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
       GPIO_Init(GPIOA, &GPIO_InitStructure);
       GPIO_Init(GPIOC, &GPIO_InitStructure);

       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
       GPIO_Init(GPIOB, &GPIO_InitStructure);

       GPIO_ResetBits(GPIOB,GPIO_Pin_7);

       pin=  GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_7);

}
这是我写的代码,为什么停止时候电流能达到7mA呢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

29

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2016-8-10
在线时间
51 小时
 楼主| 发表于 2016-11-8 13:00:01 | 显示全部楼层
我感觉并没有进入停止模式 , 要怎么才能进入呢? 我把所有用到的中断 全部清除了一遍 还是不行
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-11-10 00:10:06 | 显示全部楼层
论坛搜索下,貌似有人发过代码
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 04:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表