在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

【GD32 MCU 入門教程】GD32 MCU 常見外設介紹(9)FWDG 模塊介紹

聚沃科技 ? 2024-08-18 09:28 ? 次閱讀

9.1.FWDG 簡介

本章我們主要分析獨立看門狗(FWDG)的功能框圖和它的應用。獨立看門狗用通俗一點的話來解釋就是一個12位的遞減計數器,當計數器的值從某個值一直減到0的時候,系統就會產生一個復位信號,即FWDGTRSTF。如果在計數沒減到0之前,刷新了計數器的值的話,那么就不會產生復位信號,這個動作就是我們經常說的喂狗。看門狗功能由 VDD 電壓域供電,在停止模式和待機模式下仍能工作。獨立看門狗定時器有獨立的時鐘源(IRC40K) 。 即使主時鐘失效, FWDGT依然 能保持正常工作狀態, 適用于需要獨立環境且對計時精度要求不高的場合。

9.2.GD32 FWDG 外設原理簡介

因篇幅有限,本文無法詳細介紹GD32所有系列FWDG外設接口,下面以GD32F30x為列,著重介紹下GD32F30x的FWDG外設簡介和結構框圖,后介紹下各個系列的差異。

GD32 FWDG 主要特性

? 自由運行的12位向下計數器;

? 如果看門狗定時器被使能,那么當向下計數器的值達到0時產生系統復位;

? 獨立時鐘源,獨立看門狗定時器在主時鐘故障(例如待機和深度睡眠模式下)時仍能工作;

? 獨立看門狗定時器硬件控制位,可以用來控制是否在上電時自動啟動獨立看門狗定時器;

? 可以配置獨立看門狗定時器在調試模式下選擇停止還是繼續工作。

FWDG 功能結構框圖

輸入圖片說明

FWDG時鐘:如FWDG框圖的①所示, FWDG的時鐘由獨立的RC振蕩器IRC40K提供,即使主時鐘發生故障它仍然有效,非常獨立。IRC的頻率根據溫度和工作場合會有一定的漂移,我們一般取40KHZ,所以FWDG的定時時間并不一定非常精確,只適用于對時間精度要求相對較低的場合。

計數器時鐘:如FWDG框圖的②所示, 遞減計數器的時鐘由IRC40K經過一個8位的預分頻器得到,我們可以操作預分頻器寄存器FWDG_PSC來設置分頻因子,分頻因子可以是:[4,8,16,32,64,128,256]。

計數器:如圖 0-28 FWDG框圖的③所示, FWDG的計數器是一個12位的遞減計數器,最大值為0XFFF,當計數器減到0時,會產生一個復位信號: FWDGTRSTF,讓程序重新啟動運行,如果在計數器減到0之前刷新了計數器的值的話,就不會產生復位信號,重新刷新計數器值的這個動作我們俗稱喂狗。

重裝載寄存器:如FWDG框圖的④所示, 重裝載寄存器是一個12位的寄存器,里面裝著要刷新到計數器的值,這個值的大小決定著FWDG的溢出時間。超時時間Tout = (42^prv) / 40 rlv (s) ,prv是預分頻器寄存器的值,rlv是重裝載寄存器的值。

控制寄存器:如FWDG框圖的⑤所示, 控制寄存器FWDG_CTL可以說是獨立看門狗的一個控制寄存器,主要有三種控制方式,往這個寄存器寫入下面三個不同的值有不同的效果。具體如下表控制寄存器取值枚舉

輸入圖片說明

狀態寄存器:如FWDG框圖的⑥所示, 狀態寄存器STAT只有位0:PUD和位1:RUD有效,這兩位只能由硬件操作,軟件操作不了。RUD:看門狗計數器重裝載值更新,硬件置1表示重裝載值的更新正在進行中,更新完畢之后由硬件清0。PUD: 看門狗預分頻值更新,硬件置‘1‘指示預分頻值的更新正在進行中,當更新完成后,由硬件清0。所以只有當RUD/PUD等于0的時候才可以更新重裝載寄存器/預分頻寄存器。

注意

如果在選項字節中打開了“硬件看門狗定時器”功能,那么在上電的時候看門狗定時器就被自動打開。為了避免系統復位,軟件應該在計數器達到0x000之前重裝載計數器;

如果DBG控制寄存器0(DBG_CTL0) 中的FWDGT_HOLD位被清0,即使Cortex?-M4內核停止(調試模式下) 獨立看門狗定時器依然工作。如果FWDGT_HOLD位置1,獨立看門狗定時器將在調試模式下停止工作。

各系列 FWDG 功能差異

F4xx系例FWDG時鐘為32K,因此要注意FWDG的定時時間。

9.3.硬件連接說明

FWDG屬于單片機內部資源,不需要外部電路,需要一個外部的按鍵和LED,通過按鍵來喂狗,喂狗成功LED亮,喂狗失敗,程序重啟,LED滅一次。

9.4.軟件配置說明

本小節講解FWDG_Example例程中FWDG模塊的實驗講解,主要包括FWDG配置函數、FWDG喂狗函數、主函數介紹以及運行結果。

FWDG 配置函數

外設時鐘配置

外設時鐘配置如代碼清單FWDG例程時鐘配置所示,在GD32全系列MCU中需打開GPIOA(LED)的時鐘,另外,在GD32F10X_HD || GD32F30X_HD || GD32F20X_CL || GD32E10X || GD32F1X0 || GD32F3X0 || GD32E230中需要打開IRC40K,GD32F4XX中需要打開IRC32K。

void rcu_config(void) { #if defined GD32F10X_HD || GD32F30X_HD || GD32F20X_CL || GD32E10X || GD32F1X0 || GD32F4XX || GD32F3X0 || GD32E230 rcu_periph_clock_enable(RCU_GPIOA); #if defined GD32F10X_HD || GD32F30X_HD || GD32F20X_CL || GD32E10X || GD32F1X0 || GD32F3X0 || GD32E230 /* enable IRC40K */ rcu_osci_on(RCU_IRC40K); /* wait till IRC40K is ready */ while(SUCCESS != rcu_osci_stab_wait(RCU_IRC40K)){ } #elif GD32F4XX /* enable IRC32K */ rcu_osci_on(RCU_IRC32K); /* wait till IRC32K is ready */ while(SUCCESS != rcu_osci_stab_wait(RCU_IRC32K)){ } #endif #endif }

GPIO(LED)引腳配置

GPIO引腳配置如代碼清單FWDG例程GPIO(LED)引腳配置所示,GD32F10X、GD32F30X、GD32F20X、GD32E10X系列GPIO配置相同, PA3、PA4作為LED引腳配置為推挽輸出模式;GD32F1X0、GD32F4XX、GD32F3X0、GD32E23X系列GPIO配置基本相同。配置完成后將PA3 和PA4拉低。

void gpio_led_config(void) { #if defined GD32F10X_HD || GD32F30X_HD || GD32F20X_CL || GD32E10X gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3); gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4); #elif defined GD32F1X0 || GD32F4XX || GD32F3X0 || GD32E230 gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_3); gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3); gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4); gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4); #endif GPIO_BC(GPIOA) = GPIO_PIN_3; GPIO_BC(GPIOA) = GPIO_PIN_4; }

按鍵初始化配置

按鍵初始化配置如代碼清單按鍵初始化配置所示。本例程中默認使用PA0下降沿進入中斷,GD32F10X_HD || GD32F30X_HD || GD32F20X_CL || GD32E10X系列配置基本相同,GD32F1X0 || GD32F3X0系列配置類似。GD32E230中斷分組只有搶占優先級沒有子優先級。

void key_init(void) { #if defined GD32F10X_HD || GD32F30X_HD || GD32F20X_CL || GD32E10X rcu_periph_clock_enable(RCU_AF); gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_0); /* enable and set key EXTI interrupt to the lowest priority */ nvic_irq_enable(EXTI0_IRQn, 2U, 0U); /* connect key EXTI line to key GPIO pin */ gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA, GPIO_PIN_SOURCE_0); /* configure key EXTI line */ exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING); exti_interrupt_flag_clear(EXTI_0); #elif defined GD32F1X0 || GD32F4XX || GD32F3X0 || GD32E230 #if defined GD32F1X0 || GD32F3X0 rcu_periph_clock_enable(RCU_CFGCMP); /* configure button pin as input */ gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_0); /* enable and set key EXTI interrupt to the lowest priority */ nvic_irq_enable(EXTI0_1_IRQn, 2U, 0U); #elif defined GD32E230 rcu_periph_clock_enable(RCU_CFGCMP); /* configure button pin as input */ gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_0); /* enable and set key EXTI interrupt to the lowest priority */ nvic_irq_enable(EXTI0_1_IRQn, 2U); #elif defined GD32F4XX rcu_periph_clock_enable(RCU_SYSCFG); /* configure button pin as input */ gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_0); /* enable and set key EXTI interrupt to the lowest priority */ nvic_irq_enable(EXTI0_IRQn, 2U, 0U); #endif /* connect key EXTI line to key GPIO pin */ syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN0); /* configure key EXTI line */ exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING); exti_interrupt_flag_clear(EXTI_0); #endif }

FWDG 配置函數

FWDG配置函數如代碼清單FWDG配置配置所示。當時鐘為40K時,溢出時間Tout =prv/40 rlv (s),prv可以是[4,8,16,32,64,128,256];rlv的取值范圍為0~0XFFF。如果我們需要設置1s的超時溢出, prv 可以取 FWDGT_PSC_DIV64 , rlv 取 625 ,即調用 : fwdgt_config(625,FWDGT_PSC_DIV64)。Tout=64/40625=1s。GD32F4XX系列IRC為32K則定時時間1.25s。

void FWDGT_init(void) { /* confiure FWDGT counter clock: 40KHz(IRC40K) / 64 = 0.625 KHz GD32F10X_HD || GD32F30X_HD || GD32F20X_CL || GD32E10X || GD32F1X0 || GD32F3X0 || GD32E23X*/ /* confiure FWDGT counter clock: 32KHz(IRC32K) / 64 = 0.5 KHz GD32F4XX*/ fwdgt_config(625, FWDGT_PSC_DIV64); /* after 1.x seconds to generate a reset */ fwdgt_enable(); }

中斷喂狗

中斷喂狗函數如代碼清單中斷喂狗所示。當進進入PA0外部中斷時執行喂狗函數。

#if defined GD32F10X_HD || GD32F30X_HD || GD32F20X_CL || GD32E10X || GD32F4XX void EXTI0_IRQHandler(void) { /* make sure whether the tamper key EXTI Line is interrupted */ if(RESET != exti_interrupt_flag_get(EXTI_0)){ /* reload FWDGT counter */ fwdgt_counter_reload(); } /* clear the interrupt flag bit */ exti_interrupt_flag_clear(EXTI_0); } #elif defined GD32F1X0 || GD32F4XX || GD32F3X0 || GD32E230 void EXTI0_1_IRQHandler(void) { /* make sure whether the tamper key EXTI Line is interrupted */ if(RESET != exti_interrupt_flag_get(EXTI_0)){ /* reload FWDGT counter */ fwdgt_counter_reload(); } /* clear the interrupt flag bit */ exti_interrupt_flag_clear(EXTI_0); } #endif

主函數說明

主函數如代碼清單FWDG例程主函數所示,主函數中我們初始化好LED和按鍵相關的配置,設置FWDG 1s 超時溢出之后,進入while死循環,通過按鍵來喂狗,如果喂狗成功,則LED2(PA4)點亮,如果喂狗失敗的話,系統重啟,程序重新執行,當執行到rcu_flag_get函數的時候,則會檢測到是FWDG復位,然后讓LED1(PA3)亮。如果喂狗一直失敗的話,則會一直產生系統復位,加上前面延時的效果,則會看到LED1(PA3)一直閃爍。

int main(void) { /* peripheral clock enable */ rcu_config(); /* config systick */ systick_config(); /* GPIO config */ gpio_led_config(); key_init(); delay_1ms(500); FWDGT_init(); /* check if the system has resumed from FWDGT reset */ if(RESET != rcu_flag_get(RCU_FLAG_FWDGTRST)){ /* turn on LED1 */ GPIO_BOP(GPIOA) = GPIO_PIN_3; /* clear the FWDGT reset flag */ rcu_all_reset_flag_clear(); while(1); } else{ /* turn on LED2 */ GPIO_BOP(GPIOA) = GPIO_PIN_4; } while(1) { } }

運行結果

把編譯好的程序下載到開發板,在1s的時間內通過按鍵來不斷的喂狗,如果喂狗失敗,LED1閃爍。如果一直喂狗成功,則LED2常亮。

9.5.FWDG 使用注意事項

(1) FWDG在Debug仿真時,請將DBG控制寄存器0(DBG_CTL0) 中的FWDGT_HOLD位置1,來關閉FWDG功能。

(2) 沒有開啟軟件看門狗時,程序自動復位,可能在選項字節里開啟了硬件看門狗。

(3) 同時使用FWDG、Standby或Deep-sleep模式時,無法喂狗:在reload命令后,硬件清除reload信號之前,進入Deepsleep或者standby模式,會導致后續reload命令無法正常響應。軟件保證在reload命令和進入Deepsleep/standby mode的命令中間有3個LXTAL clock(100us)以上的時間間隔。

(4) 由于環境溫度影響,獨立看門狗定時器超時周期會有些許波動,可以通過校準IRC40K使獨立看門狗定時器超時更加精確。

教程GD32 MCU方案商聚沃科技原創發布,了解更多GD32 MCU教程,關注聚沃科技官網

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

    關注

    6040

    文章

    44587

    瀏覽量

    636785
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17194

    瀏覽量

    351879
  • 看門狗
    +關注

    關注

    10

    文章

    565

    瀏覽量

    70873
  • GD32
    +關注

    關注

    7

    文章

    404

    瀏覽量

    24401
收藏 人收藏

    評論

    相關推薦

    GD32 MCU 入門教程GD32 MCU 常見外設介紹(12)FMC 模塊介紹

    閃存控制器(FMC),提供了片上閃存需要的所有功能。FMC 也提供了頁擦除,整片擦除,以及32 位整字或 16 位半字編程閃存等操作。 GD32 MCU 支持不同類型編程的具體說明如下表 GD32
    的頭像 發表于 08-21 09:56 ?1230次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>常見外設</b><b class='flag-5'>介紹</b>(12)FMC <b class='flag-5'>模塊</b><b class='flag-5'>介紹</b>

    GD32 MCU移植

    gd32是一款國產單片機。該芯片在很多方面和STM32有異曲同工之處。資料不是很多! GD32外設方面、和STM32沒有多大區別。 只是需要注意資源的引腳分配。雖然和STM32使用方式一樣、但是也存在
    發表于 03-23 13:40

    GD32MCU介紹

    其實兆芯的MCU為了兼容ST,外設的寄存器設計與ST保持一致了。比如GD32VF103或者GD32E103系列的USBFS這個外設,基本等同
    發表于 11-01 06:03

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

    、調試工具,再到庫函數的使用、各個外設的程序實現,不僅有原理的介紹,還有實踐的歷程。這本書聚焦在GD32 MCU基本原理和固件庫上,重點在于對固件庫API的
    發表于 06-06 21:52

    兆易創新GD32 MCU選型手冊,適用于GD32全系列MCU

    兆易創新GD32MCU選型手冊,適用于GD32全系列MCUGD32MCU選型手冊,適用于GD32全系列MCU
    發表于 10-19 17:26 ?49次下載

    你了解GD32 MCU的命名規則嗎

    下面為大家介紹GD32 MCU的通用命名規則,以GD32F303ZGT6為例,其中,GD32代表GD32
    的頭像 發表于 01-13 09:38 ?3755次閱讀
    你了解<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的命名規則嗎

    GD32 MCU的選項字節是什么?

    GD32 MCU的選項字節是什么,有什么功能呢?選項字節被誤篡改如何回復?
    的頭像 發表于 01-17 09:42 ?1459次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的選項字節是什么?

    不同型號的GD32 MCU如何區分?

    大家是否碰到過以下應用場景:同一套軟件代碼希望跑在不同型號的GD32 MCU中,但有些地方需要根據MCU型號進行調整?或者上位機或其他MCUGD3
    的頭像 發表于 01-27 09:32 ?1033次閱讀
    不同型號的<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>如何區分?

    GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(1)使用Keil開發GD32

    GD32系列為通用型MCU,所以開發環境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據個人喜好來選擇相應的開發環境。
    的頭像 發表于 08-08 15:01 ?1329次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發環境搭建(1)使用Keil開發<b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(2)使用 IAR 開發 GD32

    GD32系列為通用型MCU,所以開發環境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據個人喜好來選擇相應的開發環境。
    的頭像 發表于 08-08 15:40 ?758次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發環境搭建(2)使用 IAR 開發 <b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(3)使用 Embedded Builder 開發 GD32

    GD32系列為通用型MCU,所以開發環境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據個人喜好來選擇相應的開發環境。
    的頭像 發表于 08-08 16:03 ?1052次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發環境搭建(3)使用 Embedded Builder 開發 <b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】二、GD32 MCU 燒錄說明(1)ISP 燒錄

    ISP:In System Programing,在系統編程,通過MCU片內的引導程序進行Flash編程。 GD32片內有一個只讀信息塊,用于存放引導裝載程序,引導程序在MCU出廠前就會提前燒錄好
    的頭像 發表于 08-08 16:20 ?1050次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】二、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 燒錄說明(1)ISP 燒錄

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

    GD32 MCU內部提供了一個RTC(實時時鐘)模塊,通過RTC可以實現日歷時鐘、鬧鐘等功能。RTC也可以用于深度睡眠或待機模式的低功耗喚醒。不同系列的GD32
    的頭像 發表于 08-23 09:18 ?527次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>常見外設</b><b class='flag-5'>介紹</b>(14)RTC <b class='flag-5'>模塊</b><b class='flag-5'>介紹</b>

    GD32 MCU 入門教程GD32 MCU FPU 使用方法

    GD32 MCU FPU 使用方法
    的頭像 發表于 08-25 09:24 ?666次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> FPU 使用方法

    GD32 MCU入門教程GD32 MCU GPIO 結構與使用注意事項

    本文是專門為基于GD32 MCU開發的工程設計人員提供,主要介紹了GPIO的功能配置、內部結構以及在不同場景使用時的注意事項,旨在幫助GD32 MC
    的頭像 發表于 09-07 10:34 ?809次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b><b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> GPIO 結構與使用注意事項
    主站蜘蛛池模板: 久久精品免费观看视频| 国产色拍| 特级免费毛片| 国产一级aaa全黄毛片| 模特视频一二三区| 久久观看视频| 成人欧美精品一区二区不卡| a网在线| 午夜高清在线| 开心激情婷婷| 国产在线色| 7m视频精品凹凸在线播放| 午夜狠狠操| 好吊色视频988gao在线观看| 1000部又爽又黄的做黄禁片| 丁香六月激情| 狠狠色噜噜狠狠狠狠2021天天| 曰韩毛片| 99热久久精品免费精品| 亚洲一区二区三区麻豆| 三级视频中文字幕| 久色99| 亚洲最新视频| 免费又黄又爽的禁片视频| 欧洲三级网站| 国产在线精品观看| 色小视频| 国产欧美乱码在线看| 天天综合亚洲| 日本68xxxxxxxxx老师| 成人久久久精品乱码一区二区三区| 五月婷婷六月婷婷| 男人的天堂一区二区视频在线观看| 成年男人永久免费看片| 美女被免费网站视频在线| 一区二区视频网| 特级aaa片毛片免费观看| 美女全黄网站免费观看| 一本视频在线| 亚洲乱淫| 最好看的2019中文字幕1|