DS18B20+STANDBY模式

//进入Standby模式
void Sys_Enter_Standby(void)
{

   RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);	
   RCC_APB2PeriphResetCmd(0X01FC,DISABLE);	
   PWR_EnterSTANDBYMode();

}

//RTC中断服务程序
void RTC_IRQHandler(void)
{

 LED_Init();	
 if(RTC_GetITStatus(RTC_IT_ALR)!=RESET) 
 {
	RTC_ClearITPendingBit(RTC_IT_ALR);
	RTC_WaitForLastTask();
	EXTI_ClearITPendingBit(EXTI_Line17);
	LED0=0;
    delay_ms(200);

	RTC_SetAlarm(4+RTC_GetCounter());	  
	RTC_WaitForLastTask();
}

}

//RTC参数初始化
void RTC_Init(void)
{

NVIC_InitTypeDef NVIC_InitSrtucture;
EXTI_InitTypeDef EXTI_InitStructure;

if(BKP_ReadBackupRegister(BKP_DR1)!=0x1016)
{
   RCC_APB1PeriphClockCmd (RCC_APB1Periph_PWR |     
   RCC_APB1Periph_BKP,ENABLE );

   PWR_BackupAccessCmd(ENABLE);
   BKP_DeInit ();

   RCC_LSEConfig (RCC_LSE_ON);

   while(!RCC_GetFlagStatus (RCC_FLAG_HSERDY)) {}

   RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
   RCC_RTCCLKCmd(ENABLE);

   RTC_WaitForSynchro();
   RTC_WaitForLastTask();

   RTC_SetPrescaler(32767);
   RTC_WaitForLastTask();
	
   RTC_SetCounter(0);
   RTC_WaitForLastTask(); 
   RTC_SetAlarm(4);
   RTC_WaitForLastTask(); 	

   RTC_ITConfig(RTC_IT_ALR,ENABLE);
   RTC_WaitForLastTask();  
}
else
{
    RTC_WaitForSynchro();//??RTC???????
    RTC_ITConfig(RTC_IT_ALR, ENABLE);//??RTC???
    RTC_WaitForLastTask(); 
}
	

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

NVIC_InitSrtucture.NVIC_IRQChannel=RTC_IRQn;
NVIC_InitSrtucture.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitSrtucture.NVIC_IRQChannelSubPriority=1;
NVIC_InitSrtucture.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitSrtucture);
	
EXTI_ClearITPendingBit(EXTI_Line17);
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);	

}

//主程序
int main(void)
{

short temperature;
u8 t0,t1,t2;  
u8 t4;	

delay_init();
LED_Init();
LED1=0;
uart_init(115200);//初始化Uart,设置波特率115200
while(DS18B20_Init()) {}//初始化DS818B20

temperature=DS18B20_Get_Temp();
if(temperature<0)
{
	temperature=-temperature;					//变正数
    t4=49;     //符号位为1
}
else
{
    t4=48;//符号位为0
}
	t0=temperature%10+48;//小数位
    temperature=temperature/10;
	t1=temperature%10+48;//个位
	temperature=temperature/10;
	t2=temperature%10+48;//十位
	
	//传输温度	
	delay_ms(1);
	USART_SendData(USART1,t4);
	delay_ms(1);
	USART_SendData(USART1,t2);
	delay_ms(1);
	USART_SendData(USART1,t1);
	delay_ms(1);
	USART_SendData(USART1,t0);
	delay_ms(1);
	USART_SendData(USART1,0x0d);
	delay_ms(1);
	USART_SendData(USART1,0x0a);
	delay_ms(1);

   RTC_Init();//开始计时,定时唤醒
   Sys_Enter_Standby();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值