|
電路原理圖如下:
1592285159(1).png (16.5 KB, 下載次數(shù): 23)
下載附件
2020-6-16 13:27 上傳
單片機(jī)源程序如下:
- #include "delay.h"
- #include "led.h"
- #include "rtc.h"
-
- //實(shí)時時鐘配置
- //初始化RTC時鐘,同時檢測時鐘是否工作正常
- //BKP->DR1用于保存是否第一次配置的設(shè)置
- //返回0:正常
- //其他:錯誤代碼
- u8 RTC_Init(void)
- {
- //檢查是不是第一次配置時鐘
- u8 temp=0;
- if(BKP->DR1!=0X5050)//第一次配置
- {
- RCC->APB1ENR|=1<<28; //使能電源時鐘
- RCC->APB1ENR|=1<<27; //使能備份時鐘
- PWR->CR|=1<<8; //取消備份區(qū)寫保護(hù)
- RCC->BDCR|=1<<16; //備份區(qū)域軟復(fù)位
- RCC->BDCR&=~(1<<16); //備份區(qū)域軟復(fù)位結(jié)束
- RCC->BDCR|=1<<0; //開啟外部低速振蕩器
- while((!(RCC->BDCR&0X02))&&temp<250)//等待外部時鐘就緒
- {
- temp++;
- delay_ms(10);
- };
- if(temp>=250)return 1;//初始化時鐘失敗,晶振有問題
- RCC->BDCR|=1<<8; //LSI作為RTC時鐘
- RCC->BDCR|=1<<15;//RTC時鐘使能
- while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成
- while(!(RTC->CRL&(1<<3)));//等待RTC寄存器同步
- RTC->CRH|=0X01; //允許秒中斷
- while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成
- RTC->CRL|=1<<4; //允許配置
- RTC->PRLH=0X0000;
- RTC->PRLL=32767; //時鐘周期設(shè)置(有待觀察,看是否跑慢了?)理論值:32767
- RTC->CRL&=~(1<<4); //配置更新
- while(!(RTC->CRL&(1<<5))); //等待RTC寄存器操作完成
- BKP->DR1=0X5050;
- }else//系統(tǒng)繼續(xù)計(jì)時
- {
- while(!(RTC->CRL&(1<<3)));//等待RTC寄存器同步
- RTC->CRH|=0X01; //允許秒中斷
- while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成
-
- }
- MY_NVIC_Init(0,0,RTC_IRQn,2);//優(yōu)先級設(shè)置
- return 0; //ok
- }
- //RTC時鐘中斷
- //每秒觸發(fā)一次
- void RTC_IRQHandler(void)
- {
- if(RTC->CRL&0x0001)//秒鐘中斷
- {
- LED1=!LED1;
-
- }
- RTC->CRL&=0X0FFA; //清除溢出,秒鐘中斷標(biāo)志
- while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成
- }
復(fù)制代碼
所有程序51hei提供下載:
RTC時鐘.7z
(192.04 KB, 下載次數(shù): 17)
2020-6-16 15:08 上傳
點(diǎn)擊文件名下載附件
|
|