422 lines
11 KiB
C
Raw Permalink Normal View History

2021-07-28 13:15:22 +08:00
#include "rtc.h"
#include "delay.h"
#include "led.h"
//////////////////////////////////////////////////////////////////////////////////
/**************************************************************************************
//RTC<54><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
**************************************************************************************/
//////////////////////////////////////////////////////////////////////////////////
RTC_HandleTypeDef RTC_Handler; //RTC<54><43><EFBFBD><EFBFBD>
/**************************************************************************************
//RTCʱ<43><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//hour,min,sec:Сʱ,<2C><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>
//ampm:@RTC_AM_PM_Definitions:RTC_HOURFORMAT12_AM/RTC_HOURFORMAT12_PM
//<2F><><EFBFBD><EFBFBD>ֵ:SUCEE(1),<2C>ɹ<EFBFBD>
// ERROR(0),<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ģʽʧ<CABD><CAA7>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
**************************************************************************************/
HAL_StatusTypeDef RTC_Set_Time(u8 hour,u8 min,u8 sec,u8 ampm)
{
RTC_TimeTypeDef RTC_TimeStructure;
RTC_TimeStructure.Hours=hour;
RTC_TimeStructure.Minutes=min;
RTC_TimeStructure.Seconds=sec;
RTC_TimeStructure.TimeFormat=ampm;
RTC_TimeStructure.DayLightSaving=RTC_DAYLIGHTSAVING_NONE;
RTC_TimeStructure.StoreOperation=RTC_STOREOPERATION_RESET;
return HAL_RTC_SetTime(&RTC_Handler,&RTC_TimeStructure,RTC_FORMAT_BIN);
}
/**************************************************************************************
//RTC<54><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//year,month,date:<3A><>(0~99),<2C><>(1~12),<2C><>(0~31)
//week:<3A><><EFBFBD><EFBFBD>(1~7,0,<2C>Ƿ<EFBFBD>!)
//<2F><><EFBFBD><EFBFBD>ֵ:SUCEE(1),<2C>ɹ<EFBFBD>
// ERROR(0),<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ģʽʧ<CABD><CAA7>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
**************************************************************************************/
HAL_StatusTypeDef RTC_Set_Date(u8 year,u8 month,u8 date,u8 week)
{
RTC_DateTypeDef RTC_DateStructure;
RTC_DateStructure.Date=date;
RTC_DateStructure.Month=month;
RTC_DateStructure.WeekDay=week;
RTC_DateStructure.Year=year;
return HAL_RTC_SetDate(&RTC_Handler,&RTC_DateStructure,RTC_FORMAT_BIN);
}
/**************************************************************************************
//RTC<54><43>ʼ<EFBFBD><CABC>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>;
// 2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ģʽʧ<CABD><CAA7>;
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
**************************************************************************************/
u8 RTC_Init(void)
{
RTC_Handler.Instance=RTC;
RTC_Handler.Init.HourFormat=RTC_HOURFORMAT_24;//RTC<54><43><EFBFBD><EFBFBD>Ϊ24Сʱ<D0A1><CAB1>ʽ
RTC_Handler.Init.AsynchPrediv=0X7F; //RTC<54><EFBFBD><ECB2BD>Ƶϵ<C6B5><CFB5>(1~0X7F)
RTC_Handler.Init.SynchPrediv=0XFF; //RTCͬ<43><CDAC><EFBFBD><EFBFBD>Ƶϵ<C6B5><CFB5>(0~7FFF)
RTC_Handler.Init.OutPut=RTC_OUTPUT_DISABLE;
RTC_Handler.Init.OutPutPolarity=RTC_OUTPUT_POLARITY_HIGH;
RTC_Handler.Init.OutPutType=RTC_OUTPUT_TYPE_OPENDRAIN;
if(HAL_RTC_Init(&RTC_Handler)!=HAL_OK) return 2;
if(HAL_RTCEx_BKUPRead(&RTC_Handler,RTC_BKP_DR0)!=0X5050)//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
RTC_Set_Time(10,50,0,RTC_HOURFORMAT12_AM); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> ,<2C><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ʱ<EFBFBD><CAB1><EFBFBD>޸<EFBFBD>
RTC_Set_Date(17,8,13,7); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HAL_RTCEx_BKUPWrite(&RTC_Handler,RTC_BKP_DR0,0X5050);//<2F><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return 0;
}
/**************************************************************************************
//RTC<54>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ᱻHAL_RTC_Init()<29><><EFBFBD><EFBFBD>
//hrtc:RTC<54><43><EFBFBD><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
**************************************************************************************/
void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
__HAL_RCC_RTC_CLK_ENABLE(); //ʹ<><CAB9>RTCʱ<43><CAB1>
HAL_PWR_EnableBkUpAccess(); //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_LSE;//LSE<53><45><EFBFBD><EFBFBD>
RCC_OscInitStruct.PLL.PLLState=RCC_PLL_NONE;
RCC_OscInitStruct.LSEState=RCC_LSE_ON; //RTCʹ<43><CAB9>LSE
HAL_RCC_OscConfig(&RCC_OscInitStruct);
PeriphClkInitStruct.PeriphClockSelection=RCC_PERIPHCLK_RTC;//<2F><><EFBFBD><EFBFBD>ΪRTC
PeriphClkInitStruct.RTCClockSelection=RCC_RTCCLKSOURCE_LSE;//RTCʱ<43><CAB1>ԴΪLSE
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
__HAL_RCC_RTC_ENABLE();//RTCʱ<43><CAB1>ʹ<EFBFBD><CAB9>
}
/**************************************************************************************
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,24Сʱ<D0A1><CAB1>)
//week:<3A><><EFBFBD>ڼ<EFBFBD>(1~7) @ref RTC_WeekDay_Definitions
//hour,min,sec:Сʱ,<2C><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
**************************************************************************************/
void RTC_Set_AlarmA(u8 week,u8 hour,u8 min,u8 sec)
{
RTC_AlarmTypeDef RTC_AlarmSturuct;
RTC_AlarmSturuct.AlarmTime.Hours=hour; //Сʱ
RTC_AlarmSturuct.AlarmTime.Minutes=min; //<2F><><EFBFBD><EFBFBD>
RTC_AlarmSturuct.AlarmTime.Seconds=sec; //<2F><>
RTC_AlarmSturuct.AlarmTime.SubSeconds=0;
RTC_AlarmSturuct.AlarmTime.TimeFormat=RTC_HOURFORMAT12_AM;
RTC_AlarmSturuct.AlarmMask=RTC_ALARMMASK_NONE;//<2F><>ȷƥ<C8B7><C6A5><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
RTC_AlarmSturuct.AlarmSubSecondMask=RTC_ALARMSUBSECONDMASK_NONE;
RTC_AlarmSturuct.AlarmDateWeekDaySel=RTC_ALARMDATEWEEKDAYSEL_WEEKDAY;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RTC_AlarmSturuct.AlarmDateWeekDay=week; //<2F><><EFBFBD><EFBFBD>
RTC_AlarmSturuct.Alarm=RTC_ALARM_A; //<2F><><EFBFBD><EFBFBD>A
HAL_RTC_SetAlarm_IT(&RTC_Handler,&RTC_AlarmSturuct,RTC_FORMAT_BIN);
HAL_NVIC_SetPriority(RTC_Alarm_IRQn,0x01,0x02); //<2F><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>1,<2C><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>2
HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn);
}
/**************************************************************************************/
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>Ѷ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*wksel: @ref RTCEx_Wakeup_Timer_Definitions
#define RTC_WAKEUPCLOCK_RTCCLK_DIV16 ((uint32_t)0x00000000)
#define RTC_WAKEUPCLOCK_RTCCLK_DIV8 ((uint32_t)0x00000001)
#define RTC_WAKEUPCLOCK_RTCCLK_DIV4 ((uint32_t)0x00000002)
#define RTC_WAKEUPCLOCK_RTCCLK_DIV2 ((uint32_t)0x00000003)
#define RTC_WAKEUPCLOCK_CK_SPRE_16BITS ((uint32_t)0x00000004)
#define RTC_WAKEUPCLOCK_CK_SPRE_17BITS ((uint32_t)0x00000006)
*/
//cnt:<3A>Զ<EFBFBD><D4B6><EFBFBD>װ<EFBFBD><D7B0>ֵ.<2E><><EFBFBD><EFBFBD>0,<2C><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>.
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
//**************************************************************************************/
void RTC_Set_WakeUp(u32 wksel,u16 cnt)
{
__HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&RTC_Handler, RTC_FLAG_WUTF);//<2F><><EFBFBD><EFBFBD>RTC WAKE UP<55>ı<EFBFBD>־
HAL_RTCEx_SetWakeUpTimer_IT(&RTC_Handler,cnt,wksel); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>ֵ<EFBFBD><D6B5>ʱ<EFBFBD><CAB1>
HAL_NVIC_SetPriority(RTC_WKUP_IRQn,0x02,0x02); //<2F><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>1,<2C><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>2
HAL_NVIC_EnableIRQ(RTC_WKUP_IRQn);
}
/**************************************************************************************
//RTC<54><43><EFBFBD><EFBFBD><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
**************************************************************************************/
void RTC_Alarm_IRQHandler(void)
{
HAL_RTC_AlarmIRQHandler(&RTC_Handler);
}
/**************************************************************************************
//RTC<54><43><EFBFBD><EFBFBD>A<EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
**************************************************************************************/
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
printf("ALARM A!\r\n");
}
/**************************************************************************************
//RTC WAKE UP<55>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
**************************************************************************************/
void RTC_WKUP_IRQHandler(void)
{
HAL_RTCEx_WakeUpTimerIRQHandler(&RTC_Handler);
}
/**************************************************************************************
//RTC WAKE UP<55>жϴ<D0B6><CFB4><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
**************************************************************************************/
void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)
{
LED2_Toggle;
}
/**************************************************************************************
//<2F>ȴ<EFBFBD>RSFͬ<46><CDAC>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>;1,ʧ<><CAA7>;
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
**************************************************************************************/
u8 RTC_Wait_Synchro(void)
{
u32 retry=0XFFFFF;
//<2F>ر<EFBFBD>RTC<54>Ĵ<EFBFBD><C4B4><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
RTC->WPR=0xCA;
RTC->WPR=0x53;
RTC->ISR&=~(1<<5); //<2F><><EFBFBD><EFBFBD>RSFλ
while(retry&&((RTC->ISR&(1<<5))==0x00))retry--;//<2F>ȴ<EFBFBD>Ӱ<EFBFBD>ӼĴ<D3BC><C4B4><EFBFBD>ͬ<EFBFBD><CDAC>
if(retry==0)return 1; //ͬ<><CDAC>ʧ<EFBFBD><CAA7>
RTC->WPR=0xFF; //ʹ<><CAB9>RTC<54>Ĵ<EFBFBD><C4B4><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
return 0;
}
/**************************************************************************************
//ʮ<><CAAE><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
//val:Ҫת<D2AA><D7AA><EFBFBD><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:BCD<43><44>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
**************************************************************************************/
u8 RTC_DEC2BCD(u8 val)
{
u8 bcdhigh = 0;
while(val>=10)
{
bcdhigh++;
val-=10;
}
return ((u8)(bcdhigh<<4)|val);
}
/**************************************************************************************
//BCD<43><44>ת<EFBFBD><D7AA>Ϊʮ<CEAA><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//val:Ҫת<D2AA><D7AA><EFBFBD><EFBFBD>BCD<43><44>
//<2F><><EFBFBD><EFBFBD>ֵ:ʮ<><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
**************************************************************************************/
u8 RTC_BCD2DEC(u8 val)
{
u8 temp=0;
temp=(val>>4)*10;
return (temp+(val&0X0F));
}
/**************************************************************************************
//<2F><>ȡRTCʱ<43><CAB1>
//hour,min,sec:Сʱ,<2C><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>
//ampm:AM/PM,0=AM/24H,1=PM.
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
**************************************************************************************/
void RTC_Get_Time(u8 *hour,u8 *min,u8 *sec,u8 *ampm)
{
u32 temp=0;
while(RTC_Wait_Synchro()); //<2F>ȴ<EFBFBD>ͬ<EFBFBD><CDAC>
temp=RTC->TR;
*hour=RTC_BCD2DEC((temp>>16)&0X3F);
*min=RTC_BCD2DEC((temp>>8)&0X7F);
*sec=RTC_BCD2DEC(temp&0X7F);
*ampm=temp>>22;
}
/**************************************************************************************/
//<2F><>ȡRTC<54><43><EFBFBD><EFBFBD>
//year,mon,date:<3A><>,<2C><>,<2C><>
//week:<3A><><EFBFBD><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
/**************************************************************************************/
void RTC_Get_Date(u8 *year,u8 *month,u8 *date,u8 *week)
{
u32 temp=0;
while(RTC_Wait_Synchro()); //<2F>ȴ<EFBFBD>ͬ<EFBFBD><CDAC>
temp=RTC->DR;
*year=RTC_BCD2DEC((temp>>16)&0XFF);
*month=RTC_BCD2DEC((temp>>8)&0X1F);
*date=RTC_BCD2DEC(temp&0X3F);
*week=(temp>>13)&0X07;
}
/**************************************************************************************/
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD>ӣ<EFBFBD>Ƕ<EFBFBD><C7B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
/**************************************************************************************/