新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 重返STM32之---RTC使用

        重返STM32之---RTC使用

        作者: 時間:2016-11-11 來源:網絡 收藏
        STM3f10x的RTC時能涉及到的寄存器有RCC,BKP和RTC這三個大類寄存器;其中RCC主要控制了實時時鐘和備份區的電源使能和時鐘使能;RTC模塊和時鐘配置系統的寄存器是在后備區域的(即BKP),通過BKP后備區域來存儲RTC配置的數據可以讓在系統復位或待機模式下喚醒后RTC里面配置的數據維持不變;為此備份區還得涉及一個寄存器PWR,電源管理寄存器,備份區的寫保護位在PWR->CR的第八位。
        由于整個RTC都是位于后備區,而且RTC的APB1總線和內核的APB1總線是獨立的,所以在系統復位和喚醒時,RTC和BKP的那些時鐘不用從新配置;他們只受Backup domain software reset這個位和系統完全掉電的影響。所以呢;RTC只要有備用電池,它可以完全獨立工作。
        如圖一和圖二所示
        圖一
        圖二
        大家要清楚f10x系列的RTC算不上一個真正意義上的RTC,它只是一個計數器,精度上難免差強人意,所以設計要注意是否滿足計時要求。
        如果是要實現實時時間以上所有的寄存器都要有相應設置,如果只用秒中斷,那么只需要設置RCC和RTC的寄存器就可以了。

        以下以實現實時時鐘為例講解初始化過程。
        1. 檢測后備區是否已有有效標記
        BKP->DR1 != 0x5050;//(DR1 TO DR42)
        • 庫函數
        BKP_ReadBackupRegister(BKP_DR1) != 0x5050;
        1. 開啟電源管理和備份區時鐘
        (RCC->APB1ENR |=1<<28;//POWER);
        (RCC->APB1ENR |=1<<27;//BACKUP);
        • 庫函數
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
        1. 取消備份去寫保護
        (PWR->CR |=1<<8;//WP);
        • 庫函數
        • 復位后備區所有寄存器
        RCC->BDCR |=1<<16;
        RCC->BDCR &=~(1<<16);
        • 庫函數
        • 開啟外部32k晶振
        RCC->BDCR |=1<<0;
        • 庫函數
        • 32k晶振是否正常工作
        • 庫函數
        while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
        1. 選擇32k為RTC時鐘并使能RTC
        2. 庫函數
        3. 等待RTC操作和同步完成
        4. 庫函數
        5. 使能秒中斷
        6. 庫函數
        RTC_ITConfig(RTC_IT_SEC, ENABLE);
        • 配置RTC
        • 允許配置
        //set time---
        • 庫函數
        BKP_WriteBackupRegister(BKP_DR1, 0X5050);
        1. 如果時鐘已被設置過(RTC沒有斷電)
        2. 等待同步
        3. 開中斷
        4. 等待操作完成
        5. 庫函數
        RTC_ITConfig(RTC_IT_SEC, ENABLE);

        最后配置RTC中斷優先級。


        關鍵詞: STM32RTC使

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 金山区| 蛟河市| 洪泽县| 乌拉特后旗| 贡嘎县| 汝州市| 沐川县| 乐清市| 潢川县| 灵山县| 迁西县| 苏州市| 萨迦县| 彭山县| 安阳县| 玉田县| 资中县| 来宾市| 蛟河市| 顺平县| 房产| 定襄县| 巍山| 柘荣县| 阳朔县| 万宁市| 文山县| 甘肃省| 大英县| 金坛市| 富顺县| 贺兰县| 聂拉木县| 开平市| 绥德县| 成都市| 尚义县| 惠来县| 河源市| 宁乡县| 沭阳县|