国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32基礎(chǔ)10--實(shí)時(shí)時(shí)鐘(RTC)

這篇具有很好參考價(jià)值的文章主要介紹了STM32基礎(chǔ)10--實(shí)時(shí)時(shí)鐘(RTC)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?目錄

前言

RTC框圖

STM32實(shí)時(shí)時(shí)鐘電路

功能需要

STM32CubeMx配置RTC

配置RCC

配置RTC

配置時(shí)間,鬧鐘,喚醒

開啟中斷

設(shè)置中斷優(yōu)先級

功能代碼實(shí)現(xiàn)

STM32Cude生成RTC初始化

自定義觸發(fā)鬧鐘次數(shù)變量?

重寫周期喚醒回調(diào)函數(shù)

重寫鬧鐘中斷函數(shù)


前言

????????在做51單片機(jī)項(xiàng)目時(shí),如果需要年月日時(shí)分秒的時(shí)間記錄,會(huì)在51單片機(jī)上面外掛一個(gè)DS1302的時(shí)鐘芯片,再加上時(shí)間芯片的外圍電路。但在STM32F407中,不再需要這么干了,因?yàn)樵赟TM32的內(nèi)部就已經(jīng)集成了年月日時(shí)分秒的時(shí)鐘電路--也就是實(shí)時(shí)時(shí)鐘(RTC)

RTC框圖

????????下圖是RTC的框圖,箭頭部分是實(shí)時(shí)時(shí)鐘基本部分,包括時(shí)鐘源,預(yù)分頻,影子寄存器,引腳復(fù)用輸出。此外還有兩個(gè)鬧鐘,周期喚醒,入侵檢測以及時(shí)間戳。

STM32基礎(chǔ)10--實(shí)時(shí)時(shí)鐘(RTC)

STM32實(shí)時(shí)時(shí)鐘電路

? ? ? ? 在開發(fā)板上有低速外部時(shí)鐘源-32.768Khz。

STM32基礎(chǔ)10--實(shí)時(shí)時(shí)鐘(RTC)

功能需要

1)配置當(dāng)前時(shí)間

? ? ? ? 時(shí)間可以采取24小時(shí)格式,也可以采用12小時(shí)格式,默認(rèn)采用24小時(shí)格式。配置時(shí)間時(shí),還會(huì)設(shè)置日期格式,是采用BCD或者二進(jìn)制。建議采用二進(jìn)制即可,可以直接填入時(shí)間數(shù)值。

2)配置鬧鐘(每隔10s,觸發(fā)一次鬧鐘中斷)

3)設(shè)置周期喚醒(喚醒時(shí)間1s)并且可以輸出低電平。

STM32CubeMx配置RTC

配置RCC

? ? ? ? 由于RTC使用到外部時(shí)鐘源,因此需要在時(shí)鐘配置使用低速外部時(shí)鐘源。

STM32基礎(chǔ)10--實(shí)時(shí)時(shí)鐘(RTC)

STM32基礎(chǔ)10--實(shí)時(shí)時(shí)鐘(RTC)

配置RTC

STM32基礎(chǔ)10--實(shí)時(shí)時(shí)鐘(RTC)

配置時(shí)間,鬧鐘,喚醒

? ? ? ? 配置時(shí)間24小時(shí)格式,二進(jìn)制格式(22年5月2日,12時(shí)19分50秒);設(shè)置鬧鐘(由于每10s,鬧鐘觸發(fā)一次中斷,因此屏蔽掉時(shí)分,不屏蔽秒);設(shè)置周期時(shí)鐘,周期為1Hz,不需要計(jì)數(shù),也就是1s觸發(fā)一次;如果計(jì)數(shù)值為1,則為2s觸發(fā)一次中斷。

STM32基礎(chǔ)10--實(shí)時(shí)時(shí)鐘(RTC)

開啟中斷

STM32基礎(chǔ)10--實(shí)時(shí)時(shí)鐘(RTC)

設(shè)置中斷優(yōu)先級

STM32基礎(chǔ)10--實(shí)時(shí)時(shí)鐘(RTC)

功能代碼實(shí)現(xiàn)

STM32Cude生成RTC初始化

void MX_RTC_Init(void)
{

  /* USER CODE BEGIN RTC_Init 0 */

  /* USER CODE END RTC_Init 0 */

  RTC_TimeTypeDef sTime = {0};
  RTC_DateTypeDef sDate = {0};
  RTC_AlarmTypeDef sAlarm = {0};

  /* USER CODE BEGIN RTC_Init 1 */

  /* USER CODE END RTC_Init 1 */

  /** Initialize RTC Only
  */
  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 127;
  hrtc.Init.SynchPrediv = 255;
  hrtc.Init.OutPut = RTC_OUTPUT_WAKEUP;
  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  if (HAL_RTC_Init(&hrtc) != HAL_OK)
  {
    Error_Handler();
  }

  /* USER CODE BEGIN Check_RTC_BKUP */

  /* USER CODE END Check_RTC_BKUP */

  /** Initialize RTC and set the Time and Date
  */
  sTime.Hours = 12;
  sTime.Minutes = 19;
  sTime.Seconds = 50;
  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
  {
    Error_Handler();
  }
  sDate.WeekDay = RTC_WEEKDAY_MONDAY;
  sDate.Month = RTC_MONTH_MAY;
  sDate.Date = 2;
  sDate.Year = 22;

  if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
  {
    Error_Handler();
  }

  /** Enable the Alarm A
  */
  sAlarm.AlarmTime.Hours = 0;
  sAlarm.AlarmTime.Minutes = 0;
  sAlarm.AlarmTime.Seconds = 10;
  sAlarm.AlarmTime.SubSeconds = 0;
  sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
  sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY|RTC_ALARMMASK_HOURS
                              |RTC_ALARMMASK_MINUTES;
  sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
  sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
  sAlarm.AlarmDateWeekDay = 1;
  sAlarm.Alarm = RTC_ALARM_A;
  if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN) != HAL_OK)
  {
    Error_Handler();
  }

  /** Enable the WakeUp
  */
  if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0, RTC_WAKEUPCLOCK_CK_SPRE_16BITS) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN RTC_Init 2 */

  /* USER CODE END RTC_Init 2 */

}

自定義觸發(fā)鬧鐘次數(shù)變量?

?STM32基礎(chǔ)10--實(shí)時(shí)時(shí)鐘(RTC)

重寫周期喚醒回調(diào)函數(shù)

? ? ? ? 注:

????????1)一定要要先讀Time然后再度Date,否者會(huì)出錯(cuò);

? ? ? ? 2)即使不需要Date數(shù)據(jù),也要讀Date否則也會(huì)出錯(cuò)。?文章來源地址http://www.zghlxwxcb.cn/news/detail-410700.html

void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)
{
   RTC_TimeTypeDef sTime ={0};
   RTC_DateTypeDef sDate={0};
    
    char str[40] ={0};
    
    
    //1)一定要要先讀Time然后再度Date,否者會(huì)出做;即使不需要Date數(shù)據(jù),也要度Date否則也會(huì)出錯(cuò)
    if((HAL_RTC_GetTime(hrtc,&sTime,RTC_FORMAT_BIN)!=HAL_OK)|| (HAL_RTC_GetDate(hrtc,&sDate,RTC_FORMAT_BIN)!=HAL_OK))
    {
           return;
    }
   
    sprintf(str,"RTC Time = %4d年%2d月%2d日 \r\n",2000+sDate.Year,sDate.Month,sDate.Date);
    HAL_UART_Transmit(&huart1,(const uint8_t *)str,strlen(str),100);
    
    sprintf(str,"RTC Time = %2d時(shí)%2d分%2d秒 \r\n",sTime.Hours,sTime.Minutes,sTime.Seconds);
    HAL_UART_Transmit(&huart1,(const uint8_t *)str,strlen(str),100);
  
    
    
}

重寫鬧鐘中斷函數(shù)

void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
    char str[40] ={0};
    sprintf(str,"鬧鐘觸發(fā)次數(shù): %d \r\n",++alarmTrigger);
    HAL_UART_Transmit(&huart1,(const uint8_t *)str,strlen((const char *)str),100);


}

到了這里,關(guān)于STM32基礎(chǔ)10--實(shí)時(shí)時(shí)鐘(RTC)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32——RTC實(shí)時(shí)時(shí)鐘

    STM32——RTC實(shí)時(shí)時(shí)鐘

    Unix 時(shí)間戳(Unix Timestamp)定義為從UTC/GMT的1970年1月1日0時(shí)0分0秒開始所經(jīng)過的秒數(shù),不考慮閏秒 時(shí)間戳存儲(chǔ)在一個(gè)秒計(jì)數(shù)器中,秒計(jì)數(shù)器為32位/64位的整型變量 世界上所有時(shí)區(qū)的秒計(jì)數(shù)器相同,不同時(shí)區(qū)通過添加偏移來得到當(dāng)?shù)貢r(shí)間 底層使用秒計(jì)數(shù)器可以節(jié)省硬件設(shè)計(jì)電路,

    2024年01月23日
    瀏覽(24)
  • 【STM32學(xué)習(xí)】實(shí)時(shí)時(shí)鐘 —— RTC

    【STM32學(xué)習(xí)】實(shí)時(shí)時(shí)鐘 —— RTC

    STM32RTC實(shí)時(shí)時(shí)鐘實(shí)驗(yàn)講解,從入門到放棄 【STM32】RTC休眠喚醒(停機(jī)模式)、獨(dú)立看門狗開啟狀態(tài)下 關(guān)于STM32使用RTC喚醒停止模式的設(shè)置 RTC(Real Time Clock):實(shí)時(shí)時(shí)鐘,是指可以像時(shí)鐘一樣輸出實(shí)際時(shí)間的電子設(shè)備,一般會(huì)是集成電路,因此也稱為時(shí)鐘芯片??傊?,RTC只是個(gè)能靠電

    2024年02月01日
    瀏覽(22)
  • STM32-實(shí)時(shí)時(shí)鐘RTC-2

    STM32-實(shí)時(shí)時(shí)鐘RTC-2

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

    2024年01月20日
    瀏覽(26)
  • STM32-RTC實(shí)時(shí)時(shí)鐘詳解

    STM32-RTC實(shí)時(shí)時(shí)鐘詳解

    RTC的本質(zhì)很簡單,就是一個(gè)時(shí)鐘經(jīng)過精確分頻最后得到的一個(gè)1Hz的時(shí)鐘,也可以說是計(jì)數(shù)器,其他大部分功能都是基于這個(gè)計(jì)數(shù)器設(shè)計(jì)的數(shù)字邏輯。 本文講的RTC是基于STM32F030來講的,相比與F1系列的RTC來說,M0的將很多原本需要軟件實(shí)現(xiàn)的功能硬件化了,使用起來更加便利。

    2024年02月04日
    瀏覽(37)
  • STM32學(xué)習(xí)筆記(十二)丨RTC實(shí)時(shí)時(shí)鐘

    STM32學(xué)習(xí)筆記(十二)丨RTC實(shí)時(shí)時(shí)鐘

    ???本次課程采用單片機(jī)型號為STM32F103C8T6。 ???課程鏈接:江協(xié)科技 STM32入門教程 ??往期筆記鏈接: ??STM32學(xué)習(xí)筆記(一)丨建立工程丨GPIO 通用輸入輸出 ??STM32學(xué)習(xí)筆記(二)丨STM32程序調(diào)試丨OLED的使用 ??STM32學(xué)習(xí)筆記(三)丨中斷系統(tǒng)丨EXTI外部中斷 ??

    2024年02月16日
    瀏覽(23)
  • STM32中的RTC實(shí)時(shí)時(shí)鐘和配套鬧鐘設(shè)置

    主要初始化函數(shù),以及設(shè)置鬧鐘函數(shù),鬧鐘中斷函數(shù) RTC.c RTC.h main.c

    2024年04月23日
    瀏覽(25)
  • stm32-OLED屏+RTC實(shí)現(xiàn)簡易實(shí)時(shí)時(shí)鐘(下篇)

    stm32-OLED屏+RTC實(shí)現(xiàn)簡易實(shí)時(shí)時(shí)鐘(下篇)

    一、RTC簡介 實(shí)時(shí)時(shí)鐘是一個(gè)獨(dú)立的定時(shí)器。RTC模塊擁有一組連續(xù)計(jì)數(shù)的計(jì)數(shù)器,在相應(yīng)軟件配置下,可 提供時(shí)鐘日歷的功能。修改計(jì)數(shù)器的值可以重新設(shè)置系統(tǒng)當(dāng)前的時(shí)間和日期。 RTC模塊和時(shí)鐘配置系統(tǒng)(RCC_BDCR寄存器)處于后備區(qū)域,即在系統(tǒng)復(fù)位或從待機(jī)模式喚醒 后,R

    2024年01月18日
    瀏覽(24)
  • stm32-OLED屏+RTC實(shí)現(xiàn)簡易實(shí)時(shí)時(shí)鐘(上篇)

    stm32-OLED屏+RTC實(shí)現(xiàn)簡易實(shí)時(shí)時(shí)鐘(上篇)

    oled屏選擇ssd1306,使用RTC實(shí)現(xiàn)簡易實(shí)時(shí)時(shí)鐘 1、MCU接口選擇 SSD1306單片機(jī)接口由8個(gè)數(shù)據(jù)引腳和5個(gè)控制引腳組成。通過BS[2:0]引腳上的硬件選擇可以設(shè)置不同的MCU模式 ? ?通過控制BS[2:0]引腳可以設(shè)置MCU與OLED屏的通信方式。因?yàn)槲沂褂玫氖钦c(diǎn)原子的開發(fā)板,所以我用了適配的接

    2024年01月17日
    瀏覽(20)
  • 【STM32】讀寫B(tài)KP備份寄存器&RTC實(shí)時(shí)時(shí)鐘

    【STM32】讀寫B(tài)KP備份寄存器&RTC實(shí)時(shí)時(shí)鐘

    目錄 BKP BKP簡介 BKP基本結(jié)構(gòu) BKP測試代碼 RTC RTC簡介 RTC框圖 RTC基本結(jié)構(gòu) 硬件電路 RTC操作注意事項(xiàng) 接線圖 初始化 使用BKP解決只初始化一次時(shí)間 ?初始化參考代碼 RTC設(shè)置時(shí)間 RTC讀取時(shí)間 完整代碼 MyRTC.c MyRTC.h main.c BKP(Backup Registers)備份寄存器 BKP可用于存儲(chǔ)用戶應(yīng)用程序數(shù)據(jù)

    2024年04月22日
    瀏覽(41)
  • STM32實(shí)時(shí)時(shí)鐘(RTC)的配置和使用方法詳解

    STM32實(shí)時(shí)時(shí)鐘(RTC)的配置和使用方法詳解

    實(shí)時(shí)時(shí)鐘(RTC)是STM32系列微控制器上的一個(gè)重要模塊,用于提供準(zhǔn)確的時(shí)間和日期信息。在本文中,我們將詳細(xì)介紹STM32實(shí)時(shí)時(shí)鐘的配置和使用方法。 ?作者簡介:熱愛科研的嵌入式開發(fā)者,修心和技術(shù)同步精進(jìn) ?歡迎關(guān)注我的知乎:對error視而不見 代碼獲取、問題探討及

    2024年02月21日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包