在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于N32G45的RTC電子鐘

嵌入式技術 ? 來源:嵌入式技術 ? 作者:嵌入式技術 ? 2022-12-08 08:47 ? 次閱讀

1.RTC簡介

RTC,英文全稱:Real-time clock,中文名稱:實時時鐘,是指可以像時鐘一様輸出實際時間的電子設備,一般會是集成電路,因此也稱為時鐘芯片。實時時鐘芯片是日常生活中應用最為廣泛的消費類電子產品之一。它為人們提供精確的實時時間,或者為電子系統提供精確的時間基準,目前實時時鐘芯片大多采用精度較高的晶體振蕩器作為時鐘源。

RTC特性

實時時鐘( RTC)是一個獨立的 BCD 定時器/計數器

軟件支持夏時令補償

編程周期性自動喚醒定時器

兩個 32 位寄存器包含時、分、秒、年、月、日(幾號)、星期(星期幾)

獨立的 32 位寄存器包含亞秒

兩個編程鬧鐘

兩個 32 位寄存器包含編程鬧鐘時、分、秒、年、月、日(幾號)、星期(星期幾)

兩個獨立的 32 位寄存器包含編程鬧鐘亞秒

數字精密校準功能

時間戳功能

在 Backup 域復位后,所有 RTC 寄存器都受到保護, 以防止可能的意外寫訪問

多個中斷/事件喚醒源,包括鬧鐘 A、鬧鐘 B、喚醒定時器、時間戳

RCC 寄存器使能 RTC 模塊且電壓保持在工作范圍內, RTC 在任何模式下都不會停止(包括 RUN 模式、SLEEP 模式、 STOP0 模式、 STOP2 模式和 STANDBY 模式)

RTC 提供多種喚醒源可以使 MCU 從所有的低功耗模式下喚醒( SLEEP 模式, STOP0 模式, STOP2 模式和 STANDBY 模式)

pYYBAGOQZhuANoZxAAHNEO2DXew675.png

RTC框圖

pYYBAGOQZkyAQQE5AAEroqIRxes296.png

2.RTC功能特性

RTC 包括以下功能模塊:

Alarm A 和 Alarm B 事件/中斷

時間戳事件/中斷

RTC 輸出功能:

256 Hz 或者 1Hz 時鐘輸出(當 LSE 頻率是 32.768 kHz)

鬧鐘輸出(極性可配置),鬧鐘 A 和鬧鐘 B 可選

自動喚醒輸出(極性可配置)

RTC 輸入功能:

時間戳事件檢測

通過配置輸出寄存器控制 PC13:

設置 RTC_OPT.TYPE 位配置 PC13 開漏/推挽輸出

3.RTC相關寄存器

RTC在配置過程中,需要完成配置的有RTC寫保護相關寄存器、RTC時鐘和預分頻寄存器、日歷寄存器以及鬧鐘和校準寄存器。

RTC寄存器寫保護

PWR_CTRL.DBKP 位(見電源控制部分) 默認被清除,所以 PWR_CTRL.DBKP 必須置 1 去使能 RTC 寄存器寫功能。一旦備份域復位,所有的 RTC 寫保護寄存器都會寫保護,所有的 RTC 寫保護寄存器需要按如下步驟去解鎖寫保護:

將 0xCA 寫入 RTC_WRP 寄存器

將 0x53 寫入 RTC_WRP 寄存器

在解鎖這些寄存器后,可以通過清除 PWR_CTRL.DBKP 位激活寫保護。解鎖機制只檢查 RTC_WRP 寄存器的寫操作。在解鎖過程中、解鎖前、解鎖后,對其他寄存器的寫操作不會影響解鎖結果。

RTC時鐘和預分頻

RTC 時鐘源:

LSE 時鐘

LSI 時鐘

HSE/128 時鐘

為了降低功耗,將預分頻器分為異步預分頻器和同步預分頻器。如果同時使用兩個預分頻器,建議異步預分頻器的值盡可能大。

7 位異步預分頻器由 RTC_PRE.DIVA[6:0] 位控制

15 位同步預分頻器由 RTC_PRE.DIVS[14:0] 位控制

pYYBAGOQf5iASlHSAABUshacY2k779.png


ck_apre 時鐘用于對 RTC_SUBS 亞秒遞減計數器提供時鐘。當到達 0 時,用 RTC_PRE.DIVS[14:0]的值重新加載 RTC_SUBS。

RTC日歷

這里有三個影子寄存器,分別是 RTC_DATE, RTC_TSH 和 RTC_SUBS。 RTC 時間和日期寄存器可以通過影子寄存器訪問。也可以直接訪問,以避免等待同步時間。這三個影子寄存器如下:

RTC_DATE: 設置和讀取日期

RTC_TSH: 設置和讀取時間

RTC_SUBS: 讀取亞秒

4.RTC電子鐘配置流程

1.RTC作為實時電子鐘外設模塊,在默認情況下只需要初始化一次即可。為了達到該目的,我們可以借助后備域寄存器BKP。

備份存儲器位于備份域里,電源 VDD 關閉后由 VBAT 供電維持。 BKP 共有 42 個 16 位的寄存器,可用來存儲并保護用戶應用數據。這 84 個字節不受系統待機模式喚醒或系統復位的影響。

pYYBAGOQgcKAQbMqAAIAlxvsJTI318.png

根據備份存儲器復位不會清除數據特性,我們可以在第一次配置好RTC寄存器后將對應的某一個寄存器寫入標志位,這樣下次若檢測到標志位存在,則直接啟動RTC即可。

2.選擇RTC時鐘源。因為RTC時鐘源選擇有3個:HSE/128、LSE、LSI。為了讓RTC更精準,應優先選擇LSE(外部低速時鐘32.768KHZ),而我們當前開發板剛好有LSI。

pYYBAGOQgvWAfIXZAACG59buUsE510.png

在RCC_BDCRCTL的0和1位,選擇LSE時鐘源;RCC_BDCRCTL的第15位使能RTC時鐘。

pYYBAGOQg6yAHTooAADKWjSOLNY318.pngpoYBAGOQgzeAPpB0AAHUk8G0mig897.png

3.設置RTC的工作頻率。設置RTC的工作頻率我們可以通過RTC_PRE預分頻寄存器完成。

pYYBAGOQhISAA_ONAAFNjMZCnoc121.png

我們選擇的是LSE=32.768KHZ時鐘源,根據時鐘頻率計算公式,我們可以設置RTC_PRE=0xFF7F來產生1HZ工作頻率。根據官方文檔,異步預分頻盡量設置大些。

4.設置電子日歷。電子日歷可通過時間寄存器RTC_TSH和日期寄存器RTC_DATE完成配置。

pYYBAGOQhbWAOVFkAAIKJKJqmL0265.pngpoYBAGOQhdWAXoteAACdB29Mu9k580.pngpYYBAGOQheSAXe8SAAE40roll2Y319.png

5.輸出1HZ頻率。在使用RTC日歷功能時,參考官方提供示例日歷功能是通過RTC校準輸出引腳PC13輸出,然后在開啟一個外部中斷器檢測該引腳,從而輸出電子日歷。

在使用RTC本身喚醒中斷時發現無法觸發,也可能是配置有問題,這個等下一次解決后再來敘述說明,本示例則按照官方示例實現。

PC13引腳模式配置

poYBAGOQhymASaJBAADpJTnUMB4610.png

4.1 RTC配置示例

按照上述步驟,RTC電子日歷功能配置示例如下:

void RTC_Init(void)
{
  //開啟RTC和后備域權限
  RCC->APB1PCLKEN|=1<<27;//開啟備份接口時鐘
  RCC->APB1PCLKEN|=1<<28;//電源接口時鐘
  /* 允許訪問RTC*/
  PWR->CTRL|=1<<8;//允許寫入RTC和后備區域
	if(BKP->DAT2!=0xAA)//判斷是否上一次RTC初始化
	{
    printf("進入初始化rn");
    RCC->BDCTRL&=~(1<<15);//關閉RTC時鐘
    
		//2.選擇RTC時鐘源
		RCC->BDCTRL|=1<<0;//開啟32.768KHZ時鐘
		while(!(RCC->BDCTRL&1<<1)){}//等待32.768KHZ時鐘準備就緒	
		RCC->BDCTRL&=~(0x3<<8);//清除原來寄存器中的值
		RCC->BDCTRL|=0x1<<8;//時鐘源為32.768KHZ
    RCC->BDCTRL|=1<<15;//開啟RTC時鐘
    /*解除RTC寫保護*/
    RTC->WRP=0xCA;
    RTC->WRP=0x53; 
    while(!(RTC->INITSTS&1<<5)){} //等待日歷影子寄存器同步
    
    RTC->INITSTS|=1<<7;//進入初始化模式
    while(!(RTC->INITSTS&1<<6)){}//等待初始化標志置1
    printf("進入配置模式rn");  
    /*設置分頻系數,產生1HZ*/
    RTC->PRE=0;      
    RTC->PRE|=0X7F<<16;
    RTC->PRE|=0xFF;

    RTC->INITSTS&=~(1<<7);//退出初始化模式
    RTC->WRP=0xff; 
    for(int i=0;i<0x2FF;i++);//等待配置完成
    BKP->DAT2=0xAA;//RTC初始化完成標志	
    RTC_SetDate(&RTC_Time);

	}
  RTC->WRP = 0xCA;
  RTC->WRP = 0x53;  
  RTC->CTRL|=1<<19;//輸出1HZ
  RTC->OPT|=1<<0;//推挽輸出
  RTC->CTRL|=1<<23;//開啟校準輸出
  RTC->WRP = 0xFF;
  printf("初始化完成rn");
}

4.2 配置PA7引腳,捕獲RTC電子日歷

由于RTC產生的1HZ頻率是通過PC13引腳輸出,所以我們配置一個硬件來實現電子日歷。

void EXTI_Init(void)
{
  //1.GPIO口配置

  RCC->APB2PCLKEN|=1<<2;
  GPIOA->PL_CFG&=0x0FFFFFFF;
  GPIOA->PL_CFG|=0x80000000;
  //2.開AFIO時鐘,選擇觸發源
  RCC->APB2PCLKEN|=1<<0;//開AFIO時鐘
  /*外部中斷7--PA7*/
  AFIO->EXTI_CFG[1]&=~(0xF<<3*4);//PA7
  EXTI->IMASK|=1<<7;//使能中斷線7
  EXTI->RT_CFG|=1<<7;//檢測上升沿
  N32_NVIC_SetPriority(EXTI9_5_IRQn,1,1);//設置優先級
}
void EXTI9_5_IRQHandler(void)
{
 

  else if(PAin(7))
  {
    RTC_GetDate(&RTC_Time);
  }
  EXTI->PEND|=0xf<<5;//清除標志位
}

4.3 RTC設置時間

為方便后續時間校準(串口校時或者網絡校時或其它方式)實現,這里單獨封裝一個RTC時間校準函數。

/*設置RTC時間和日期*/
void RTC_SetDate(RTC_TIME *RTC_Time)
{
  RTC->WRP = 0xCA;
  RTC->WRP = 0x53;
  RTC->INITSTS|=1<<7;//進入初始化模式
  while(!(RTC->INITSTS&1<<6)){}//等待初始化標志置1 
   //設置日期
   RTC->DATE=0;
  //年
  RTC->DATE=0;
  RTC->DATE|=(RTC_Time->year / 10)<<20;
  RTC->DATE|=(RTC_Time->year % 10)<<16;
  //星期1
  RTC->DATE|=(RTC_Time->week % 8)<<13;
  //月
  RTC->DATE|=(RTC_Time->mon / 10)<<12;
  RTC->DATE|=(RTC_Time->mon % 10)<<8;
  //日
  RTC->DATE|=(RTC_Time->day / 10)<<4;
  RTC->DATE|=(RTC_Time->day % 10)<<0;  
    
  /*設置時間*/
  RTC->TSH=0;
  RTC->TSH&=~(1<<22);//24小時制
  //時
  RTC->TSH|=(RTC_Time->hour / 10)<<20;
  RTC->TSH|=(RTC_Time->hour % 10)<<16; 
  //分
  RTC->TSH|=(RTC_Time->min /10)<<12; 
  RTC->TSH|=(RTC_Time->min %10)<<8;  
  //秒
  RTC->TSH|=(RTC_Time->sec /10)<<4; 
  RTC->TSH|=(RTC_Time->sec %10)<<0;
  RTC->INITSTS&=~(1<<7);//退出初始化模式
  RTC->WRP=0xff;
}

4.4 RTC時間讀取

為方便后續做時間顯示處理,封裝時間獲取函數。

/*讀取RTC時間和日期*/
void RTC_GetDate(RTC_TIME *RTC_Time)
{
  u32 date=RTC->DATE;
  u32 tsh=RTC->TSH;
  RTC_Time->year=((date>>20)&0xf)*10+ ((date>>16)&0xf);
  RTC_Time->mon=((date>>12)&0x1)*10+ ((date>>8)&0xf);
  RTC_Time->day=((date>>4)&0x3)*10+(date&0xf);
  RTC_Time->week=((date>>13)&0x7);
  //時間,注意,+-優先級 高于 &的優先級
  RTC_Time->hour=((tsh>>20)&0x3)*10+((tsh>>16)&0xf);
  RTC_Time->min=((tsh>>12)&0x7)*10+((tsh>>8)&0xf);
  RTC_Time->sec=((tsh>>4)&0x7)*10+(tsh&0xf);
 // printf("%d/%d/%d -- %d:%d:%d rn",RTC_Time->year,RTC_Time->mon,RTC_Time->day, 
                                         RTC_Time->hour,RTC_Time->min,RTC_Time->sec);
}

4.5 串口校時

通過串口方式進行時間校準。串口數據格式如下:

pYYBAGOQiUiAJRXHAAChoDD9qG4337.png

if(usart1_flag)
{
	usart1_rx_buff[usart1_cnt]='?';//字符串結束標志符
	printf("usart1:%srn",usart1_rx_buff);
	//*20200822102540
	if(usart1_rx_buff[0]=='*' && usart1_cnt==15)
	{
		RTC_Time.year=(usart1_rx_buff[3]-'0')*10+(usart1_rx_buff[4]-'0')*1;
		RTC_Time.mon=(usart1_rx_buff[5]-'0')*10+(usart1_rx_buff[6]-'0')*1;
		RTC_Time.day=(usart1_rx_buff[7]-'0')*10+(usart1_rx_buff[8]-'0')*1;
		RTC_Time.hour=(usart1_rx_buff[9]-'0')*10+(usart1_rx_buff[10]-'0')*1;
		RTC_Time.min=(usart1_rx_buff[11]-'0')*10+(usart1_rx_buff[12]-'0')*1;
		RTC_Time.sec=(usart1_rx_buff[13]-'0')*10+(usart1_rx_buff[14]-'0')*1;
        RTC_ChangeWeek(RTC_Time.year,RTC_Time.mon,RTC_Time.day);//星期
		RTC_SetDate(&RTC_Time);//設置時間和日期
	}
	usart1_flag=0;	
	usart1_cnt=0;			
}

4.6 運行效果

將獲取到的時間通過OLED屏幕顯示。OLED屏幕驅動參考:http://www.xsypw.cn/d/1950506.htmltrack_id=myCenter&mod=article&share

pYYBAGOQisKAfiVXACPvJ3gaY6E555.png
審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 電子鐘
    +關注

    關注

    7

    文章

    189

    瀏覽量

    36944
  • RTC
    RTC
    +關注

    關注

    2

    文章

    538

    瀏覽量

    66523
  • n32g455
    +關注

    關注

    0

    文章

    7

    瀏覽量

    937
收藏 人收藏

    評論

    相關推薦

    基于N32G45電子鐘# #嵌入式開發

    單片機國民技術
    IT_阿水
    發布于 :2022年12月07日 22:07:30

    基于RT-Thread和N32G457的電子墨水屏電子鐘設計方案

    1、基于RT-Thread和N32G457的電子墨水屏電子鐘設計本方案可以用于桌擺時鐘及定時器,用于倒計時提醒,查看時間等場景。定時器功能同時顯示了倒計時時長已經定時到達時間,方便設置預期的提醒時間
    發表于 10-28 17:29

    國民技術N32G45環境搭建及點燈測試

    1.N32G45簡介??N32G45系列集成了最新一代嵌入式ARM Cortex?-M4F處理器,在Cortex?-M3內核的基礎上強化了運算能力、新增加了浮點運算處理單元(FPU)、DSP
    發表于 12-03 16:34

    【國民技術N32項目移植】基于N32G45電子鐘項目移植

    基于N32G45電子鐘項目移植1.項目簡介??本項目主要完RCC時鐘、GPIO引腳、USART、DMA協助串口收發、TIM輸出PWM控制LED閃爍以實現程序運行指示、硬件SPI驅動0.96寸
    發表于 12-07 21:57

    【精品合集】國民技術N32開源移植挑戰賽作品合集

    345XVL-STB項目移植 —開箱+資料【國民技術N32項目移植】MacOS開發N32G45 1、創建開發環境【國民技術N32項目移植】RT-THread 移植 LED閃燈【國民技術N
    發表于 01-10 13:59

    【國民技術N32項目移植】5.項目提交-天氣顯示及預報系統介紹以及演示

    技術N32G45芯片微處理器,運行RT-Thread操作系統,實現包括系統外設初始化、網絡接入、系統管理、數據獲取、數據顯示等功能。平臺層和應用層功能則由服務器和開發板以及顯示屏協同實現。系統整體框圖
    發表于 02-22 19:53

    【國民技術N32項目移植】基于N32G45智能家居平臺

    ;5.RTC電子鐘??RTC,英文全稱:Real-time clock,中文名稱:實時時鐘,是指可以像時鐘一様輸出實際時間的電子設備,一般會是集成電路,因此也稱為時鐘芯片。實時時鐘芯片
    發表于 02-25 18:29

    N32G45的工程項目如何添加AT組件?

    目前使用的是N32G45的工程項目,需要添加AT組件,然后我根據文檔發現沒有AT的代碼,從rtthread studio新建的項目中把AT文件夾復制過來,在其中使用ENV工具配置,手動將程序全都放進工程中新建的文件夾,編譯的時候發現沒有,下載了at_device軟件版之后不知道怎么配置了。
    發表于 09-07 16:52

    N32G45x_N32G4FR_N32WB452_GCC開發環境應用筆記

    AN_N32G45x_N32G4FR_N32WB452_GCC開發環境應用筆記_V1
    發表于 11-07 15:05 ?17次下載

    國民技術N32G45XVL-STB開發版資料

    國民技術N32G45XVL-STB開發版資料,本資料包含原理圖源文件、PCB源文件以及N32G45XVL-STB開發板硬件使用手冊
    發表于 11-07 15:23 ?0次下載

    N32G45x系列用戶手冊

    N32G45x系列用戶手冊
    發表于 11-10 19:50 ?2次下載
    <b class='flag-5'>N32G45</b>x系列用戶手冊

    N32G45x系列用戶手冊

    N32G45x系列用戶手冊
    發表于 11-10 19:50 ?0次下載
    <b class='flag-5'>N32G45</b>x系列用戶手冊

    N32G45x系列用戶手冊

    N32G45x系列用戶手冊
    發表于 11-10 19:50 ?0次下載
    <b class='flag-5'>N32G45</b>x系列用戶手冊

    基于N32G45的按鍵驅動

    N32G45系列集成了最新一代嵌入式ARM Cortex?-M4F處理器,在Cortex?-M3內核的基礎上強化了運算能力、新增加了浮點運算處理單元(FPU)、DSP和并行計算指令,提供1.25DMIPS/MHz的優異性能。
    的頭像 發表于 12-04 10:44 ?2024次閱讀
    基于<b class='flag-5'>N32G45</b>的按鍵驅動

    如何在KW45-EVK上使用RTC

    電子發燒友網站提供《如何在KW45-EVK上使用RTC.pdf》資料免費下載
    發表于 01-03 09:41 ?0次下載
    如何在KW<b class='flag-5'>45</b>-EVK上使用<b class='flag-5'>RTC</b>
    主站蜘蛛池模板: 天堂中文在线免费观看| 妇乱子伦激情| 福利久久| 伊人狠狠丁香婷婷综合色| 一级a毛片免费| 色老头在线视频| 99久久99久久久99精品齐| 天天干天天色天天射| 成人国产精品2021| 免费观看一区二区| 四虎影院最新网站| 久久婷婷国产一区二区三区| free欧美性| 六月丁香激情网| 三级免费观看| 国产 麻豆 欧美亚洲综合久久| 特黄一级| 国产成人精品系列在线观看| 久久久久久久久综合| 美女天天操| 日本不卡免费高清一级视频| 亚洲国产精品网站久久| 免费看毛片网| 交专区videossex另类| 人人澡人人人人夜夜爽| 美女18黄| 天天尻| 乱色伦短篇小说| 狠狠色噜噜狠狠狠狠狠色综合久久 | 好大好硬好深好爽的视频| 色偷偷免费视频| 天天干天天摸| 超黄视频在线观看| 天天狠狠色噜噜| 午夜看一级特黄a大片| 黄色成人在线| 四虎在线永久免费观看| 午夜高清在线观看免费6| xxxx性xxxx| 久青草视频在线播放| 手机在线观看一级午夜片|