色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

STM32 BKP與RTC實(shí)戰(zhàn):掉電數(shù)據(jù)保存與低功耗定時(shí)設(shè)計(jì)

STM32 BKP與RTC實(shí)戰(zhàn):掉電數(shù)據(jù)保存與低功耗定時(shí)設(shè)計(jì) 1. 項(xiàng)目緣起為什么需要BKP和RTC這對(duì)“黃金搭檔”做嵌入式開(kāi)發(fā)尤其是用STM32這類MCU做產(chǎn)品最怕的就是設(shè)備一斷電關(guān)鍵數(shù)據(jù)就丟了。比如你辛辛苦苦校準(zhǔn)了一個(gè)傳感器的零點(diǎn)偏移值或者記錄了一個(gè)設(shè)備的累計(jì)運(yùn)行時(shí)間甚至是一個(gè)用戶設(shè)置的鬧鐘時(shí)間如果每次上電都清零那用戶體驗(yàn)就太糟糕了。這時(shí)候STM32內(nèi)部的兩個(gè)“小寶貝”就派上用場(chǎng)了BKPBackup Register備份寄存器和RTCReal-Time Clock實(shí)時(shí)時(shí)鐘。很多人剛開(kāi)始接觸容易把它們搞混或者覺(jué)得它們差不多。其實(shí)它們倆是分工明確、協(xié)同作戰(zhàn)的好兄弟。簡(jiǎn)單來(lái)說(shuō)RTC負(fù)責(zé)“走時(shí)”它是一個(gè)獨(dú)立的、低功耗的計(jì)時(shí)器只要后備電池VBAT引腳有電哪怕主電源VDD斷了它也能繼續(xù)嘀嗒嘀嗒地走給你提供年、月、日、時(shí)、分、秒這些時(shí)間信息。而B(niǎo)KP則負(fù)責(zé)“記事”它是一片特殊的SRAM區(qū)域同樣在VBAT供電下數(shù)據(jù)不丟失你可以把任何你想保存的數(shù)據(jù)比如校準(zhǔn)參數(shù)、設(shè)備序列號(hào)、運(yùn)行狀態(tài)標(biāo)志存進(jìn)去。所以一個(gè)典型的應(yīng)用場(chǎng)景是你的智能設(shè)備比如一個(gè)溫濕度記錄儀需要每隔一小時(shí)記錄一次數(shù)據(jù)并且數(shù)據(jù)要帶時(shí)間戳。你可以用RTC來(lái)產(chǎn)生這個(gè)“一小時(shí)”的中斷同時(shí)把當(dāng)前時(shí)間從RTC讀取和傳感器數(shù)據(jù)一起存儲(chǔ)到外部Flash或者SD卡里。但是記錄到第幾條了呢這個(gè)索引值如果存在普通RAM里一斷電就沒(méi)了下次開(kāi)機(jī)可能就從0開(kāi)始覆蓋寫(xiě)導(dǎo)致數(shù)據(jù)混亂。這時(shí)候你就可以把這個(gè)“當(dāng)前記錄索引”存在BKP寄存器里。這樣無(wú)論設(shè)備是正常關(guān)機(jī)還是意外斷電重啟后都能從BKP里讀出上次的記錄位置接著往下寫(xiě)保證了數(shù)據(jù)的連續(xù)性和完整性。我遇到過(guò)不少項(xiàng)目早期為了省事把這些數(shù)據(jù)存在片內(nèi)Flash的某個(gè)固定頁(yè)。結(jié)果頻繁擦寫(xiě)沒(méi)幾個(gè)月Flash就寫(xiě)壞了或者因?yàn)椴翆?xiě)期間斷電導(dǎo)致數(shù)據(jù)錯(cuò)誤。后來(lái)改用BKPRTC的方案系統(tǒng)穩(wěn)定性和數(shù)據(jù)可靠性直接上了一個(gè)臺(tái)階。下面我就結(jié)合STM32F1和F4系列這兩個(gè)系列用的人最多把手把手配置、讀寫(xiě)、以及實(shí)際開(kāi)發(fā)中那些容易踩的坑給你徹底講明白。2. 核心機(jī)制解剖BKP與RTC的硬件依賴與訪問(wèn)鑰匙在動(dòng)手寫(xiě)代碼之前必須得搞清楚它們的“脾氣”知道它們依賴什么怎么才能“叫得動(dòng)”它們。這是很多教程一筆帶過(guò)但實(shí)際開(kāi)發(fā)中問(wèn)題最多的地方。2.1 電源域數(shù)據(jù)不丟的基石BKP寄存器和RTC模塊之所以能掉電保持?jǐn)?shù)據(jù)根本原因在于它們位于一個(gè)獨(dú)立的電源域上這個(gè)域由VBAT引腳供電。正常模式VDD供電當(dāng)主電源VDD正常時(shí)整個(gè)芯片包括BKP/RTC域都由VDD供電。此時(shí)你可以正常讀寫(xiě)B(tài)KP和配置RTC。掉電模式VDD斷開(kāi)當(dāng)主電源VDD斷開(kāi)比如設(shè)備拔掉電池如果VBAT引腳連接了備用電池通常是一顆紐扣電池如CR2032那么BKP寄存器和RTC的時(shí)鐘計(jì)數(shù)器就會(huì)自動(dòng)切換到由VBAT供電。此時(shí)芯片其他部分都斷電了但這一小塊區(qū)域依然活著數(shù)據(jù)得以保全。VBAT也斷開(kāi)如果連VBAT也斷電了那對(duì)不起B(yǎng)KP里的數(shù)據(jù)和RTC的計(jì)數(shù)值都會(huì)丟失。下次上電BKP是隨機(jī)值RTC需要重新配置。注意這里有個(gè)關(guān)鍵點(diǎn)VBAT引腳不能懸空即使你不用備用電池也必須把VBAT連接到VDD通過(guò)一個(gè)0歐電阻或者直接連接。否則當(dāng)VDD掉電時(shí)這個(gè)域可能處于不確定狀態(tài)導(dǎo)致數(shù)據(jù)異常甚至損壞相鄰電路。2.2 訪問(wèn)權(quán)限PWR和RCC這兩把“鑰匙”BKP和RTC屬于備份域Backup Domain。為了降低這個(gè)域在正常工作中的功耗防止被軟件意外篡改STM32給它們加了兩道“鎖”。第一把鎖備份域?qū)懕Wo(hù)BKP Write Protection默認(rèn)情況下BKP寄存器是寫(xiě)保護(hù)的你不能直接往里面寫(xiě)數(shù)據(jù)。要解鎖需要操作電源控制寄存器PWR。 對(duì)于STM32F1步驟是使能PWR時(shí)鐘RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);關(guān)閉備份域?qū)懕Wo(hù)PWR_BackupAccessCmd(ENABLE);對(duì)于STM32F4/H7等系列步驟類似但函數(shù)名可能稍有不同例如在HAL庫(kù)中是HAL_PWR_EnableBkUpAccess()。第二把鎖RTC時(shí)鐘與寄存器訪問(wèn)RTC本身是一個(gè)外設(shè)你需要先給它提供時(shí)鐘源LSE/LSI并使能它的時(shí)鐘。使能RCC中控制備份域的時(shí)鐘RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);(F1系列) 對(duì)于F4系列則是使能RCC_APB1ENR寄存器中的RTCAPB位。選擇RTC時(shí)鐘源LSE-外部低速晶振通常32.768kHz或LSI-內(nèi)部低速RC振蕩器約40kHz。強(qiáng)烈推薦使用LSE因?yàn)榫雀咦邥r(shí)準(zhǔn)。LSI誤差大可能一天就差出幾分鐘。使能RTC時(shí)鐘RCC_RTCCLKCmd(ENABLE);只有拿到了這兩把“鑰匙”你才能對(duì)BKP和RTC進(jìn)行初始化和讀寫(xiě)操作。很多新手代碼跑不通第一步就應(yīng)該檢查這兩步是否都做到了。2.3 BKP寄存器布局你的數(shù)據(jù)保險(xiǎn)箱不同型號(hào)的STM32BKP寄存器的數(shù)量不同。STM32F103系列有10個(gè)16位的寄存器BKP_DR1 ~ BKP_DR10而STM32F407等系列則有20個(gè)32位的寄存器BKPR1 ~ BKPR20。它們都是16位或32位寬可以存整數(shù)、可以拼湊成浮點(diǎn)數(shù)需轉(zhuǎn)換、也可以每個(gè)位當(dāng)標(biāo)志位用。這些寄存器還有一個(gè)“哨兵”——BKP數(shù)據(jù)寄存器xBKP_DRx的bit0在上電復(fù)位并從待機(jī)模式喚醒后會(huì)被硬件自動(dòng)清零。你可以利用這個(gè)特性來(lái)判斷本次復(fù)位是冷啟動(dòng)還是從待機(jī)模式喚醒的從而決定是初始化RTC還是直接讀取當(dāng)前時(shí)間。3. 實(shí)戰(zhàn)第一步環(huán)境搭建與基礎(chǔ)驅(qū)動(dòng)配置理論懂了我們來(lái)看代碼。這里我以STM32F103C8T6藍(lán)色小藥丸和標(biāo)準(zhǔn)外設(shè)庫(kù)Standard Peripheral Library為例因?yàn)闃?biāo)準(zhǔn)庫(kù)的寄存器操作更直觀理解了標(biāo)準(zhǔn)庫(kù)再用HAL或LL庫(kù)就很容易了。當(dāng)然我也會(huì)提一下HAL庫(kù)的關(guān)鍵函數(shù)。3.1 工程準(zhǔn)備與時(shí)鐘樹(shù)考量首先在你的工程里需要包含正確的頭文件并確保系統(tǒng)時(shí)鐘已經(jīng)配置好比如使用72MHz的HSE。重點(diǎn)在于低速時(shí)鐘的配置。對(duì)于RTC時(shí)鐘源的選擇至關(guān)重要LSE外部低速晶振需要你在PCB上焊接一個(gè)32.768kHz的晶振并配上兩個(gè)負(fù)載電容通常10-15pF。精度高±20ppm功耗低是產(chǎn)品化的首選。LSI內(nèi)部低速RC芯片內(nèi)部自帶無(wú)需外接元件。但精度很差±40kHz的偏差可能達(dá)到±5%即一天誤差可達(dá)數(shù)十分鐘只適用于對(duì)時(shí)間精度要求極低的場(chǎng)合。在system_stm32f10x.c或你自己的時(shí)鐘配置函數(shù)里你需要開(kāi)啟LSE并等待其穩(wěn)定// 啟動(dòng)LSE RCC_LSEConfig(RCC_LSE_ON); // 等待LSE啟動(dòng)穩(wěn)定超時(shí)處理很重要 Timeout 0; while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) RESET) { Timeout; if(Timeout 0x5000) // 超時(shí)判斷 { // LSE啟動(dòng)失敗可以切換為L(zhǎng)SI或進(jìn)入錯(cuò)誤處理 break; } } if(Timeout 0x5000) { // LSE啟動(dòng)成功選擇為RTC時(shí)鐘源 RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); } else { // 啟動(dòng)失敗降級(jí)使用LSI RCC_LSICmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) RESET); RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); } // 使能RTC時(shí)鐘 RCC_RTCCLKCmd(ENABLE);踩坑點(diǎn)1LSE啟動(dòng)失敗。這是最常見(jiàn)的問(wèn)題。原因可能是晶振質(zhì)量問(wèn)題、負(fù)載電容不匹配、PCB布局走線過(guò)長(zhǎng)引入干擾。務(wù)必在代碼中加入超時(shí)判斷和降級(jí)方案如切到LSI并在硬件上確保晶振離MCU引腳最近晶振外殼接地。3.2 BKP與RTC初始化流程初始化必須遵循嚴(yán)格的順序否則可能無(wú)法正確配置。void BKP_RTC_Init(void) { // 1. 使能PWR和BKP時(shí)鐘拿到第一把鑰匙 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); // 2. 關(guān)閉備份域?qū)懕Wo(hù)打開(kāi)第一把鎖 PWR_BackupAccessCmd(ENABLE); // 3. 檢查是否是第一次上電或備份域完全復(fù)位 if (BKP_ReadBackupRegister(BKP_DR1) ! 0xA5A5) // 用一個(gè)魔數(shù)判斷 { // 3.1 首次使用需要復(fù)位備份域并重新配置RTC BKP_DeInit(); // 復(fù)位備份域寄存器 // 3.2 配置RTC時(shí)鐘源如上一節(jié)的代碼 // RCC_LSEConfig(...); RCC_RTCCLKConfig(...); // 3.3 等待RTC寄存器同步 RTC_WaitForSynchro(); // 3.4 設(shè)置RTC預(yù)分頻器得到1秒的時(shí)鐘節(jié)拍 // 如果使用LSE (32768Hz)設(shè)置成32768-1即可得到1Hz RTC_SetPrescaler(32767); // 注意寫(xiě)入的是(分頻系數(shù)-1) // 3.5 等待上一次操作完成 RTC_WaitForLastTask(); // 3.6 初始化RTC時(shí)間例如設(shè)置為2023-01-01 00:00:00 RTC_SetCounter(0); // 設(shè)置時(shí)間戳為0 RTC_WaitForLastTask(); // 3.7 寫(xiě)入魔數(shù)標(biāo)記已經(jīng)初始化 BKP_WriteBackupRegister(BKP_DR1, 0xA5A5); } else { // 不是第一次只需要等待RTC寄存器同步即可 RTC_WaitForSynchro(); } // 4. 可選重新使能寫(xiě)保護(hù)防止意外寫(xiě)入 // PWR_BackupAccessCmd(DISABLE); }關(guān)鍵點(diǎn)解析BKP_ReadBackupRegister和BKP_WriteBackupRegister是操作BKP的核心函數(shù)。RTC_WaitForSynchro()和RTC_WaitForLastTask()是必須的。因?yàn)镽TC的寄存器位于APB1時(shí)鐘域而RTC核心運(yùn)行在另一個(gè)慢速時(shí)鐘域它們之間通過(guò)影子寄存器同步讀寫(xiě)操作需要時(shí)間。不等待完成就進(jìn)行下一步操作是導(dǎo)致RTC配置失敗的主要原因之一。用BKP_DR1存儲(chǔ)一個(gè)“魔數(shù)”來(lái)判斷是否初始化這是標(biāo)準(zhǔn)做法。這個(gè)值在VBAT有電的情況下會(huì)一直保持。4. RTC時(shí)間的設(shè)置、讀取與日歷轉(zhuǎn)換RTC的核心是一個(gè)32位的向上計(jì)數(shù)器RTC_CNT。你設(shè)置一個(gè)初始時(shí)間戳例如Unix時(shí)間戳然后它每秒加1。所以我們操作RTC本質(zhì)上就是讀寫(xiě)這個(gè)計(jì)數(shù)器并進(jìn)行時(shí)間和日期格式的轉(zhuǎn)換。4.1 設(shè)置RTC時(shí)間設(shè)置時(shí)間就是給RTC_CNT寄存器寫(xiě)入一個(gè)代表“從某個(gè)參考點(diǎn)到現(xiàn)在經(jīng)過(guò)了多少秒”的值。最常用的參考點(diǎn)是“1970年1月1日 00:00:00 UTC”也就是Unix時(shí)間戳。// 將日歷日期時(shí)間轉(zhuǎn)換為Unix時(shí)間戳簡(jiǎn)化版未考慮閏秒 uint32_t DateToTimestamp(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second) { // 這里需要實(shí)現(xiàn)一個(gè)日期轉(zhuǎn)秒數(shù)的算法代碼較長(zhǎng)。 // 通??梢允褂胢ktime函數(shù)如果編譯器支持或自己實(shí)現(xiàn)一個(gè)。 // 為了示例假設(shè)我們有一個(gè)轉(zhuǎn)換好的時(shí)間戳 setTimeStamp uint32_t setTimeStamp ...; // 計(jì)算出的時(shí)間戳 // 關(guān)閉寫(xiě)保護(hù)如果之前使能了 PWR_BackupAccessCmd(ENABLE); // 寫(xiě)入計(jì)數(shù)器 RTC_SetCounter(setTimeStamp); RTC_WaitForLastTask(); // 務(wù)必等待 // 重新使能寫(xiě)保護(hù) // PWR_BackupAccessCmd(DISABLE); return setTimeStamp; }在實(shí)際項(xiàng)目中我強(qiáng)烈建議你使用一個(gè)現(xiàn)成的、經(jīng)過(guò)驗(yàn)證的時(shí)間庫(kù)來(lái)處理日期和秒數(shù)的轉(zhuǎn)換比如“TimeLib”庫(kù)或者C標(biāo)準(zhǔn)庫(kù)的struct tm和mktime/gmtime注意嵌入式環(huán)境下的可移植性。自己寫(xiě)很容易在閏年、閏月上出錯(cuò)。4.2 讀取RTC時(shí)間并轉(zhuǎn)換讀取就更簡(jiǎn)單了就是獲取RTC_CNT的當(dāng)前值然后轉(zhuǎn)換成易讀的年月日時(shí)分秒。void GetCurrentTime(RTC_TimeTypeDef* timeStruct) { uint32_t currentCounter RTC_GetCounter(); // 將currentCounter (Unix時(shí)間戳) 轉(zhuǎn)換為 年月日時(shí)分秒 // 同樣建議使用庫(kù)函數(shù)如 gmtime_r // 以下為偽代碼邏輯 // convertTimestampToDateTime(currentCounter, timeStruct); }踩坑點(diǎn)2RTC中斷與喚醒。RTC除了基本計(jì)時(shí)還可以配置鬧鐘Alarm和周期性喚醒Wakeup。配置鬧鐘時(shí)要注意比較的是RTC_CNT和RTC_ALR寄存器的值單位是秒。配置喚醒定時(shí)器時(shí)RTC_WUTR寄存器設(shè)置的是喚醒周期時(shí)鐘周期數(shù)。關(guān)鍵使能這些中斷后一定要在對(duì)應(yīng)的中斷服務(wù)函數(shù)RTC_IRQHandler中檢查并清除相應(yīng)的中斷標(biāo)志位RTC_GetITStatus/RTC_ClearITPendingBit否則會(huì)一直進(jìn)入中斷。4.3 BKP寄存器的靈活應(yīng)用BKP的讀寫(xiě)非常簡(jiǎn)單關(guān)鍵在于你用它來(lái)存什么。這里給出幾個(gè)典型用例用例1存儲(chǔ)系統(tǒng)運(yùn)行狀態(tài)標(biāo)志// 設(shè)備正常關(guān)機(jī)時(shí)寫(xiě)入一個(gè)關(guān)機(jī)碼 void System_Shutdown(void) { PWR_BackupAccessCmd(ENABLE); BKP_WriteBackupRegister(BKP_DR2, 0xAA55); // 寫(xiě)入正常關(guān)機(jī)標(biāo)志 // ... 其他關(guān)機(jī)操作 // 進(jìn)入待機(jī)或停止模式 } // 系統(tǒng)啟動(dòng)時(shí)檢查 void System_Startup(void) { if(BKP_ReadBackupRegister(BKP_DR2) 0xAA55) { printf(上次是正常關(guān)機(jī)。\n); // 可能不需要從頭初始化所有外設(shè) BKP_WriteBackupRegister(BKP_DR2, 0x0000); // 清除標(biāo)志 } else { printf(上電復(fù)位或異常斷電。\n); // 執(zhí)行完整的初始化流程 } }用例2存儲(chǔ)傳感器校準(zhǔn)參數(shù)假設(shè)你有一個(gè)溫度傳感器需要在出廠時(shí)校準(zhǔn)得到一個(gè)浮點(diǎn)型的斜率a和截距b。你可以將它們轉(zhuǎn)換成整數(shù)或拆分成多個(gè)16位數(shù)據(jù)存入BKP。typedef struct { float slope; // 斜率a float offset; // 截距b } CalibParams; void WriteCalibToBKP(CalibParams *calib) { uint32_t slope_int (uint32_t)(calib-slope * 1000); // 放大1000倍存為整數(shù) uint32_t offset_int (uint32_t)(calib-offset * 1000); PWR_BackupAccessCmd(ENABLE); BKP_WriteBackupRegister(BKP_DR3, (uint16_t)(slope_int 16)); // 存高16位 BKP_WriteBackupRegister(BKP_DR4, (uint16_t)(slope_int 0xFFFF)); // 存低16位 BKP_WriteBackupRegister(BKP_DR5, (uint16_t)(offset_int 16)); BKP_WriteBackupRegister(BKP_DR6, (uint16_t)(offset_int 0xFFFF)); // PWR_BackupAccessCmd(DISABLE); } void ReadCalibFromBKP(CalibParams *calib) { uint32_t slope_int ((uint32_t)BKP_ReadBackupRegister(BKP_DR3) 16) | BKP_ReadBackupRegister(BKP_DR4); uint32_t offset_int ((uint32_t)BKP_ReadBackupRegister(BKP_DR5) 16) | BKP_ReadBackupRegister(BKP_DR6); calib-slope (float)slope_int / 1000.0f; calib-offset (float)offset_int / 1000.0f; }踩坑點(diǎn)3BKP數(shù)據(jù)校驗(yàn)。BKP雖然可靠但在極端電壓波動(dòng)或強(qiáng)干擾下數(shù)據(jù)仍有微小概率出錯(cuò)。對(duì)于關(guān)鍵數(shù)據(jù)建議增加校驗(yàn)機(jī)制比如CRC校驗(yàn)或存儲(chǔ)“鏡像對(duì)”。例如把一個(gè)數(shù)據(jù)存兩遍到不同的BKP寄存器讀取時(shí)比較兩者是否一致或者存儲(chǔ)數(shù)據(jù)的同時(shí)計(jì)算一個(gè)CRC8/CRC16校驗(yàn)碼一起存進(jìn)去讀取時(shí)再驗(yàn)證。5. 低功耗模式下的生存之道待機(jī)與喚醒BKP和RTC最大的用武之地就是在低功耗項(xiàng)目中。STM32的待機(jī)模式Standby Mode功耗可以低至幾微安而在此模式下只有備份域BKPRTC和喚醒電路保持供電。這正是實(shí)現(xiàn)“電子日歷”或“間歇性數(shù)據(jù)采集器”的關(guān)鍵。5.1 進(jìn)入待機(jī)模式進(jìn)入待機(jī)模式前需要做好一切準(zhǔn)備保存現(xiàn)場(chǎng)將需要保持的系統(tǒng)狀態(tài)如當(dāng)前數(shù)據(jù)記錄指針、IO口狀態(tài)等存入BKP。配置喚醒源最常用的就是RTC鬧鐘喚醒。你需要設(shè)置好RTC鬧鐘寄存器RTC_ALR并開(kāi)啟RTC鬧鐘中斷和喚醒功能。執(zhí)行進(jìn)入待機(jī)指令void Enter_StandbyMode(uint32_t wakeupDelaySeconds) { // 1. 保存狀態(tài)到BKP (略) // 2. 設(shè)置RTC在 wakeupDelaySeconds 秒后喚醒 RTC_SetAlarm(RTC_GetCounter() wakeupDelaySeconds); RTC_ITConfig(RTC_IT_ALR, ENABLE); // 使能鬧鐘中斷 RTC_WaitForLastTask(); // 3. 清除喚醒標(biāo)志防止一進(jìn)入就被誤喚醒 PWR_ClearFlag(PWR_FLAG_WU); // 4. 使能喚醒引腳如果需要WKUP引腳喚醒 // PWR_WakeUpPinCmd(ENABLE); // 5. 進(jìn)入待機(jī)模式 PWR_EnterSTANDBYMode(); // 執(zhí)行此函數(shù)后程序停止芯片進(jìn)入待機(jī) }5.2 從待機(jī)模式喚醒與恢復(fù)當(dāng)RTC鬧鐘時(shí)間到芯片會(huì)被喚醒。注意待機(jī)模式喚醒會(huì)導(dǎo)致芯片復(fù)位相當(dāng)于按了一次復(fù)位鍵。所以程序會(huì)從main()函數(shù)開(kāi)始重新執(zhí)行。因此在main()函數(shù)的開(kāi)頭你需要判斷復(fù)位來(lái)源int main(void) { // 系統(tǒng)初始化時(shí)鐘等 SystemInit(); // 檢查是否是從待機(jī)模式喚醒 if(PWR_GetFlagStatus(PWR_FLAG_SB) ! RESET) { // 是從待機(jī)模式喚醒 PWR_ClearFlag(PWR_FLAG_SB); // 清除待機(jī)標(biāo)志 // 1. 恢復(fù)BKP中保存的狀態(tài) // 2. 重新初始化外設(shè)因?yàn)閺?fù)位后大部分外設(shè)都關(guān)閉了 // 3. 繼續(xù)執(zhí)行主循環(huán)邏輯例如采集一次數(shù)據(jù)然后再次進(jìn)入待機(jī) RestoreFromStandby(); } else { // 是冷啟動(dòng)或其它復(fù)位 // 執(zhí)行完整的初始化包括RTC和BKP的首次配置 Normal_Init(); } while(1) { // 主循環(huán) if(need_to_sleep) { Enter_StandbyMode(3600); // 休眠1小時(shí) } } }踩坑點(diǎn)4喚醒后的外設(shè)初始化。這是最容易出錯(cuò)的地方。待機(jī)喚醒是系統(tǒng)復(fù)位所有外設(shè)除了備份域都回到了默認(rèn)狀態(tài)。你的RestoreFromStandby()函數(shù)必須重新初始化GPIO、USART、SPI、I2C等所有你用到的外設(shè)但不能再次初始化RTC和BKP否則時(shí)間就丟了。要確保你的初始化代碼是“冪等”的或者能被安全地重復(fù)調(diào)用。6. 進(jìn)階話題與疑難雜癥排查6.1 時(shí)鐘精度校準(zhǔn)即使用了LSE晶振由于晶振本身的物理特性也會(huì)存在誤差。STM32的RTC模塊提供了一個(gè)非常實(shí)用的時(shí)鐘校準(zhǔn)寄存器RTC_CALR可以通過(guò)數(shù)字方式微調(diào)計(jì)時(shí)速度。原理通過(guò)周期性增加或減少RTC時(shí)鐘的脈沖數(shù)來(lái)補(bǔ)償頻率偏差。操作你需要一個(gè)更高精度的時(shí)鐘源如GPS的1PPS信號(hào)、網(wǎng)絡(luò)NTP時(shí)間作為參考計(jì)算一段時(shí)間內(nèi)比如24小時(shí)RTC的快慢秒數(shù)然后計(jì)算出校準(zhǔn)值寫(xiě)入RTC_CALR。這是一個(gè)負(fù)反饋過(guò)程。公式簡(jiǎn)化CALP位決定是增加還是減少脈沖CALM[8:0]是校準(zhǔn)值。具體計(jì)算需要參考芯片參考手冊(cè)的校準(zhǔn)章節(jié)。粗略來(lái)說(shuō)如果你的RTC每天慢X秒你需要通過(guò)校準(zhǔn)讓它每天增加X(jué)秒的脈沖。6.2 跨系列兼容性與HAL庫(kù)要點(diǎn)如果你使用STM32CubeMX和HAL庫(kù)流程會(huì)變得更簡(jiǎn)單但抽象層次也更高。初始化在CubeMX中勾選RTC選擇時(shí)鐘源LSE/LSI并激活日歷和鬧鐘。生成的代碼會(huì)自動(dòng)處理PWR/BKP時(shí)鐘使能和寫(xiě)保護(hù)。讀寫(xiě)時(shí)間使用HAL_RTC_GetTime()和HAL_RTC_GetDate()以及對(duì)應(yīng)的Set函數(shù)。HAL庫(kù)幫你處理了時(shí)間格式轉(zhuǎn)換和寄存器訪問(wèn)序列。讀寫(xiě)B(tài)KP使用HAL_RTCEx_BKUPRead()和HAL_RTCEx_BKUPWrite()。注意事項(xiàng)HAL庫(kù)函數(shù)內(nèi)部通常已經(jīng)包含了等待同步EnterInitMode和操作完成WaitForSynchro的步驟但你在連續(xù)調(diào)用多個(gè)RTC操作時(shí)仍需注意它們之間的時(shí)序最好檢查函數(shù)的返回值HAL_StatusTypeDef。6.3 常見(jiàn)問(wèn)題排查清單當(dāng)你發(fā)現(xiàn)RTC不走時(shí)、BKP數(shù)據(jù)丟失或讀寫(xiě)出錯(cuò)時(shí)可以按照這個(gè)清單逐一排查電源問(wèn)題VBAT引腳是否連接了電池或正確接到了VDD用萬(wàn)用表測(cè)量VBAT引腳電壓。電池是否沒(méi)電了紐扣電池的電壓應(yīng)高于2.0V通常3V。時(shí)鐘問(wèn)題LSE晶振是否起振可以用示波器探頭高阻檔測(cè)量OSC32_IN/OUT引腳看是否有32.768kHz的正弦波。注意探頭負(fù)載可能導(dǎo)致停振最好用衰減探頭或間接測(cè)量。負(fù)載電容C1, C2的值是否正確參考晶振手冊(cè)和STM32的數(shù)據(jù)手冊(cè)。代碼中是否成功選擇了RTC時(shí)鐘源檢查RCC_BDCR寄存器的RTCSEL位。訪問(wèn)權(quán)限問(wèn)題是否在操作BKP/RTC前使能了PWR和BKP時(shí)鐘(__HAL_RCC_PWR_CLK_ENABLE(),__HAL_RCC_BKP_CLK_ENABLE())是否關(guān)閉了備份域?qū)懕Wo(hù)(HAL_PWR_EnableBkUpAccess())操作RTC寄存器后是否等待了上一次操作完成(檢查HAL_RTC_系列函數(shù)的返回值)軟件邏輯問(wèn)題在待機(jī)喚醒后是否錯(cuò)誤地重新初始化了RTC導(dǎo)致時(shí)間重置是否在中斷服務(wù)程序中進(jìn)行了耗時(shí)過(guò)長(zhǎng)的RTC/BKP操作這可能導(dǎo)致時(shí)序錯(cuò)誤。對(duì)BKP的讀寫(xiě)操作地址是否正確不同型號(hào)STM32的BKP寄存器起始地址和數(shù)量不同。數(shù)據(jù)校驗(yàn)問(wèn)題是否沒(méi)有對(duì)BKP中的關(guān)鍵數(shù)據(jù)進(jìn)行校驗(yàn)讀到了錯(cuò)誤的值7. 一個(gè)完整的應(yīng)用實(shí)例簡(jiǎn)易數(shù)據(jù)記錄儀最后我們整合所有知識(shí)點(diǎn)設(shè)計(jì)一個(gè)簡(jiǎn)易的溫濕度數(shù)據(jù)記錄儀。功能需求每隔1小時(shí)通過(guò)I2C讀取SHT30溫濕度傳感器。將“時(shí)間戳 溫度 濕度”作為一個(gè)記錄保存到外部SPI Flash如W25Q128中。記錄索引當(dāng)前寫(xiě)到Flash的哪個(gè)地址了需要掉電保存。設(shè)備大部分時(shí)間處于待機(jī)模式以省電。系統(tǒng)設(shè)計(jì)硬件STM32F103C8T6自帶BKP和RTCSHT30傳感器W25Q128 Flash32.768kHz晶振紐扣電池接VBAT。初始化流程main函數(shù)開(kāi)頭初始化系統(tǒng)時(shí)鐘、GPIO、I2C、SPI。解鎖備份域檢查BKP_DR1中的魔數(shù)。若魔數(shù)不存在則初始化RTC設(shè)為當(dāng)前時(shí)間并將記錄索引write_index清零存入BKP_DR2/DR3。將魔數(shù)寫(xiě)入BKP_DR1。若魔數(shù)存在則從BKP_DR2/DR3讀出write_index并等待RTC同步。主循環(huán)邏輯讀取當(dāng)前RTC時(shí)間并計(jì)算距離下一個(gè)整點(diǎn)還有多少秒seconds_to_next_hour。設(shè)置RTC鬧鐘在seconds_to_next_hour后觸發(fā)。將當(dāng)前write_index和其他必要狀態(tài)可選存入BKP。調(diào)用Enter_StandbyMode(seconds_to_next_hour)進(jìn)入待機(jī)。喚醒后待機(jī)喚醒復(fù)位在main中判斷為待機(jī)喚醒。從BKP恢復(fù)write_index。重新初始化I2C、SPI因?yàn)閺?fù)位后失效了。讀取SHT30數(shù)據(jù)。組合“RTC時(shí)間戳 數(shù)據(jù)”寫(xiě)入SPI Flash的write_index地址。write_index增加并更新到BKP中。跳轉(zhuǎn)到主循環(huán)邏輯計(jì)算下一次喚醒時(shí)間再次休眠。這個(gè)例子涵蓋了BKP存儲(chǔ)狀態(tài)、RTC定時(shí)喚醒、低功耗管理、外設(shè)數(shù)據(jù)存儲(chǔ)等核心環(huán)節(jié)是一個(gè)典型的物聯(lián)網(wǎng)終端設(shè)備原型。通過(guò)這個(gè)項(xiàng)目你就能深刻理解BKP和RTC如何成為嵌入式系統(tǒng)中數(shù)據(jù)持久化和定時(shí)任務(wù)的“定海神針”。在實(shí)際調(diào)試時(shí)可以先用串口打印出關(guān)鍵步驟的信息如索引值、時(shí)間戳待功能穩(wěn)定后再關(guān)閉調(diào)試輸出以降低功耗。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲自拍欧美色综合| 亚洲成人一区二区精品| 久久视网78| 人人操人人大香蕉| 蜜乳av一区二区| 91美女精品| 试看福利| 伊人网在线观看| 亚洲久热| 岛国片在线观看视频亚洲| 亚洲伊人久久综合97| 九色 蝌蚪 熟女自| 国产精品久久久久久久久久久久久久久久 | 欧美专利1区2区3区4区5区免费| AV中文字幕三四五| 高清无码一区二区三区| 国产精品com| 97视频在线观看网站| 国产极品999| 色色国产| 天天综合,91综合永久| 青草av在线| 99热99在线播放激情| 九九九九热| 揉揉揉夜夜| yazhouzaixian| 久久久精品一区二区| www.高清无码诱惑一区.com| 97自拍一区| 日韩久久超碰色| 禁止观看美女黄| 精品久久久无码| 欧美中出1| 日韩少妇一区二区三区| 欧美精品1区2区3区| 韩国午夜理伦三级好看| 人人做人人妻人人夜视频| 岛国黄| 九九无码| 日韩激情无码影院| 国产精品一二三在线看| 国内精品久久久久影院亚洲| 久久亚洲婷婷| 人妻天堂综合网| 欧洲无码一区二区| 精品人妻一区二区三区夜夜| 99久热精品99re6热| 四虎884a| 久久精品99| 97国产精品久久久久| 蜜区区视频79| 男人天堂网站| 亚洲一区二区三区四区视频| 伊人影院中文字幕| 神马影院午夜福利久久久| 91欧美另类| 欧美骚少妇| 久草电影网| 大香蕉懂9| 亚洲AV色图| 亚洲欧美不卡线| 亚洲中字幕日本一区二区三区| 网友自拍第一页| 日本αv| 久操凹凸视频| 日本在线不卡一二区| 五月丁香久久| 久草婷婷| 怡春院久久| 丝袜人妻av一区二区| 欧美日韩黄片精品在线| 欧美成人都市人妻| 天天日美女的B| 97视频免费在线| 欧美色涩| 看日韩操逼| 另类视频在线| 男人久久精品| 91天天综合日韩欧美| 欧美性爱日韩高清| 97精品综合久久| 粉嫩国产精品久久久| 久久精品男人的天堂| 91天天综合日韩欧美| 色黄污美女啪啪啪免费网站| 五月天婷婷色| 国产97色在线 | 亚洲| www.亚洲黄色| 日产狠狠干| 欧美亚洲se91| 天天视频综合在线观看视频| 午夜性| 中文熟女五十乱码在线| 久草精品国产99| 人妻熟女av国产网站| 91久热这里只有精品| 精品视频久久区| 国产精品久久久久久久久久久久久久吹| 三男一女不戴套的A片| 亚洲最大网站av| 极品内射| 自拍偷拍国产欧美日韩韩| 中文字幕在线高清男人的天堂| 一区二区三区男女操逼黄色小电影| 久久久久久久9最新免费视频观看| 蜜桃久久一区二区| 另类小说五月天| 91日日夜夜| 精品国产91av一区二区三区| 色狠狠综合噜一二三区| 亚洲人久久久久日| 丁香五月偷拍| 欧美日韩免费专区在线| 日本人妻中文字幕精品| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 欧美 色 亚洲| 日本中文字幕在线视频 | 天天干电影| 91|九色|国产熟女| 东京热,男人的天堂| 日人妻视频91| 激情综合 婷婷五月 红杏| 美国一区二区免费视频| 蜜臀中文无码午夜| 精品v1区| 在线观看亚洲专区| 欧美性爱一区二区三区| 爱我干综合| 欧美 日韩第一性色| 亚洲日本韩国在线| 天美麻花大全视频| 无码国产精品96久久久久孕妇| 后入美女国产| 成人无码电影在线观看网| 性爱AV天堂| 岛国大片国产| wuyechaopeng| 色婷网| 淫荡网址| 精品一区二区三区四区女 | 日日夜夜模| 国产精品 久久久精品一牛| 国产大片精久久久久久| 日韩AV一起草| 99re98| 激情露脸爱| 免费一级a毛片久久久久久鸭绿欲| 日本新免费二区三区| 国产午夜无码片在线观看影视| 精品无码产区一区二| 九九色逼| 91影库| 狠狠操狠狠燥| 精品大久久| 精品日韩中文在线| 蜜臀99久久国产| 国产精品亚洲四五区在线观看| a一区二区三区乱码在线| 久久久久久裸体| 精品一区二区3区| 国产Av超碰| 久久久少妇诱惑精品视频| 婷婷久热| 国产亚洲精品激情| 台湾佬大香蕉| 日韩干B| 伊人伊人LD| 色情综合| 黄色视频特级毛片| 国产一区二区三三视频| 久久超碰网| 欧美人人天天网| 天天日少妇逼AV| 国产辣妈在线视频福利| 天美麻豆一区二区三区| 日韩人妻精品中文字幕| 精品久久久久9999| 色情五月综合婷婷| 成人国产精品三级A片| 嫩草美女久久| 九热中文字幕| 国产超碰97| 蜜臀久久在线视频| 清纯唯美激情四射| 激情五月综合网| 久操凹凸视频| 思思热在线视频免费| 国产久久天堂资源| 亚洲脚交| 中文字幕精品亚洲熟女| 久久高清无码夜夜操| 91啪9色| 五月丁香| 成功精品影院| 翔田千里av一区二区三区| 岛国在线免费视频| 超碰在线免费一区二区三区| 夜夜黄| 久久精品中文| 97超碰免费生活| 色综和网| 一区,二区,三区视频| 一区二区三区 丝袜 高跟 美腿| 一块操欧美性爱| 国产精品999zyz| AV一区观看| 人妻精品免费一二三区| 老司机午夜精品视频| 欧美97色| 丰满人妻一区二区三区四区| 色约约一区=区三区| 人妻丰满熟妇av无码区蜜桃| AV天黑人| 国产精选视频| 超碰97日韩| 性欧美| 欧美第五页| 国产搭汕a级片| 九九热午夜欧亚国产视频| 天天综合网~91综合网| 亚洲欧洲激情| 少妇高潮九九九九九九九| 欧美在线|亚洲| 欧美在线|亚洲| 伊人嫩草| 啊啊啊好想要| 亚瑟国产精品久久无码| 国产成年免费大片黄在线观看| 精品人妻中文字幕4399| 成人亚欧免费视频| 天天日B夜夜干B时时操B| 国产成人bd在线观看| 亚洲最大的综合性av| 国产一区在线免费播放| 97九色人妻| 久久久久9999妇女| 欧美成人贴图| 热99这里有精品综合久久 | 99热这里是精品| 激情综合色| 麻豆60秒| 丝袜美女诱惑 91 视频| 欧美日韩欧美| 欧美一级美片在线观看免费| 人人干人人操人人..com| 无码自拍SM| 久久久工口| 成人久久久精品| 超碰色大香蕉| 日韩探花精品在线视频| 67914亚洲精品| 磁力99AV| 香蕉综合网| 日韩成人在线性爱视频| 97人人超| 神马午夜久久久| 国产乱不卡| 中文字幕蜜乳av| 欧美精品99久久久**| 色区久久| 9久精品视频在线观看| 夜夜高潮夜夜爽夜夜爱爱一区| 国产强奸AV在线| 国产精品视频白浆免费| 久草在| 久久区| 无码av永久免费专区网站| 91九色首页| 男人的天堂日本东京热| 女性91网站| 首页中文字幕中文字幕免费| AV一二区| 色五月AV| 二色av| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 欧美另类天堂| 亚一综合久久久久久久久久| 婷婷月色| 三及片网站| 可以在线观看AV的网站| 热久日综合| 色吧91| 国产超碰人人爽人人做| 操b网站亚洲无码| 日韩啪啪视频| 婷婷在线视频| 91日韩网站| 在线观看AV片| 综合91网| 少妇无码av专区线| 人妻在线大香蕉| 91亚州| 五月婷婷色色| 91老妇女| 婷婷色综合| 91精品操美女| 五月天色色网站| 中文字幕伊人| 伊人久久大香大香线蕉中文| 中文字幕伊人| 欧美性爱中文字幕无线码| 中美日韩毛片| 久久欲| 美女久久久久久久| 日韩精品在线视频在线观看| 男生女生啊啊啊啊| 一区二区三区高清天码| 天天拍天| 香蕉综合网| 91无码精品| 玖玖婷婷五月天| 中文字幕视频在线观看| 天天添天天干电影| 91黑人狂躁丰满熟妇| 亚洲天堂人妻一区二区| 国产精品视频内谢女人| 婷婷激情一区二区三区俺也去| 97超碰碰| 国产乱人妻精品入口| 欧美日韩国产另类综合| 加勒比性爱成人在线| 欧美特大黄一级片片免费| 锕锕好爽 死我在线观看| 色色色色网站| 欧美v日韩v亚洲v最新在线| 久视频在线观看| 欧美大香蕉久| 性欧美第一页| 久久最新免费视频23| 我要去看2个日本美女.com曹逼| 区一二区日韩亚洲乱码av电影| 婷婷丁香九月| 91在线观看,天天综合| 天美传媒av 在线| 在线人成亚洲视频免费观看| 国产中文日韩欧美一区二区三区人妻丝袜美腿 | 亚洲欧美国产va在线| 女人 A一级| 亚洲精品九九九九九九| 黄色十八禁网站| 伊人网综合在线视频| 中文字幕丝袜| 伊人网在线视频| 欧美黄片视频在线观看免费| 黄色无码高清黄色无码网站| 亚洲男人的天堂网| 偷窥自拍亚洲色图| 久久人人爽爽人人爽人人片αV| 欧美在线大香999| 少妇国产不卡| 凸凹视频在线观看| 99久久久久久亚洲精品不卡| 久久久999国产| 加勒比AV网| 五月激情啪啪| 在线v中文字幕一区二区三区| 97色综合中文网| 久久精品夜色国产亚洲AV| www激情| 国产亚洲精品精AV.| 成人资源中文字幕在线观看| 大吊色| 99亚亚热| 另类小说五月天| 久久久亚洲欧美综合| 亚洲开心网| 欧美啪啪天堂| 国产免费一区| 国产性爱欧美性爱在线| 97色论| 国产免费一区二区三区最新不卡| 青娱乐亚洲自拍| 日产操逼| 精品人妻中文字幕高清| 久操视频在线观看| 97精品免费视频网站| 无码欧美有限公司| 极品少妇久久久| 91天堂丝袜美腿| 国产精品农村妇女| 久久一区二区高清免费| 91在线免费观看处女| 麻豆色约约| 在线人人人人人人精品超 | 久久专区| 大香樵伊人网| av天堂电影网| 99re视频在线观看这里只有精品| 国产精品另类一区大香蕉| 日韩欧美大力操| 人人手机欧洲亚洲国产人妻| 婷婷色香伊人| 精品视频久久久久九九九九9999| 亚洲做性| 久久久婷婷婷| 97色综合中文网| 中文字幕av乱伦| 国产吹潮女在线观看| 波多野结衣一级视频| 淫色网综合| 91狠狠综| 亚洲丝袜色图| 色色色色日本| 97超碰这里只有精品| 国产精品人妻熟女aⅴ| 国产精品午夜成人福利| 亚洲精品成人动漫在线| 青女在线| 99久久精品国产高潮| 在线情色电影 91大| 3028国产精品| 免费在线视频97| 五月天综合网| 波多野结衣AV无码一区| 国内操逼视频二区| 色嗨嗨在线| 久久久精品一区二区| 中国女人内射6XXXXX| 一二视频神马久久传媒| 国产伦精品一区二区三区在线观| 麻豆一区二区AV天美| 三级三级三级日本99| 久午视频| 欧美色图下一页| 欧美日韩精品一区二区三区高清| 亚洲午夜蜜臀| 欧美美女自慰一区二区三区| 亚洲A曰本VA欧美VA视频| 丰满搜索结果 -第18页- 久久高清无码 | 天天操天天7| 精品性爱无码在线播放| 国产精品久久久| 粘花网06av视频| 一区二区三区黄色片a| 久久6热精品99视频| 999岛国大片| 国产极品馒头逼| 久久亚洲不卡一区二区三区 | 日韩免费中文字幕视频| 热的中文 热的有码 热的国产| 国产欧美亚洲精品a第2页| 成人小电影网站tex| 超碰精品| 色婷婷丁香五月| 国产精品懂色tv影视免费观看| 日日黄色三级网站| 丁香五月婷婷啪啪| 久久精品午夜国产亚洲AV无码| 新视频sss国产| 欧美久久九九| 久久亚洲AV无码专区国产精品 | 青青操少妇| 激情小说五月天| 情趣丝袜无码操逼视频| 99AV| 天天色怡春院| 欧美香蕉视xxx| 乱伦熟女区| 亚洲一区操| 亚洲三级。日韩三级| 欧美日韩精品国产91| 五月丁香婷婷综合| 郑州宾馆老熟女露脸啪啪| 免费国产视频| AV天堂因数| A男人的天堂| 按摩中文字幕| 五月丁香| av资源在线播放天堂| 蜜乳AV.COM| 91精品人妻一区二区三区蜜桃| 9长久久精品| 亚洲AV资源| 五月丁香啪啪| 91强奸乱轮| 成人性爱av| 最新亚洲黄色免费电影| 一二三区精品视频| 亚州色图欧美色图| 后入式999| 粉嫩久久久久| 成熟熟女国产精品一区二区 | 欧美极度丰满熟妇hd| 日B操| 亚洲成成熟女人综合一区二区| 久久超碰av在线| 夜夜嗷嗷一区二区| 操操操操操操| 在线视频一区二区传媒| 九九九久千久久激情蜜桃在线看| 蜜色网色哟哟| 日韩中文字幕熟妇人妻| 天天日日日射| 欧美日韩人人早| 久久综合18p| 天天色悠悠激情| 欧美毛片在线网| 中文字幕一区av| 男人的天堂啪啪| 麻豆人妻精品一区二区| 夜夜一区二区| 大稥蕉免费视频这里只有精品| 久久九九综合| 五月丁香六月婷| 亚洲综合五月天| 天天操夜夜操| 中文字幕视频一区视频二区| 日韩少妇丰满亚洲| 97bbn| 欧美在线中M| 四虎影视永久在线观看精品免费网站| 夜夜做夜夜爽精品视频| 欧美久久人体| 蜜臀99久久精品久久久久| 人人操人人摸人人骑| 亚洲国产综合视频| 大香蕉www.超碰| 日韩欧美午夜视频在线| 欧美精品自慰系列寂寞少妇| 91九色首页| 亚洲有码 欧美精品| 亚洲精品蜜桃久久久一区二区三区| 欧美日韩国产中文超碰| 亚洲男人天堂2016| 综合大香蕉美。| 97se亚洲| 精品人妻1区| 色综合久久88色综合久久天天| 韩国黄色片精品久久久| 蜜臀精品1区2区| 亚洲大胆人体av| 欧美热图99| 一级性爱视频免费观看| 粉嫩在线一区二区懂色| 蜜臀av一区二区三区免费观看| 蜜桃精品一区二区三区ww| 欧美韩国你懂得在线 | 亚洲AV成人无码一二三久久| 亚洲国产麻豆一区二区三区| 99在线观看| 99re8免费高清在线| 欧美久久人体| 国产强奸乱伦xd| 亚洲欧美日韩夜夜| 午夜性| 在线 欧美 亚洲| 亚洲伊人成综合成人网| 亚洲 一区二区 自拍| 久久男人的天堂国产| 亚洲日韩欧美一区二区| 精品高潮| 中文字幕av亚洲在线| 欧美白嫩在线放| 麻豆视频一区二区| 777奇米影视777四色| 淫色网综合| 亚州欧美另类| 加勒比久久综合网高清| 大香蕉伊人一区在线观看| 无码精品啪啪啪一区二区三区三州| 人人操人人色网| 日韩黄色成人性爱| 天天操天天7| 女人与公拘交酡2020视频| 久久久五月天| 久久9精品网站| 操操吧亚洲乱伦视频| 久都青青视频| 丰满人妻一区二区三区免费 | 333kkkk·亚洲com久久| 成人色女网| 久久激情婷婷| 天天干天天做| 青青草一区二区高清无码视频| 免费在线黄片视频| 91天美传媒在线观看| 少妇久久久久久| 亚洲欧洲偷拍一区| 99999久久精| 亚洲经典啪啪| 91色综合色| 日韩欧美中文| 久久宗合亚洲| av在线一区二区三区| 亚州综合AⅤ| 国产91av在线播放| 9热9热综合网| 欧美的性爱网站免费| 夜夜操夜夜爽夜夜高潮| 免费久久一级毛片大黄| 日本欧美色| 久综合国内精品自在自线| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 玖色AV| 999久久久九九九九| 久久久九九网站| 激情内射| 大香蕉久久| 91丝袜在线播放| 精品国产乱码久久久久A| 91亚洲电影| 久热色情精品| 日本人妻伦在线中文字幕| 求求你操操我| av在线免费一区二区| 亚洲自拍青操视频| 五月丁香婷婷啪啪| 免费国产视频| 艳尻美人妻| 97国产高清视频在线观看| 亚洲情色综合网| 九九热视频在线观看| 中文字幕欧美丝袜07资源| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 久久久性| 亚洲诱惑| 天天综合网站| 亚洲国产一级黄色视频| 亚洲资源网| 大香蕉伊人久久| 日本一级特级毛片视频| 激情黄色五月天| 狠狠综合网| 国产无码久久高清| 欧美日韩中国x| 男人的天堂2010| 少妇啪啪自拍| 欧美宗合网| 亚洲av热热色| 婷婷五月天激情网| 国产午夜福利专区综合| 亚洲加勒比色图| 天天综合91在线| 精品成人亚洲午夜电影| 日本一二三免费久久| 中文字幕91综合| 亚洲欧洲日韩国产自在线| av天堂电影网| 国产九九九九九九| 婷婷情色五月天| 色色五月婷| 国产精品无码久久久久2025| 丝袜足交视频| 九九亚洲色在线观看| 熟女丝袜视频| 欧美一区二区亚洲天堂| 国产在线强奸视频| 亚洲久久久久| 插插综合网天天影视网| AV中文字幕剧情1区2区3| 人人乐大香蕉| 97最新在线播放视频| 国产精品视频自拍在线| 亚洲97超碰| 欧美色吧综合| 狠狠躁日日躁夜夜躁A| 精品熟女一区=区三区| 欧美在线播放aaaa| 亚洲啪啪视频一区二区| 88xx成人精品视频| 国产精品白丝| 操久久久久| 一区超碰一区| 热久久无毒不卡| 色男人色天堂东京热| 97久久超碰国产网站| 9久综合网| 9久热| 成人午夜视频免费播放| 中国一级特黄大片护士 | 欧美日本不卡| 极品粉嫩少妇视频| 国产白领连续中出在线观看| 色欧美天天| 色色五月婷| 综合欧美日本三级| 亚洲综合中文字幕有码| AV网站高清无码在线观看| 74成人在线| 亚洲性爱成人| 国产精品久久久无码aV去| 国产精品人妻无码久久久互動交流| 超碰97伊人| 综合亚州欧美| 综合亚洲欧美| 国产精品久久久久9999小说| 亚洲丝袜在线观看| 78精品在线| 快灬快灬 一下爽蜜桃在线观看| 国产久9| 成人草草视频| 青草一区二区| 欧美精品三区| 操操操五月天婷婷丁香影院| 中文人妻av高清一区| 人人摸.人人色| 国产精品美女在线一区| 手机在线视频国内精品| 在线观看黄色电话| 午夜色婷婷| 综合网欧美在线| 欧美性爱一内片一区二区三区| 久久这里精品国产99丫e6| 一本正道久久熟女| 伦在线97| 啊啊啊啊,啊啊好多水| www男人天堂| V A在线| 国产高清无码一区三区二区| 国产强奸超碰AV| 91综合天天| 国产色产精品在线观看| 久久久精品中文字幕爱豆| 午夜120视频在线观看| 国产AV久久久蜜爱影集| 91黑丝在线播放| 爱爱动态试试看6 0秒| 超碰日韩美妻| 啊啊啊想要| 一线黄色免费性爱片| 国产欧美一区激情交| 77777亚洲蜜臀精品久久综合蜜臀| 狠狠热这里都是精品| 997色在线| 久久久久亚洲Av无码专区老牛影视| 亚洲日本激情| 激情看片网站| 黄网站黄视频网站进入口 | 91扒丝袜综合在线| 熟妇高潮二区三区| 一本色道无码DVD中文字幕| 精品一区二区综合熟妇| 色噜噜综合在线| 欧美日韩天堂| 久久久久97| 国产精品自产拍在线观看社区| oumeisetu综合| 俞拍自拍| 91小视频| 青久操| 欧美天天综合在线| 青椒国产97在线熟女| 天天综合AV| 国产自偷| 亚洲国产婷婷在线播放| 久久久影院| 欧美,日韩,中文,另类| www.色吧5.com| 99这里只有精品| 秋霞福利网| 日熟女| 嗯嗯啊中文字幕| 爱丝福利| 国产人妖视频一区在线观看| 中文字幕一区 二 区 三 四 五 区日 日 骚| 亚洲高清少妇| 欧美午夜视频免费观看| 人妻碰碰碰碰碰碰| 蜜臀99精品国产高清在线观看| jizzjizz欧美| 蜜臀AV成人精品蜜臀| 搡老女人老熟女91| 九九热超碰| 欧日韩一二三f区| 亚洲高清无码在线桃色| 熟女自慰久久久| 午夜αv| 性爱视频久久| 人妻精品一区二区三区| 操屄不卡视频| 青青草中日韩在线| 浪人综合网| 天天摸夜夜操视频| 欧美性爱第一区| 亚州春色| 亚洲欧美日韩免费电影| 久草精品国产蜜臀| 九九精品无码专区免费| 婷婷情色五月天| 欧美中文字幕日韩在线| 黑人天8A∨高清网站| 精品无码欧美三级| 色婷婷在线视频精品导航| 国产粉嫩蜜臀av一区二区三区| 亚洲有码 欧美精品| 天天综合欧美| 欧美日韩国产传媒在线精品| 97香蕉网| 亚洲综合影视| 高潮的A片激情扒开一区| 午夜福利区| 日本午夜操逼| 亚洲熟女一区二区| 丁香六月婷婷综合| 久久午夜色播影院免费高清| 午夜呻吟欧美| 人人操人人插人www| 久久少妇人妻| 丁香色婷婷| 欧美少妇人妻| 麻豆精品A片免费观看| 8x福利精品第一福利视频导航| 2017大香蕉国产精品久久| 人妻一区视频| 美女t无毒不卡不卡| 后X久久| 国产一区二区三区白丝| 色综合1991| 久久久久久亚洲精品不卡人乳| 永久免费观看的毛片的网站| 日日橹狠狠爱欧美超碰| 男女激情黄色网址| 少妇无码999| 久久男人网| 粉嫩绯色AV一区二区在线| 中文字幕一区二区三区人妻不卡| 97久久资源| 中国一级操逼视频| 91制服丝袜| 99自拍B亚洲 | 日韩激情无码影院| 狠狠做深爱婷婷久久二区| 久久精品美女一区| 久久久久国产精品久久久| 亚洲AV无码久久精品蜜桃小说| 日韩成人性爱电影在线播放| 精…码一二三区| 一直超碰| 欧美后进式| 美女午夜福利免费视频| 欧美+日产+中文| WWW.加勒比人妻一区不卡.com| 牛黄色久午久| 欧美黄色手机在线观看| 一本一道久久综合久久| 色哟哟-国产专区| 国产精品熟女丝袜一区二区| 亚洲国产综合视频| 天天干夜夜操一区二区| 亚洲日本男人天堂网| 妺妺跟我一起洗澡没忍住| 午夜男女爽爽大片免费观看| 青青久久久| 久久99手机免费视频| www.超碰在线| 欧美成人A天堂片在线观看| 美女久久久| 久9爱经典视频| 91在线免费观看处女| 亚洲激情av| 日本高清_区二区三区| 日韩无码一级黄色av片| 天天久久久久久| 一本久久精品中文字| 性色avv| 九色视频91| AV不卡在线| 亚洲精品一二牛牛| 91亚洲欧洲| 亚洲综合嫩| 精品中文日韩字幕视频| 久久超碰亚洲人| www.婷婷六月天| 午夜精品探花| 国产高清MV操逼视频| 蜜乳中文字幕a在线| 久久青青草在线视频| 天堂av最新电影网| 日本孕妇孕交| 媚薬在线视频麻豆| 欧美一区二区日韩传媒搭讪精品| 99热成人| 久久99久久99精品免视看婷婷| 日韩AV无码中文一区二区| 26uuu国产亚洲综合| 亚洲人妻在线精品| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 日本天堂网| 中文字幕啊啊啊在线观看视频| 色狠狠综合| 亚洲乱熟女一区二区三区大香蕉| 九月丁香综合网| 久久亚洲AV无码专区国产精品| 乱伦a片视频| 内射老妇BBWX0C0CK| 精品蜜乳AV免费观看| 少妇被c 黄 免费观看| 亚州综合| 1000部熟女视频在线观看| 亚洲成人激情小说视频| 国产1024在线播放| 一级做受视频免费是看美女| 亚洲无码视频免费在线观看网址!| 男人的天堂 在线一区| 曰韩中文人妻视频| PMv在线观看| 青娱乐福利99| 国产成人无码啪| 成人亚欧免费视频| 亚洲精品aa久久伊人| 手机看片1024你懂的国产| 麻豆啪啪啪视频| 综合激情五月天| 9久超碰| 国产精品九9| 91高跟美女在线播放| 国产精品不卡一区二区三区| 国产第11页| 欧美日韩国产色五月综合在线| 好爽要喷了| 亚洲色人阁| 熟女乱3伦999| 懂色av色欲av蜜臀av| 国产麻豆一级精品视频| 99热这里是精品| 中文字幕视频一区视频二区| 久久免费精品96| 好色美女九七第一页| 91精品人妻一区二区三区蜜桃| 日本中文熟女视频| 999亚洲国产视频| 自偷自拍的亚洲视频| 天美av在线观看| 丝袜视频一区二区在线播放国产中文| 综合av影片| 亚洲情色 欧美| 久久精品人人做人人看| 久久久久亚洲Aⅴ无码| 92福利社视频| 亚洲天堂自拍| 99精品无码| 一起草三级AV电影在线观看 | 欧美刺激色黄片免费看| 欧美午夜精品久久久久久超碰| 天天综合网在线| 中文字幕二区| 日本一级特级毛片视频| 黄页视频网站野外| 亚 欧 美 综合| 欧美人人天天网| 一区二区不卡视| 亚洲 一区二区 自拍| 欧美日韩性感| 蜜臀久久精品久久久久视频| 搡老女人老91二区| 久久久无码av精| 国产精品久久久视频| 国产后入清纯| 国产在线综合网| 日本3级一区二区免费| 99re9这里只有精品| 欧美少妇高潮视频| 国产精品视频自拍在线| 欧美操人| 粉嫩久久久久| 日本操逼视频免费| 99操碰| 日韩情色AV| 国产又黄又爽| 日本网色| 亚洲天堂日本| 26uuu成人影片| 精品视频久久久久九九九九9999| 中文字幕乱偷人妻久久艾草网| 操国产逼| 五月天激情小说网| 九九九九97| 一级AV性爱| 玖玖视频在线资源一区二区三区| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 欧美日动态视频| 国产精品内射婷婷一级二| 91精品91久久久中77777| 欧美 亚洲 91| 都市久久精品激情亚洲| 午夜天天碰综合视频| 国产日韩美女小穴视频网站不卡| 国产亚洲精品美女久久久久久2021| 日韩99999色| 99re久久| 五月丁香影视| 亚洲综合有码| 十八禁视频网站| 国产AV天美传媒一区二区三区 | а√天堂资源官网在线资源| 伊人天堂在线| 美欧色综合| 99综合视频一体| 欧美少妇高潮| 欧美操人| 精品人妻一区二区三区免费视频| 久久AV无码网址| 九九人妻| 高清无码国产亚洲| 欧美性少妇| 爱我干综合| 日本一线产区和二线产区伦理片| 婬女免费一二三区A片| 国产自产22区| 女优视频第10页| 91在线免费观看处女| 亚州综合网| 久草色悠悠在线视频| 国产51色综合久久免费| 国产精品3| 一本久道久久综合狠狠爱| 欧美呦呦性爱| 69人妻精品一区二区绯色| 日韩欧美~中文字| 综合久久中文字幕综合日韩精品| 99精品综合久久久久五月天| 日本亚洲熟女视频| 亚洲第一页色网| 亚洲综合网电影91| 午夜啪| 日韩钢筋无码高清啾啾啾| 国产精品视频麻豆入口| 亚洲日韩久久精品一区| wwwcaobibi| 欧美激情在线观看视频| 东京热激情视频一二三区| 99久久精品国产系列| 熟女自慰久久久| 九月丁香综合网| 大香蕉中文201| 久久久工口| 久久精品国产亚洲AV高清演员表| 一区二区视频你懂的| 日韩女模中文造逼| 精品亚洲天堂| 麻豆精品A片免费观看| 午夜寂寞欧美| 精品国产AV一区天美传媒| 超碰在线974| 午夜福利精品| 人人妻人人澡人人爽久久av| 九一综合精品视品av| 青青伊人这里只有精品| 理论久久婷婷网8| 动漫片子网站3黄| 国模无码一区二区三区在线| 一本色道久久综合精品婷婷| 久久做97| 日本午夜福利影院| 美女裸体无遮挡永久免费观看网站| 九九九精品一区二区无码| 九九热免费视频| 岛国片在线视频网站| 夜夜嗨免费视频| 久久久工口| 国产精品视频白浆免费| 综合另类| 夜夜国自区| 日韩成人午夜精品久久高潮| 欧美日韩中文亚洲v在线综合| 国产精品99999| 亚洲国产精品久久久久婷婷老年 | 国产精品国产精品国产| 加勒比海成人视频网| 蜜桃久久综合视频| 91人妻素女| 91福利网在线观看| 97在线播放 | 性爱动态120秒| 日本一区二区成人在线| 日本孕妇一区二区视频操逼免费看| 骚逼自拍99| 中文字幕乱碼在线| 亚洲综合在线视频| 2021久久国产综合精品青草| 亚洲中字幕日本一区二区三区| 风骚少妇视频中文字幕| 男女91| 乱精品一区字幕二区| 日韩欧美一级特黄大片| 色哟哟 日韩精品| 狠狠爱夜夜| 精品女同一区| 日本五十路在线| 中文字幕亚洲欧美在线不卡| 婷婷五月色| WWW黄片COM| 亚洲第一精品在线视频| 亚洲婷婷综合网| 青青草中文字幕| 91成人精品| 蜜臀在线看片| 精品人妻一区春色| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 成人av动漫在线观看| 强奸国产在线| 国产美女口爆吞精视频| 亚州综合网| 中日韓欧美高清| 乱人乱色一区二区三区免费| 男人的天堂三级| 超碰 国产熟女精品一区| 亚洲视频一二区| 日韩精品人妻系列无码天堂| 人妻夜夜爽天天爽麻豆三区网站 | 亚洲天堂女优在线 | 99久久精品无码一区二区| 欧美午夜视频免费观看| 69av一区二区三区| 青娱乐999| 国产兽交视频在线播放| 一区AV| 国产精品嫩草影院午夜两性| www.亚洲成人一区| 久久受www免费人成| 影音先锋每日最新资源在线观看| a片自拍直播视频| 久久双插| 国产一级内射无挡观看| 夜夜操青青草| 黄色一区二区秘书性感| 人人插人人摸人人| 手机看av网站在线看| 久久东京国产精品视频| 综合网色| 920日本午夜免费| 欧美少妇大量自拍视频在线观看| 久久久久久久久久久人妻| 国产91精品久久久久久久网曝门| 物尤视频一区二区| 操淫穴亚洲五月丁香| 精久久久| 日韩97在线| 国产午夜精品在线观看| 亚洲欧洲日本精品中文a∨| 99久久精品无码一区二区毛片免费| 国产精品麻豆免费视频| 亚欧视频在线| 欧美,日韩,亚洲视频| 丁香五月激情啪啪| 久久久久久夜夜夜夜夜| 青青草白白色| 欧美激情黑人| 中文字幕在线免费观看| 亚洲无码 国产无码| 欧亚性爱在线视频| 青青草毛片| 被男人吃奶很爽的毛片| 日本成人A片免费看| 大伊香蕉在线视频免费| 91 刺激在线| 97超碰天天| 视频在线中文字幕| 婷婷激情四射| 性色av大全| 三级片网站在线播放| 日本一二区免费| 亚洲欧美国产va在线| 激情在线青青操| 午夜乱轮操逼视频免费看| 爱av免费| 亚洲不卡不卡中文字幕不卡| 国产精品在线一区二区| 啪啪自拍九九综合| 国产中文大片资源中文字幕 |