STM32調試時鐘芯片SD3078程序
單片機源程序如下:
- #include "stm32f10x.h"
- #include "bsp_usart1.h"
- #include "rtc.h"
- #include <string.h>
- /****************** 本地變量 **********************/
- u8 data_Buf[8];
- u8 VBAT_Buf[2];
- u16 VBAT_VAL;
- Time_Def time_init={0x01,0x19,0x17,0x05,0x17,0x06,0x16}; //初始化實時時間
- Time_Def Alarm_init={0x30,0x19,0x17,0x00,0x15,0x08,0x18}; //初始化報警時間
- Time_Def sysTime;
- /***************** 本地函數聲明 *******************/
- void Delay(u32 nCount);
- /**
- * @brief 主函數
- * @param 無
- * @retval 無
- */
- int main(void)
- {
- u8 i;
- CountDown_Def cdInit;
-
- /********* USART1 配置模式為 115200 8-N-1**********/
- USARTx_Config();
- printf("\r\n--這是一個讀寫RTC的演示程序-- \r\n");
-
- /***************** I2C總線初始化 *****************/
- IIC_Init();
-
- /************* 給RTC寫入計時的初始時間 ************/
- RTC_WriteDate(&time_init);
- RTC_ReadDate(&sysTime);
- printf("寫入的初始時間為: \r\n");
- printf("%02X-%02X-%02X %02X:%02X:%02X 星期%02X\r\n\r\n", \
- sysTime.year, sysTime.month, sysTime.day, sysTime.hour,\
- sysTime.minute, sysTime.second, sysTime.week);
- printf("----------------------------\r\n\r\n");
- #ifdef SD30XX_25XX
- /*************** 讀出芯片的ID號演示 ****************/
- I2CReadSerial(RTC_Address,ID_Address,8,data_Buf);
- printf("芯片64bit ID號為:\r\n");
- for (i=0; i<8; i++)
- printf("0x%02X ", data_Buf[i]);
- printf("\r\n----------------------------\r\n\r\n");
- /**************** 充電使能設置演示 *****************/
- data_Buf[0] = Chg_enable;
- I2CWriteSerial(RTC_Address,Chg_MG,1,data_Buf);
- /************** 讀出后備電池電壓演示 ***************/
- I2CReadSerial(RTC_Address,Bat_H8,2,VBAT_Buf);
- VBAT_VAL = (VBAT_Buf[0]>>7)*255 + VBAT_Buf[1];
- printf("VBAT腳的電池電壓為:%d.%d%dV\r\n\r\n", VBAT_VAL/100, VBAT_VAL%100/10, VBAT_VAL%10);
- #endif
- #if (INT_TYPE == FREQUENCY)
- /**************** 頻率中斷設置演示 ****************/
- SetFrq(F2Hz);//輸出2Hz頻率方波
- #elif (INT_TYPE == ALARM)
- /**************** 報警中斷設置演示 ****************/
- Set_Alarm(sec_ALM|min_ALM|hor_ALM, &Alarm_init);//報警使能:時、分、秒
- #elif (INT_TYPE == COUNTDOWN)
- /*************** 倒計時中斷設置演示 ***************/
- cdInit.IM = 1; //設置為周期性中斷
- cdInit.d_clk = S_1s; //倒計時中斷源選擇1s
- cdInit.init_val = 2; //倒計時初值設置為2
- Set_CountDown(&cdInit);
- #elif (INT_TYPE == DISABLE)
- /****************** 禁止中斷演示 *****************/
- ClrINT(INTDE|INTAE|INTFE);
- #endif
- while( 1 )
- {
- RTC_ReadDate(&sysTime);
- printf("%02X-%02X-%02X %02X:%02X:%02X 星期%02X\r\n", \
- sysTime.year, sysTime.month, sysTime.day, sysTime.hour,\
- sysTime.minute, sysTime.second, sysTime.week);
- Delay(0x7FFFFF);//1秒延時
- }
- }
- /**
- * @brief 延時函數
- * @param nCount
- * @retval 無
- */
- void Delay(u32 nCount) //簡單的延時函數
- {
- for(; nCount != 0; nCount--);
- }
- /*********************************************END OF FILE**********************/
復制代碼
所有資料51hei提供下載:
RTC_STM32_demo.7z
(178.6 KB, 下載次數: 119)
2019-7-8 17:45 上傳
點擊文件名下載附件
|