XX性欧美肥妇精品久久久久久,51精品国自产在线,国产欧美日韩,日韩中文字幕

0 賣盤信息
BOM詢價
您現(xiàn)在的位置: 首頁 > 技術(shù)方案 >工業(yè)控制 > STM32L151 RTC自動喚醒-附加RTC日歷-串口修改喚醒時間(最小系統(tǒng)+源碼)

STM32L151 RTC自動喚醒-附加RTC日歷-串口修改喚醒時間(最小系統(tǒng)+源碼)

來源: 電路城
2021-12-13
類別:工業(yè)控制
eye 22
文章創(chuàng)建人 拍明

原標(biāo)題:STM32L151 RTC自動喚醒-附加RTC日歷-串口修改喚醒時間(最小系統(tǒng)+源碼)

STM32L151 RTC自動喚醒及附加RTC日歷設(shè)計詳解

在低功耗應(yīng)用中,利用STM32L151的RTC(實時時鐘)模塊進行自動喚醒和附加RTC日歷管理是非常關(guān)鍵的設(shè)計要點。STM32L151作為STM32系列中的低功耗型號,具備強大的低功耗模式,可以通過RTC模塊配合自動喚醒機制來實現(xiàn)節(jié)能目標(biāo)。本文將詳細闡述如何使用STM32L151的RTC模塊進行自動喚醒,并結(jié)合附加RTC日歷功能,以及如何通過串口修改喚醒時間的相關(guān)技術(shù)細節(jié),最終呈現(xiàn)一個基于最小系統(tǒng)的源碼示例。

image.png

一、主控芯片型號及在設(shè)計中的作用

1.1 STM32L151的型號介紹

STM32L151屬于STMicroelectronics的STM32系列微控制器,基于ARM Cortex-M3內(nèi)核,主頻最高可達32MHz。STM32L151是該系列中主打低功耗和高效能的型號,特別適合低功耗電池驅(qū)動的應(yīng)用場景。STM32L151擁有豐富的外設(shè)資源,支持多種低功耗工作模式,內(nèi)建實時時鐘(RTC)、低功耗看門狗(IWDG)等模塊,可以實現(xiàn)高效的時間管理和低功耗控制。

STM32L151系列的主要特點包括:

  • 最高主頻32 MHz

  • 低功耗設(shè)計,具有多種省電模式(待機、睡眠、停機模式等)

  • 內(nèi)置16-bit RTC模塊,支持自動喚醒和時間計數(shù)

  • 集成多種外設(shè),如USART、I2C、SPI、ADC等

  • 具有內(nèi)置閃存和RAM,適用于嵌入式系統(tǒng)開發(fā)

1.2 在設(shè)計中的作用

在本設(shè)計中,STM32L151作為核心控制單元,承擔(dān)了以下幾項重要任務(wù):

  • RTC自動喚醒管理:利用RTC模塊在設(shè)定的時間周期內(nèi)喚醒系統(tǒng),控制功耗,實現(xiàn)精確的時間調(diào)度。

  • 附加RTC日歷功能:借助RTC模塊實現(xiàn)基于時間的事件觸發(fā),控制設(shè)備的行為,比如定時開關(guān)機、定時操作等。

  • 串口通信:通過USART串口接口接收外部命令,修改喚醒時間等參數(shù),實現(xiàn)靈活的控制。

通過合理配置STM32L151的低功耗模式和RTC喚醒機制,能夠在不需要頻繁喚醒的情況下大幅降低系統(tǒng)的功耗,提高系統(tǒng)的續(xù)航能力。

二、RTC模塊與自動喚醒機制

2.1 RTC模塊工作原理

STM32L151的RTC模塊基于外部32.768 kHz晶振或內(nèi)部低速振蕩器(LSI)工作,提供精確的時鐘源。在設(shè)計中,RTC模塊不僅用于提供準(zhǔn)確的時間,還能用于定時喚醒系統(tǒng)。RTC模塊具有以下功能:

  • 實時時鐘:RTC提供準(zhǔn)確的年月日、時分秒計時,適合用于日歷和定時器應(yīng)用。

  • 定時喚醒:通過設(shè)置RTC的鬧鐘或定時器,系統(tǒng)可以在設(shè)定的時間周期內(nèi)自動喚醒,適用于周期性喚醒場景。

  • 低功耗運行:RTC能夠在STM32L151進入低功耗模式(如待機模式)時繼續(xù)運行,不會受到主系統(tǒng)休眠的影響。

2.2 RTC自動喚醒流程

RTC的自動喚醒流程通常包括以下幾個步驟:

  1. 配置RTC時鐘源:選擇32.768 kHz的外部晶振作為RTC時鐘源,以保證精確度。

  2. 設(shè)置RTC的鬧鐘時間:配置鬧鐘或定時器,在設(shè)定的時間內(nèi)觸發(fā)喚醒。

  3. 進入低功耗模式:將STM32L151進入低功耗模式(如待機模式、睡眠模式等),以降低功耗。

  4. 觸發(fā)喚醒:當(dāng)RTC計時器或鬧鐘到達設(shè)定時間時,系統(tǒng)會自動從低功耗模式喚醒。

2.3 配置RTC模塊的關(guān)鍵寄存器

在STM32L151中,配置RTC模塊需要操作幾個關(guān)鍵寄存器:

  • RTC_CR(RTC控制寄存器):用于使能RTC和配置時鐘源。

  • RTC_PRER(RTC預(yù)分頻器寄存器):設(shè)置RTC的預(yù)分頻器,用于調(diào)整RTC計時精度。

  • RTC_ALRMAR(RTC鬧鐘A寄存器):配置鬧鐘A的觸發(fā)時間。

  • RTC_ISR(RTC初始化和狀態(tài)寄存器):用于檢查RTC的初始化狀態(tài)和相關(guān)事件。

三、附加RTC日歷功能

附加RTC日歷功能通常用于系統(tǒng)需要精確的時間和日期管理。例如,在一個基于RTC的自動喚醒系統(tǒng)中,可能需要根據(jù)日期和時間觸發(fā)不同的事件。STM32L151的RTC模塊支持完整的日歷功能,包括年、月、日、小時、分鐘和秒等信息。RTC模塊通過鬧鐘、周期定時器等方式與日歷結(jié)合,從而實現(xiàn)按特定時間段或日期觸發(fā)事件。

3.1 配置RTC日歷功能

STM32L151支持將RTC模塊配置為日期和時間功能,可以精確到年、月、日、小時、分鐘、秒。通過設(shè)置RTC的日期和時間寄存器(RTC_TR和RTC_DR),可以實現(xiàn)日歷功能。具體步驟如下:

  • 設(shè)置日期寄存器(RTC_DR):配置年、月、日信息。

  • 設(shè)置時間寄存器(RTC_TR):配置小時、分鐘、秒信息。

  • 設(shè)置鬧鐘觸發(fā):結(jié)合RTC模塊的鬧鐘功能,實現(xiàn)按特定時間觸發(fā)事件。

3.2 示例代碼:RTC日歷配置

以下是一個配置RTC日歷和時間的示例代碼:

#include "stm32l1xx.h"

void RTC_Config(void) {
   // 使能LSE外部晶振
   RCC->APB1ENR |= RCC_APB1ENR_PWREN;
   PWR->CR |= PWR_CR_DBP;  // 使能備份域電源
   RCC->CSR |= RCC_CSR_LSEON;  // 啟動LSE
   while (!(RCC->CSR & RCC_CSR_LSERDY));  // 等待LSE準(zhǔn)備好

   // 配置RTC
   RCC->APB1ENR |= RCC_APB1ENR_RTCEN;  // 使能RTC
   RTC->CRL &= ~RTC_CRL_RSF;  // 等待RTC同步
   RTC->CRL |= RTC_CRL_CNF;  // 進入配置模式
   RTC->PRER = 0x007F00FF;  // 設(shè)置RTC預(yù)分頻器
   RTC->CRL &= ~RTC_CRL_CNF;  // 退出配置模式

   // 配置日期和時間
   RTC->DR = 0x0023;  // 設(shè)置日期:星期一,日期為1號
   RTC->TR = 0x1230;  // 設(shè)置時間:12:30:00
}

3.3 時間和日期格式化

為了便于操作,STM32L151的RTC日歷功能可以通過將RTC寄存器中的數(shù)據(jù)提取并格式化為常見的時間字符串格式(例如“YYYY-MM-DD HH:MM:SS”)??梢酝ㄟ^位操作提取出年、月、日、時、分、秒,然后進行格式化。

四、通過串口修改喚醒時間

為了使系統(tǒng)的喚醒時間更具靈活性,設(shè)計中可以通過USART串口接收外部命令,動態(tài)修改RTC鬧鐘的喚醒時間。通過UART串口與PC或其他外部設(shè)備進行通信,接收新的喚醒時間并更新RTC模塊的鬧鐘寄存器。

4.1 串口通信配置

STM32L151支持多種串口協(xié)議,其中USART是常用的串口通信接口。以下是串口配置代碼示例:

#include "stm32l1xx.h"

void USART_Config(void) {
   // 使能USART外設(shè)
   RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
   RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
   GPIOA->MODER |= GPIO_MODER_MODE9_1 | GPIO_MODER_MODE10_1;  // 配置PA9為TX,PA10為RX

   // 配置USART波特率、停止位等
   USART1->BRR = 0x683;  // 設(shè)置波特率為9600
   USART1->CR1 |= USART_CR1_UE | USART_CR1_TE | USART_CR1_RE;  // 使能USART、發(fā)送和接收功能
}

void USART_SendChar(char c) { while (!(USART1->SR & USART_SR_TXE));  // 等待數(shù)據(jù)寄存器空
   USART1->DR = (uint8_t)c;  // 發(fā)送字符
}

char USART_ReceiveChar(void) {
   while (!(USART1->SR & USART_SR_RXNE));  // 等待接收數(shù)據(jù)
   return (char)(USART1->DR & 0xFF);  // 接收字符并返回
}

4.2 串口接收并修改RTC喚醒時間

一旦串口通信配置完成,可以通過USART接收來自外部設(shè)備的命令,這些命令可以包括新的喚醒時間。當(dāng)系統(tǒng)接收到新的喚醒時間時,可以通過修改RTC的鬧鐘寄存器來改變喚醒時間。下面是一個接收并更新RTC喚醒時間的示例代碼:

#include "stm32l1xx.h"

void Update_RTC_AlarmTime(int hours, int minutes, int seconds) {
   // 計算新的鬧鐘時間
   uint32_t alarmTime = ((hours << 16) & 0x003F0000) | ((minutes << 8) & 0x00007F00)
   | (seconds & 0x0000007F);

   // 配置RTC鬧鐘時間
   RTC->ALRMAR = alarmTime;
   RTC->CRL |= RTC_CRL_ALRF;  // 使能鬧鐘中斷/喚醒
}

void USART_ReceiveAndUpdateAlarm(void) {
   char receivedChar;
   int hours = 0, minutes = 0, seconds = 0;

   // 等待接收小時、分鐘和秒的數(shù)據(jù)
   receivedChar = USART_ReceiveChar();
   hours = receivedChar - '0';  // 假設(shè)接收到的字符是'0'到'9'之間的數(shù)字
   receivedChar = USART_ReceiveChar();
   minutes = receivedChar - '0';
   receivedChar = USART_ReceiveChar();
   seconds = receivedChar - '0';

   // 更新RTC的鬧鐘時間
   Update_RTC_AlarmTime(hours, minutes, seconds);
}

在這個示例中,通過USART接收字符(假設(shè)每次接收一個數(shù)字表示小時、分鐘、秒),并將其解析為新的時間值。然后,利用這些值更新RTC模塊中的鬧鐘時間。實際使用時,可能需要根據(jù)協(xié)議設(shè)計更多的字符處理和錯誤檢測機制。

五、最小系統(tǒng)設(shè)計與代碼實現(xiàn)

5.1 最小系統(tǒng)設(shè)計

在基于STM32L151的最小系統(tǒng)設(shè)計中,除了主芯片之外,還需要一些基本的外設(shè),如電源電路、時鐘電路、調(diào)試接口等。最小系統(tǒng)的基本設(shè)計框圖如下:

  • STM32L151主控芯片:作為核心控制單元,負責(zé)執(zhí)行應(yīng)用程序、管理外設(shè)、控制功耗等。

  • 32.768 kHz外部晶振:提供RTC所需的精確時鐘源,確保時間的準(zhǔn)確性。

  • 電源管理:使用低功耗設(shè)計,包括待機模式、睡眠模式等,以延長電池壽命。

  • 串口接口(USART):用于外部設(shè)備與主控芯片之間的通信。

  • 調(diào)試接口(如SWD或JTAG):用于開發(fā)和調(diào)試。

5.2 最小系統(tǒng)電路圖

  • 電源:需要確保STM32L151在低功耗模式下能持續(xù)運行??梢允褂猛獠康蛪轰囯姵兀ㄈ?.7V)為系統(tǒng)供電。

  • 外部晶振:使用32.768 kHz的晶體振蕩器連接到主控芯片的LSE引腳(低速外部時鐘),以為RTC提供時鐘源。

  • USART連接:將USART1的TX和RX引腳分別連接到外部通信設(shè)備(如PC串口),用于接收和發(fā)送數(shù)據(jù)。

5.3 完整的代碼示例

結(jié)合上述部分代碼,以下是一個簡化版的完整系統(tǒng)代碼,實現(xiàn)了STM32L151的RTC自動喚醒、附加RTC日歷和通過串口修改喚醒時間的功能。

#include "stm32l1xx.h"

void RTC_Config(void) {
   // 配置電源和RTC時鐘源
   RCC->APB1ENR |= RCC_APB1ENR_PWREN;
   PWR->CR |= PWR_CR_DBP;  // 使能備份域電源
   RCC->CSR |= RCC_CSR_LSEON;  // 啟動LSE
   while (!(RCC->CSR & RCC_CSR_LSERDY));  // 等待LSE準(zhǔn)備好

   // 配置RTC
   RCC->APB1ENR |= RCC_APB1ENR_RTCEN;  // 使能RTC
   RTC->CRL &= ~RTC_CRL_RSF;  // 等待RTC同步
   RTC->CRL |= RTC_CRL_CNF;  // 進入配置模式
   RTC->PRER = 0x007F00FF;  // 設(shè)置RTC預(yù)分頻器
   RTC->CRL &= ~RTC_CRL_CNF;  // 退出配置模式

   // 配置日期和時間
   RTC->DR = 0x0023;  // 設(shè)置日期:星期一,日期為1號
   RTC->TR = 0x1230;  // 設(shè)置時間:12:30:00
}

void USART_Config(void) {
   // 使能USART外設(shè)
   RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
   RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
   GPIOA->MODER |= GPIO_MODER_MODE9_1 | GPIO_MODER_MODE10_1;  // 配置PA9為TX,PA10為RX

   // 配置USART波特率、停止位等
   USART1->BRR = 0x683;  // 設(shè)置波特率為9600
   USART1->CR1 |= USART_CR1_UE | USART_CR1_TE | USART_CR1_RE;  // 使能USART、發(fā)送和接收功能
}

void Update_RTC_AlarmTime(int hours, int minutes, int seconds) {
   uint32_t alarmTime = ((hours << 16) & 0x003F0000) | ((minutes << 8) & 0x00007F00)
    | (seconds & 0x0000007F);
   RTC->ALRMAR = alarmTime;
   RTC->CRL |= RTC_CRL_ALRF;  // 使能鬧鐘中斷/喚醒
}

int main(void) {
   // 配置RTC和USART
   RTC_Config();
   USART_Config();

   while (1) {
       // 通過USART接收新的喚醒時間并更新RTC
       USART_ReceiveAndUpdateAlarm();

       // 進入低功耗模式,等待RTC喚醒
       __WFI();  // 等待中斷或喚醒
   }
}

六、總結(jié)

本文詳細介紹了STM32L151的RTC模塊在自動喚醒和附加日歷功能中的應(yīng)用。通過配置STM32L151的RTC模塊、串口通信功能及低功耗模式,可以實現(xiàn)系統(tǒng)在低功耗下周期性喚醒,并根據(jù)外部輸入調(diào)整喚醒時間。此設(shè)計不僅能夠顯著降低系統(tǒng)的功耗,還能通過串口靈活調(diào)整喚醒時間,滿足不同應(yīng)用場景的需求。

責(zé)任編輯:David

【免責(zé)聲明】

1、本文內(nèi)容、數(shù)據(jù)、圖表等來源于網(wǎng)絡(luò)引用或其他公開資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對本文的引用持有異議,請聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時處理。

2、本文的引用僅供讀者交流學(xué)習(xí)使用,不涉及商業(yè)目的。

3、本文內(nèi)容僅代表作者觀點,拍明芯城不對內(nèi)容的準(zhǔn)確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨立判斷做出的,請讀者明確相關(guān)結(jié)果。

4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責(zé)任的權(quán)利。

拍明芯城擁有對此聲明的最終解釋權(quán)。

標(biāo)簽: RTC自動喚醒 STM32L151

相關(guān)資訊

拍明芯城微信图标

各大手机应用商城搜索“拍明芯城”

下载客户端,随时随地买卖元器件!

拍明芯城公众号
拍明芯城抖音
拍明芯城b站
拍明芯城头条
拍明芯城微博
拍明芯城视频号
拍明
广告
恒捷广告
广告
深亚广告
广告
原厂直供
广告
XX性欧美肥妇精品久久久久久,51精品国自产在线,国产欧美日韩,日韩中文字幕

          小嫩草张开腿让我爽了一夜| 精品一区二区三区不卡| 天天综合网天天综合色| 国产草草影院CCYYCOM| av天堂8| 成人免费看吃奶视频网站| 丰满人妻一区二区三区不卡二| 久精品色妇丰满人妻| 欧美精品一区二区在线观看视频| 激情五月婷婷丁香| 日本一区二区三区视频免费看| 久久婷婷综合国产精品| 国产美女自慰在线观看| 少妇久久久久| 中文字幕在线视频一区二区三区 | 偷拍区图片区小说区| av一级在线观看| 国产a∨精品一区二区三区不卡| 色欲AV人妻精品久久久久| 亚洲一区二区视频在线观看| 欧美日韩国产不卡一区| 日韩精品第一| 成人精品一区二区三区校园激情| 尹人大香蕉在线视频| 大肉大捧一进一出好爽视频| jizz在线视频| 久久精品99久久久久久久久| 一级片在线观看免费| 五月婷婷激情网| free中国少妇性满足hd| 国产一级av免费在线观看| 日韩免费精品一区二区三区| 亚洲乱码国产乱码精品天美传媒| 欧美日韩精品人妻| YY111111少妇无码理论片| 日本人jizz| 【天堂中文】人妻中文字幕| 99国产精品久久久久久久成人热| 中文字幕一区二区三区电影| 黑人大鷄巴XXX高湖| 亚洲色图综合一区二区|