色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

GD32開發實戰指南(基礎篇) 第16章 RTC

嵌入式大雜燴 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-05-18 22:14 ? 次閱讀

開發環境:

MDK:Keil 5.30

開發板:GD32F207I-EVAL

MCU:GD32F207IK

1 RTC工作原理

1.1 RTC簡介

GD32 的 RTC 外設,實質是一個掉電后還繼續運行的定時器。從定時器的角度來說,相對于通用定時器 TIMER 外設,它十分簡單,只有很純粹的計時功能(當然,可以觸發中斷);但從掉電還繼續運行的角度來說,它卻是 GD32中唯一一個具有如此強大功能的外設。所以 RTC 外設的復雜之處并不在于它的定時功能,而在于它掉電還繼續運行的特性。

以上所說的掉電, 是指主電源 VDD斷開的情況,為了 RTC 外設掉電繼續運行,必須給GD32芯片通過 VBAT引腳接上鋰電池 。當主電源 VDD有效時,由 VDD給 RTC 外設供電。當 VDD掉電后,由 VBAT給 RTC 外設供電。但無論由什么電源供電,RTC 中的數據都保存在屬于 RTC 的備份域中, 若主電源 VDD和 VBAT都掉電,那么備份域中保存的所有數據將丟失 。備份域除了 RTC 模塊的寄存器,還有 42 個 16 位的寄存器可以在 VDD掉電的情況下保存用戶程序的數據,系統復位或電源復位時,這些數據也不會被復位。

從 RTC 的定時器特性來說, 它是一個 32 位的計數器,只能向上計數 。它使用的時鐘源有三種,分別為高速外部時鐘的 128 分頻:HXTAL/128;低速內部時鐘IRC40K;使 HXTAL分頻時鐘或IRC40K的話,在主電源 VDD掉電的情況下,這兩個時鐘來源都會受到影響,因此沒法保證 RTC 正常工作。因此 RTC 一般使用低速外部時鐘LXTAL,頻率為實時時鐘模塊中常用的 32.768KHz,這是因為 32768 = 215,分頻容易實現,所以它被廣泛應用到 RTC 模塊。在主電源 VDD有效的情況下(待機),RTC 還可以配置鬧鐘事件使 GD32退出待機模式。

RTC模塊在相應軟件配置下,可提供時鐘日歷的功能。修改計數器的值可以重新設置系統當前的時間和日期。RTC模塊和時鐘配置系統處于后備區域,即在系統復位或從待機模式喚醒后,RTC的設置和時間維持不變。

1.2主要特性

  • 編程的預分頻系數:分頻系數最高為2^20
  • 32位的可編程計數器,可用于較長時間段的測量。
  • 2個分離的時鐘:用于APB1接口的PCLK1和RTC時鐘(RTC時鐘的頻率必須小于PCLK1時鐘頻率的四分之一以上)。
  • 可以選擇以下三種RTC的時鐘源:

A) HXTAL 時鐘除以 128

B) LXTAL 振蕩電路時鐘

C) IRC40K 振蕩電路時鐘

  • 2個獨立的復位類型:

A) APB1接口由系統復位;

B) RTC核心(預分頻器、鬧鐘、計數器和分頻只能由后備域復位

  • 3個專門的可屏蔽中斷:

A) 鬧鐘中斷,用來產生一個軟件可編程的鬧鐘中斷。

B) 秒中斷,用來產生一個可編程的周期性中斷信號 (最長可達1秒)。

C) 溢出中斷,指示內部可編程計數器溢出并回轉為的狀態。

1.3 RTC架構

RTC的架構如下圖所示。

1684418636974719k5ryolu

RTC 由兩個主要部分組成, 第一部分(APB1 接口)用來和 APB1 總線相連。此單元還包含一組 16 位寄存器,可通過 APB1 總線對其進行讀寫操作。 APB1 接口由 APB1 總線時鐘驅動,用來與 APB1 總線連接。

另一部分(RTC 核心)由一組可編程計數器組成,RTC內核包含兩個主要模塊。一個是RTC預分頻模塊,用來產生RTC時間基準時鐘SC_CLK。RTC預分頻模塊包含一個20位可編程分頻器(RTC預分頻器) ,該分頻器可以通過對RTC時鐘源分頻產生SC_CLK。如果對RTC_INTEN寄存器中的秒中斷標志位被使能, RTC會在每個SC_CLK上升沿產生一個秒中斷。 另外一個模塊是一個32 位可編程計數器,其數值可以被初始化為當前系統時間。如果對RTC_INTEN 寄存器的鬧鐘中斷標志位被使能, RTC會在系統時間等于鬧鐘時間(存儲于RTC_ALRMH/L 寄存器)時產生一個鬧鐘中斷。

2 RTC寄存器分析

2.1 RTC寄存器描述

RTC 總共有 2 個控制寄存器RTC_INTEN和 RTC_CTL。

RTC_INTEN寄存器用來控制中斷的,我們本章將要用到秒鐘中斷,所以在該寄存器必須設置最低位為 1,以允許秒鐘中斷。

1684418637451werpj2as2y

RTC_CTL的第 0 位是秒鐘標志位,我們在進入鬧鐘中斷的時候,通過判斷這位來決定是不是發生了秒鐘中斷。然后必須通過軟件將該位清零(寫0)。第 3 位為寄存器同步標志位,我們在修改控制寄存器之前,必須先判斷該位,是否已經同步了,如果沒有則等待同步,在沒同步的情況下修改RTC_INTEN/RTC_CTL的值是不行的。第4位為配置標位,在軟件修改 RTC_CNTx/RTC_ALRMx/RTC_PSCx的值的時候,必須先軟件置位該位,以允許進入配置模式。第 5 位為 RTC 操作位,該位由硬件操作,軟件只讀。通過該位可以判斷上次對 RTC 寄存器的操作是否完成,如果沒有,我們必須等待上一次操作結束才能開始下一次操作。

1684418637779s9lm26192n

【注意】

  • 任何標志位都將保持掛起狀態,直到適當的RTC_CTL請求位被軟件復位,表示所請求的中斷已經被接受。
  • 在復位時禁止所有中斷,無掛起的中斷請求,可以對RTC寄存器進行寫操作。
  • 當APB1時鐘不運行時,SCIF、ALRMIF、OVIF和RSYNF位不被更新。
  • SCIF、ALRMIF、OVIF和RSYNF位只能由硬件置位,由軟件來清零。
  • 若ALRMIF =1且ALRMIE =1,則允許產生RTC全局中斷。如果在EXTI控制器中允許產生EXTI線 17中斷,則允許產生RTC全局中斷和RTC鬧鐘中斷。
  • 若ALRMIF =1,如果在EXTI控制器中設置了EXTI線 17的中斷模式,則允許產生RTC鬧鐘中斷;如果在EXTI控制器中設置了EXTI線 17的事件模式,則這條線上會產生一個脈沖(不會產生RTC鬧鐘中斷)。

RTC 預分頻裝載寄存器,也有 2 個寄存器組成,RTC_PSCH和RTC_PSCL。這兩個寄存器用來配置 RTC 時鐘的分頻數的,比如我們使用外部 32.768K 的晶振作為時鐘的輸入頻率,那么我們要設置這兩個寄存器的值為 32767,以得到一秒鐘的計數頻率。RTC_PSCH的各位描述如下圖所示。

1684418638063v2mz9i4yke

從上圖可以看出,RTC_PSCH只有低四位有效,用來存儲PSC的 19~16 位。而PSC的前 16 位,存放在RTC_PSCL里面,寄存器RTC_PSCL的各位描述如下圖所示。

16844186384035m4fqoh48o

【注】如果輸入時鐘頻率是32.768kHz(RTCCLK),這個寄存器中寫入7FFFh可獲得周期為1秒鐘的信號。

RTC 預分頻器寄存器也有 2 個寄存器組成 RTC_DIVH 和 RTC_DIVL,這兩個寄存器的作用就是用來獲得比秒鐘更為準確的時鐘,比如可以得到 0.1 秒,或者 0.01 秒等。該寄存器的值自減的,用于保存還需要多少時鐘周期獲得一個秒信號。在一次秒鐘更新后,由硬件重新裝載。這兩個寄存器和 RTC 預分頻裝載寄存器的各位是一樣的,這里我們就不列出來了。

接著要介紹的是 RTC 最重要的寄存器, RTC 計數器寄存器 RTC_CNT。該寄存器由 2 個 16位的寄存器組成 RTC_CNTH 和 RTC_CNTL,總共 32 位,用來記錄秒鐘值(一般情況下)。此兩個計數器也比較簡單,我們也不多說了。注意一點,在修改這個寄存器的時候要先進入配置模式。

最后我們介紹 RTC 部分的最后一個寄存器, RTC 鬧鐘寄存器,該寄存器也是由 2 個 16 為的寄存器組成 RTC_ALRH 和 RTC_ALRL。總共也是 32 位,用來標記鬧鐘產生的時間(以秒為單位),如果 RTC_CNT 的值與 RTC_ALR 的值相等,并使能了中斷的話,會產生一個鬧鐘中斷。該寄存器的修改也要進入配置模式才能進行。

因為我們使用到備份寄存器來存儲 RTC 的相關信息(我們這里主要用來標記時鐘是否已經經過了配置)。

2.2 讀RTC寄存器

RTC完全獨立于RTC APB1接口。

軟件通過APB1接口訪問RTC的預分頻值、計數器值和鬧鐘值。但是,相關的可讀寄存器只在與RTC APB1時鐘進行重新同步的RTC時鐘的上升沿被更新。RTC標志也是如此的。

這意味著,如果APB1接口曾經被關閉,而讀操作又是在剛剛重新開啟APB1之后,則在第一次的內部寄存器更新之前,從APB1上讀出的RTC寄存器數值可能被破壞了(通常讀到0) 。下述幾種情況下能夠發生這種情形:

  • 發生系統復位或電源復位
  • 系統剛從待機模式喚醒
  • 系統剛從停機模式喚醒

所有以上情況中,APB1接口被禁止時(復位、無時鐘或斷電)RTC核仍保持運行狀態。

因此,若在讀取RTC寄存器時,RTC 的APB1 接口曾經處于禁止狀態,則軟件首先必須等待RTC_CTL寄存器中的RSYNF位(寄存器同步標志)被硬件置’1’。

2.3 配置RTC寄存器

必須設置RTC_CTL寄存器中的CMF位,使 RTC進入配置模式后,才能寫入 RTC_PSC、RTC_CNT、RTC_ALRM寄存器。

另外,對RTC任何寄存器的寫操作,都必須在前一次寫操作結束后進行。可以通過查詢RTC_CTL寄存器中的LWOFF狀態位,判斷RTC寄存器是否處于更新中。僅當LWOFF狀態位是’1’時,才可以寫入RTC寄存器。

配置過程:

1.查詢LWOFF位,直到LWOFF的值變為’1’

2.置CMF值為1,進入配置模式

3.對一個或多個RTC寄存器進行寫操作

4.清除CMF標志位,退出配置模式

5.查詢LWOFF,直至LWOFF位變為’1’ 以確認寫操作已經完成。

6.僅當CMF標志位被清除時,寫操作才能進行,這個過程至少需要3個RTCCLK周期。

3 RTC具體代碼實現

RTC 正常工作的一般配置步驟如下:

1)使能電源時鐘和備份區域時鐘。

前面已經介紹了,我們要訪問 RTC 和備份區域就必須先使能電源時鐘和備份區域時鐘。

rcu_periph_clock_enable(RCU_BKPI);
rcu_periph_clock_enable(RCU_PMU);

2)取消備份區寫保護。

要向備份區域寫入數據,就要先取消備份區域寫保護(寫保護在每次硬復位之后被使能),否則是無法向備份區域寫入數據的。我們需要用到向備份區域寫入一個字節,來標記時鐘已經配置過了,這樣避免每次復位之后重新配置時鐘。 取消備份區域寫保護的庫函數實現方法是:

pmu_backup_write_enable(); //使能 RTC 和后備寄存器訪問

3)復位備份區域,開啟外部低速振蕩器

在取消備份區域寫保護之后,我們可以先對這個區域復位,以清除前面的設置,當然這個操作不要每次都執行,因為備份區域的復位將導致之前存在的數據丟失,所以要不要復位,要看情況而定。然后我們使能外部低速振蕩器,注意這里一般要先判斷 RCC_BDCR 的 LSERDY位來確定低速振蕩器已經就緒了才開始下面的操作。

備份區域復位的函數是:


開啟外部低速振蕩器的函數是:

rcu_osci_on(RCU_LXTAL);// 開啟外部低速振蕩器

4)選擇 RTC 時鐘,并使能。

庫函數中,選擇 RTC 時鐘的函數是:

rcu_rtc_clock_config(RCU_RTCSRC_LXTAL); //選擇LXTAL作為 RTC 時鐘

對于 RTC 時鐘的選擇使能 RTC 時鐘的函數是:

rcu_periph_clock_enable(RCU_RTC); //使能 RTC 時鐘

5)設置 RTC 的分頻,以及配置 RTC 時鐘。

在開啟了 RTC 時鐘之后,我們要做的就是設置 RTC 時鐘的分頻數,通過 RTC_PSCH 和RTC_PSCL 來設置,然后等待 RTC 寄存器操作完成,并同步之后,設置秒鐘中斷。然后設置RTC 的允許配置位( RTC_CTL的 CMF 位),設置時間(其實就是設置 RTC_CNTH 和 RTC_CNTL兩個寄存器)。

下面我們一一這些步驟用到的庫函數:

在進行 RTC 配置之前首先要打開允許配置位(CMF),庫函數是:

rtc_configuration_mode_enter ();/// 允許配置

在配置完成之后,千萬別忘記更新配置同時退出配置模式,函數是:

rtc_configuration_mode_exit ();//退出配置模式,更新配置

設置 RTC 時鐘分頻數, 庫函數是:

void rtc_prescaler_set(uint32_t psc)

這個函數只有一個入口參數,就是 RTC 時鐘的分頻數,很好理解。

然后是設置秒中斷允許,RTC 使能中斷的函數是:

void rtc_interrupt_enable(uint32_t interrupt)

這個函數的第一個參數是設置秒中斷類型,這些通過宏定義定義的。 對于使能秒中斷方法是:

rtc_interrupt_enable(RTC_INT_SECOND); //使能 RTC 秒中斷

下一步便是設置時間了,設置時間實際上就是設置 RTC 的計數值,時間與計數值之間是需要換算的,當然也可先不設置。庫函數中設置 RTC 計數值的方法是:

void rtc_counter_set(uint32_t cnt)

通過這個函數直接設置 RTC 計數值。

6)更新配置,設置 RTC 中斷分組。

在設置完時鐘之后,我們將配置更新同時退出配置模式,這里還是通過 RTC_CTL的CMF來實現。庫函數的方法是:

rtc_configuration_mode_exit ();//退出配置模式,更新配置

在退出配置模式更新配置之后我們在備份區域 BKP_DATA0中寫入 0xA5A5代表我們已經初始化過時鐘了,下次開機(或復位)的時候,先讀取 BKP_DATA0的值,然后判斷是否是 0xA5A5來決定是不是要配置。接著我們配置 RTC 的秒鐘中斷,并進行分組。

往備份區域寫用戶數據的函數是:

void bkp_data_write(bkp_data_register_enum register_number, uint16_t data)

這個函數的第一個參數就是寄存器的標號了,這個是通過宏定義定義的。 比如我們要往BKP_DATA0 寫入 0xA5A5,方法是:

bkp_data_write(BKP_DATA_0, 0xA5A5);

同時,有寫便有讀,讀取備份區域指定寄存器的用戶數據的函數是:

uint16_t bkp_data_read(bkp_data_register_enum register_number)

這個函數就很好理解了,這里不做過多講解。

設置中斷分組的方法之前已經詳細講解過,這里不做重復講解。

7)編寫中斷服務函數。

最后,我們要編寫中斷服務函數,在秒鐘中斷產生的時候,讀取當前的時間值。

/**
  * @brief  This function handles RTC exception.
  * @param  None
  * @retval None
  */
void RTC_IRQHandler(void)
{
   if(rtc_flag_get(RTC_FLAG_SECOND)!=RESET)//讀取中斷標志
   {
        rtc_flag_clear(RTC_FLAG_SECOND);//清楚中斷標志
        tim_bz=1;//秒中斷標志
   }
}

完成的配如下:

/**
  * @brief  RTC配置
  * @param  None
  * @retval None
  */
void rtc_configuration(void)
{
    /* enable PMU and BKPI clocks 使能電源時鐘和備份區域時鐘*/
    rcu_periph_clock_enable(RCU_BKPI);
    rcu_periph_clock_enable(RCU_PMU);

    /* allow access to BKP domain 允許訪問BKP區域*/
    pmu_backup_write_enable();

    //復位備份區域,開啟外部低速振蕩器
    /* reset backup domain */
    bkp_deinit();

    /* enable LXTAL 使能外部低速晶振 32.768K */
    rcu_osci_on(RCU_LXTAL);
    /* wait till LXTAL is ready */
    rcu_osci_stab_wait(RCU_LXTAL);

    //選擇 RTC 時鐘,并使能
    /* select RCU_LXTAL as RTC clock source */
    rcu_rtc_clock_config(RCU_RTCSRC_LXTAL);

    /* enable RTC Clock 使能RTC時鐘	 */
    rcu_periph_clock_enable(RCU_RTC);

    rtc_configuration_mode_enter();

    /* wait for RTC registers synchronization */
    rtc_register_sync_wait();

    /* wait until last write operation on RTC registers has finished 等待寫RTC寄存器完成*/
    rtc_lwoff_wait();

    /* enable the RTC second interrupt 使能RTC秒中斷*/
    rtc_interrupt_enable(RTC_INT_SECOND);

    /* wait until last write operation on RTC registers has finished 等待寫RTC寄存器完成*/
    rtc_lwoff_wait();

    /* set RTC prescaler: set RTC period to 1s 設置預分頻*/
    rtc_prescaler_set(32767);

    /* wait until last write operation on RTC registers has finished 等待寫RTC寄存器完成*/
    rtc_lwoff_wait();

    nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);
    nvic_irq_enable(RTC_IRQn, 1, 0);
}

/**
  * @brief  RTC時鐘初始化
  * @param  None
  * @retval None
  */
void clock_init(void)
{
    if(0xA5A5 != bkp_data_read(BKP_DATA_0))
    {
        //第一次運行  初始化設置
        rtc_configuration();//RTC初始化
        /* wait until last write operation on RTC registers has finished */
        rtc_lwoff_wait();
        /* change the current time */
        rtc_counter_set(0);
        /* wait until last write operation on RTC registers has finished */
        rtc_lwoff_wait();
        rtc_lwoff_wait();//等待寫RTC寄存器完成	  
        rtc_lwoff_wait();//等待寫RTC寄存器完成
        bkp_data_write(BKP_DATA_0, 0xA5A5);//寫配置標志
    }
    else
    {
        /* check if the power on reset flag is set */
        if(rcu_flag_get(RCU_FLAG_PORRST) != RESET)
        {
            printf("\\r\\n\\n Power On Reset occurred....");
        }
        else if(rcu_flag_get(RCU_FLAG_SWRST) != RESET)
        {
            /* check if the pin reset flag is set */
            printf("\\r\\n\\n External Reset occurred....");
        }
        printf("\\r\\n No need to configure RTC....");
        rtc_register_sync_wait();//等待RTC寄存器同步
        rtc_interrupt_enable(RTC_INT_SECOND);//使能RTC秒中斷
        rtc_lwoff_wait();//等待寫RTC寄存器完成
    }
    rtc_configuration_mode_exit();//退出配置模式, 更新配置
    rcu_all_reset_flag_clear();//清除復位標志;
}

主函數代碼如下:

/*
    brief      main function
    param[in]  none
    param[out] none
    retval     none
*/
int main(void)
{
    uint32_t TimeData=0,hh=0,mm=0,ss=0;

    //usart init 115200 8-N-1
    com_init(COM1, 115200, 0, 1);

    rtc_configuration();
    clock_init();

    while(1)
    {
        if(tim_bz==1)
        {
            tim_bz=0;
            TimeData=rtc_counter_get();
            hh=	TimeData/3600;
            mm = (TimeData%3600)/60;
            ss = TimeData%60;
            printf("Time: %0.2d:%0.2d:%0.2d\\r\\n",hh,mm,ss);  
        }
    }
}

4 實驗現象

打開串口助手,打印信息如下:

1684418638740f10vcepb8y

這里沒有設置初始時間,時分秒是從0開始的。

審核編輯 黃宇

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

    關注

    2

    文章

    538

    瀏覽量

    66461
  • Cortex-M
    +關注

    關注

    2

    文章

    229

    瀏覽量

    29752
  • GD32
    +關注

    關注

    7

    文章

    403

    瀏覽量

    24328
收藏 人收藏

    評論

    相關推薦

    GD32開發實戰指南(基礎) 1 開發環境搭建

    開發環境: MDK:Keil 5.30 開發板:GD32F207I-EVAL MCU:GD32F207IK 1 GD32F207I-EVAL
    的頭像 發表于 05-07 23:35 ?1.1w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>1<b class='flag-5'>章</b> <b class='flag-5'>開發</b>環境搭建

    GD32開發實戰指南(基礎) 4 GD32啟動流程詳解(Keil版)

    ,所有的一切都需要由開發者來設置,這里處理器是沒有堆棧,沒有中斷,更沒有外圍設備,這些工作是需要軟件來指定的,而且不同的CPU類型、不同大小的內存和不同種類的外設,其初始化工作都是不同的。本文將以GD32F207IK (基于Cortex-M3)為例進行講解。
    的頭像 發表于 05-10 09:00 ?1.7w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>4<b class='flag-5'>章</b> <b class='flag-5'>GD32</b>啟動流程詳解(Keil版)

    GD32開發實戰指南(基礎) 7 定時器

    系統滴答定時器一般用來提供“心跳”作用,而GD32定時器最基本功能也是定時,可以設置不同時間長度的定時。定時器除了最基本的定時功能外,定時器與GPIO有掛鉤使得它可以發揮強大的作用,比如可以輸出
    的頭像 發表于 05-11 09:00 ?1.2w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>7<b class='flag-5'>章</b> 定時器

    GD32開發實戰指南(基礎) 8 定時器

    開發環境: MDK:Keil 5.30 開發板:GD32F207I-EVAL MCU:GD32F207IK 1 PWM輸出的工作原理 脈沖寬度調制(PWM) ,是英文“Pulse Wi
    的頭像 發表于 05-12 22:14 ?7927次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>8<b class='flag-5'>章</b> 定時器

    GD32開發實戰指南(基礎) 11 CPU的高級代理-DMA

    或者存儲器和存儲器之間的高速數據傳輸,因而被廣泛地使用。早在 8086 的應用中就已經有 Intel 的 8237 這種典型的 DMA 控制器,而 GD32的 DMA 則是以類似外設的形式添加到 Cortex 內核之外的。可以說,DMA就是CPU的高級代理,DMA大大減輕了CPU的負擔。
    的頭像 發表于 05-16 08:59 ?3864次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>11<b class='flag-5'>章</b> CPU的高級代理-DMA

    GD32開發實戰指南(基礎) 12 ADC

    GD32F2系列有 3 個逐次逼近型的ADC,精度為 12 位,有18個多路復用通道,可以轉換來自16個外部通道和2個內部通道的模擬信號。其中ADC0 和 ADC1都有 16 個外部通道, ADC2
    的頭像 發表于 05-16 09:03 ?1.1w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>12<b class='flag-5'>章</b> ADC

    GD32開發實戰指南(基礎) 14 內部溫度傳感器

    GD32 有一個內部的溫度傳感器,可以用來測量 CPU 及周圍的溫度(TA)。該溫度傳感器在內部和 ADCx_IN16 輸入通道相連接,此通道把傳感器輸出的電壓轉換成數字值。溫度傳感器模擬輸入
    的頭像 發表于 05-17 08:58 ?5340次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>14<b class='flag-5'>章</b> 內部溫度傳感器

    GD32開發實戰指南(基礎) 15 低功耗

    GD32的工作電壓(VDD)為2.0~3.6V。通過內置的電壓調節器提供所需的1.8V電源。當主電源VDD掉電后,通過VBAT腳為實時時鐘(RTC)和備份寄存器提供電源。
    的頭像 發表于 05-17 08:59 ?8049次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>15<b class='flag-5'>章</b> 低功耗

    GD32開發實戰指南(基礎) 17 看門狗

    開發環境: MDK:Keil 5.30 開發板:GD32F207I-EVAL MCU:GD32F207IK GD32 有兩個看門狗, 一個是
    的頭像 發表于 06-03 16:00 ?1.1w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>17<b class='flag-5'>章</b> 看門狗

    【圖書分享】《STM32庫開發實戰指南

    16 CAN控制器第三部分 庫開發高級 17 SDIO之SD卡驅動 
    發表于 03-13 17:01

    什么是GD32

    一、前言什么GD32GD32是國內開發的一款單片機,據說開發的人員是來自ST公司的,GD32也是以STM32作為模板做出來的。所以
    發表于 08-12 07:46

    GD32 MCU原理及固件庫開發指南》 + 初讀感悟

    GD32 MCU原理固件庫開發指南這本書內容豐富,囊括了GD32中的所有外設,書中首先介紹了如何使用MDK或IAR軟件搭建GD32工程環境,讓初學者能快速基于工程上手編程。書中主要對
    發表于 03-31 22:11

    GD32 MCU原理及固件庫開發指南》+讀后感

    2介紹GD32 MCU快速入門與開發平臺搭建的方法,包括對軟硬件開發平臺、調試工具、GD32
    發表于 06-06 21:52

    GD32開發實戰指南(基礎) 19 程序加密

    GD32通過讀取芯片唯一ID號來實現程序的保護,防止被抄襲。96位的產品唯一身份標識所提供的參考號碼對任意一個GD32微控制器
    的頭像 發表于 05-20 09:10 ?4140次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>19<b class='flag-5'>章</b> 程序加密

    GD32 MCU 入門教程】GD32 MCU 常見外設介紹(14)RTC 模塊介紹

    GD32 MCU內部提供了一個RTC(實時時鐘)模塊,通過RTC可以實現日歷時鐘、鬧鐘等功能。RTC也可以用于深度睡眠或待機模式的低功耗喚醒。不同系列的
    的頭像 發表于 08-23 09:18 ?452次閱讀
    【<b class='flag-5'>GD32</b> MCU 入門教程】<b class='flag-5'>GD32</b> MCU 常見外設介紹(14)<b class='flag-5'>RTC</b> 模塊介紹
    主站蜘蛛池模板: 一个人高清在线观看日本免费| 黑人特黄AA完整性大片| 色偷偷男人的天堂a v| 国产精品18久久久久久欧美| 4399的视频BD高清在线观看免费| 亚洲不卡视频在线| 久久婷婷五月综合色丁香花| 5g天天奭视频| 色情www日本欧美| 国产在线视精品在亚洲| 2020最新无码国产在线视频| 人人啪日日观看在线| 极品美女久久久久久久久久久| 中文字幕亚洲第一页| 无码人妻99久久密AV| 欧美精品久久久久久久久大尺度| 好爽别插了无码视频| 高h乱np甄宓| www.青青草| 2021乱码精品公司| 一个人免费观看HD完整版| 色99蜜臀AV无码| 日韩欧美精品有码在线播放| 蓝男色gay| 久热这里只有精品99国产6| 国产偷国产偷亚洲高清app| 古风H啪肉NP文| 成电影人免费网站| 夫妻日本换H视频| 欧美高清video mr.sexo| 成人网站国产在线视频内射视频| 100国产精品人妻无码| CHINA篮球体育飞机2022网站| RUNAWAY韩国动漫免费官网版| a免费在线观看视频| 国产产一区二区三区久久毛片国语| 4399日本电影完整版在线观看免费 | 潮 喷女王cytherea| qvod激情图片| 超碰免费碰免费视频| 国产CHINESE HD精品|