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

【正點(diǎn)原子STM32連載】第十五章 窗口看門狗實(shí)驗(yàn) 摘自【正點(diǎn)原子】APM32F407最小系統(tǒng)板使用指南

這篇具有很好參考價值的文章主要介紹了【正點(diǎn)原子STM32連載】第十五章 窗口看門狗實(shí)驗(yàn) 摘自【正點(diǎn)原子】APM32F407最小系統(tǒng)板使用指南。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1)實(shí)驗(yàn)平臺:正點(diǎn)原子stm32f103戰(zhàn)艦開發(fā)板V4
2)平臺購買地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套實(shí)驗(yàn)源碼+手冊+視頻下載地址: http://www.openedv.com/thread-340252-1-1.html#

第十五章 窗口看門狗實(shí)驗(yàn)

本章介紹APM32F407窗口看門狗(WWDT)的使用,窗口看門狗與獨(dú)立看門狗一樣能夠幫助CPU在進(jìn)入錯誤狀態(tài)或程序跑飛時進(jìn)行復(fù)位,不過窗口看門狗相對于獨(dú)立看門狗限制了“喂狗”的最小間隔,若兩次“喂狗”的間隔太短,一樣會產(chǎn)生復(fù)位。通過本章的學(xué)習(xí),讀者將學(xué)習(xí)到WWDT的使用。
本章分為如下幾個小節(jié):
15.1 硬件設(shè)計(jì)
15.2 程序設(shè)計(jì)
15.3 下載驗(yàn)證

15.1 硬件設(shè)計(jì)
15.1.1 例程功能

  1. 程序運(yùn)行后,點(diǎn)亮LED0等待300毫秒后開啟窗口看門狗,后進(jìn)入死循環(huán)等待窗口看門狗的中斷在窗口看門狗的中斷服務(wù)函數(shù)中執(zhí)行喂狗和翻轉(zhuǎn)LED1狀態(tài)的操作,能觀察到的現(xiàn)象為LED0在程序啟動時閃爍一下,隨后LED1不停閃爍
    15.1.2 硬件資源
  2. LED
    LED0 - PF9
    LED1 - PF10
  3. 窗口看門狗
    15.1.3 原理圖
    本章實(shí)驗(yàn)使用的窗口看門狗為APM32F407的片上資源,因此并沒有相應(yīng)的連接原理圖。
    15.2 程序設(shè)計(jì)
    15.2.1 Geehy標(biāo)準(zhǔn)庫的WWDT驅(qū)動
    本章實(shí)驗(yàn)使用到了WWDT的提前喚醒中斷,提前喚醒中斷指的是WWDT在“喂狗”超時即將進(jìn)行復(fù)位前由WWDT產(chǎn)生的中斷,本章實(shí)驗(yàn)就在WWDT的提前喚醒中斷服務(wù)函數(shù)中進(jìn)行“喂狗”。在使用WWDT前,需要先對其進(jìn)行初始化,在初始化中,需要使能WWDT并配置WWDT的預(yù)分頻系數(shù)和窗口值,還要進(jìn)行使能WWDT中斷的相關(guān)操作,具體的步驟如下:
    ①:使能WWDT
    ②:配置WWDT預(yù)分頻系數(shù)
    ③:配置WWDT窗口值
    ④:使能WWDT的提前喚醒中斷
    ⑤:使能WWDT中斷,并配置其相關(guān)的中斷優(yōu)先級
    ⑥:在WWDT提前喚醒中對其進(jìn)行“喂狗”
    在Geehy標(biāo)準(zhǔn)庫中對應(yīng)的驅(qū)動函數(shù)如下:
    ①:使能WWDT
    該函數(shù)用于使能WWDT,其函數(shù)原型如下所示:
    void WWDT_Enable(uint8_t counter);
    該函數(shù)的形參描述,如下表所示:
    【正點(diǎn)原子STM32連載】第十五章 窗口看門狗實(shí)驗(yàn) 摘自【正點(diǎn)原子】APM32F407最小系統(tǒng)板使用指南,stm32,嵌入式硬件,單片機(jī)

表15.2.1.1 函數(shù)WWDT_Enable()形參描述
該函數(shù)的返回值描述,如下表所示:
【正點(diǎn)原子STM32連載】第十五章 窗口看門狗實(shí)驗(yàn) 摘自【正點(diǎn)原子】APM32F407最小系統(tǒng)板使用指南,stm32,嵌入式硬件,單片機(jī)

表15.2.1.2 函數(shù)WWDT_Enable()返回值描述
該函數(shù)的使用示例,如下所示:

#include "apm32f4xx.h"
#include "apm32f4xx_wwdt.h"

void example_fun(void)
{
    /* 使能WWDT */
    WWDT_Enable(0x7F);
}

②:配置WWDT預(yù)分頻系數(shù)
該函數(shù)用于配置WWDT的預(yù)分頻系數(shù),預(yù)分頻系數(shù)決定了WWDT計(jì)數(shù)的快慢,其函數(shù)原型如下所示:
void WWDT_ConfigTimebase(WWDT_TIME_BASE_T timeBase);
該函數(shù)的形參描述,如下表所示:
【正點(diǎn)原子STM32連載】第十五章 窗口看門狗實(shí)驗(yàn) 摘自【正點(diǎn)原子】APM32F407最小系統(tǒng)板使用指南,stm32,嵌入式硬件,單片機(jī)

表15.2.1.3 函數(shù)WWDT_ConfigTimebase()形參描述
該函數(shù)的返回值描述,如下表所示:
返回值 描述
無 無
表15.2.1.4 函數(shù)WWDT_ConfigTimebase()返回值描述
該函數(shù)的使用示例,如下所示:

#include "apm32f4xx.h"
#include "apm32f4xx_wwdt.h"

void example_fun(void)
{
    /* 配置WWDT的預(yù)分頻系數(shù)
     * WWDT的計(jì)數(shù)時鐘為(PCLK1/4096)/8
     */
    WWDT_ConfigTimebase(WWDT_TIME_BASE_8);
}

③:配置WWDT窗口值
該函數(shù)用于配置WWDT的窗口值,在WWDT的計(jì)數(shù)值減少到窗口值之前進(jìn)行“喂狗”,將為導(dǎo)致WWDT復(fù)位,其函數(shù)原型如下所示:
void WWDT_ConfigWindowData(uint8_t windowData);
該函數(shù)的形參描述,如下表所示:
形參 描述
windowData WWDT的窗口值
表15.2.1.5 函數(shù)WWDT_ConfigWindowData()形參描述
該函數(shù)的返回值描述,如下表所示:
返回值 描述
無 無
表15.2.1.6 函數(shù)WWDT_ConfigWindowData()返回值描述
該函數(shù)的使用示例,如下所示:

#include "apm32f4xx.h"
#include "apm32f4xx_wwdt.h"

void example_fun(void)
{
    /* 配置WWDT窗口值 */
    WWDT_ConfigWindowData(0x5F);
}

④:使能WWDT提前喚醒中斷
該函數(shù)用于使能WWDT的提前喚醒中斷,其函數(shù)原型如下所示:
void WWDT_EnableEWI(void);
該函數(shù)的形參描述,如下表所示:
形參 描述
無 無
表15.2.1.7 函數(shù)WWDT_EnableEWI()形參描述
該函數(shù)的返回值描述,如下表所示:
返回值 描述
無 無
表15.2.1.8 函數(shù)WWDT_EnableEWI()返回值描述
該函數(shù)的使用示例,如下所示:

#include "apm32f4xx.h"
#include "apm32f4xx_wwdt.h"

void example_fun(void)
{
    /* 使能WWDT提前喚醒中斷 */
    WWDT_EnableEWI();
}

⑤:配置WWDT中斷
請見第12.2.3小節(jié)中配置中斷的相關(guān)內(nèi)容。
⑥:配置WWDT的計(jì)數(shù)值
該函數(shù)用于配置WWDT的計(jì)數(shù)值,也就是所謂的“喂狗”,其函數(shù)原型如下:
void WWDT_ConfigCounter(uint8_t counter);
該函數(shù)的形參描述,如下表所示:
形參 描述
counter WWDT的計(jì)數(shù)值
表15.2.1.9 函數(shù)WWDT_ConfigCounter()形參描述
該函數(shù)的返回值描述,如下表所示:
返回值 描述
無 無
表15.2.1.10 函數(shù)WWDT_ConfigCounter()返回值描述
該函數(shù)的使用示例,如下表所示:

#include "apm32f4xx.h"
#include "apm32f4xx_wwdt.h"

void example_fun(void)
{
    /* 配置WWDT的計(jì)數(shù)值(喂狗) */
    WWDT_ConfigCounter(0x7F);
}

15.2.2 看門狗驅(qū)動
本章實(shí)驗(yàn)的看門狗驅(qū)動主要負(fù)責(zé)向應(yīng)用層提供WWDT的初始化函數(shù),并實(shí)現(xiàn)WWDT的提前喚醒中斷服務(wù)函數(shù),在WWDT的提前喚醒中斷服務(wù)函數(shù)中執(zhí)行“喂狗”操作。本章實(shí)驗(yàn)中,看門狗的驅(qū)動代碼包括wdt.c和wdt.h兩個文件。
看門狗驅(qū)動中WWDT的初始化函數(shù),如下所示:

/**
 * @brief	窗口看門狗初始化
 * @param	tr: 計(jì)數(shù)器數(shù)值
 * @param	tw: 窗口值
 * @param	fprer: 時基預(yù)分頻系數(shù),WWDT_TIME_BASE_1~WWDT_TIME_BASE_8
 * 			Fwwdt = (PCLK1 / 4096) / (2^fprer)
 * @retval	無
 */
void wwdt_init(uint8_t tr, uint8_t wr, uint32_t fprer)
{
    RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_WWDT);	/* 使能WWDT時鐘 */
    WWDT_Enable(tr);								/* 使能窗口看門狗并設(shè)置計(jì)數(shù)器數(shù)值 */
    WWDT_ConfigTimebase((WWDT_TIME_BASE_T)fprer);		/* 配置時基預(yù)分頻系數(shù) */
    WWDT_ConfigWindowData(wr);							/* 設(shè)置窗口值 */
    wwdt_counter = tr;
    WWDT_EnableEWI();									/* 使能提前喚醒中斷 */
    NVIC_EnableIRQRequest(WWDT_IRQn, 2, 0);				/* 使能中斷 */
}

從上面的代碼中可以看出,WWDT的初始化函數(shù)中除了使能了WWDT的時鐘外,還分別執(zhí)行了使能WWDT、配置WWDT的預(yù)分頻系數(shù)和窗口值、使能WWDT的提前喚醒中斷和使能WWDT中斷的操作。隨后,在WWDT計(jì)數(shù)值減少到0x40時,將會產(chǎn)生提前喚醒中斷。
看門狗驅(qū)動中,WWDT提前喚醒中斷的中斷服務(wù)函數(shù),如下所示:

/**
 * @brief	窗口看門狗提前喚醒中斷服務(wù)函數(shù)
 * @param	無
 * @retval	無
 */
void WWDT_IRQHandler(void)
{
    if (WWDT_ReadFlag() == SET)				/* 判斷提前喚醒中斷標(biāo)志 */
    {
    		WWDT_ConfigCounter(wwdt_counter);	/* 重新配置窗口看門狗計(jì)數(shù)器數(shù)值 */
    		LED1_TOGGLE();						/* 翻轉(zhuǎn)LED1狀態(tài) */
    		WWDT_ClearFlag();					/* 清除提前喚醒中斷標(biāo)志 */
    }
}

可以看到,在窗口看門狗的提前喚醒中斷服務(wù)函數(shù)中,對WWDT進(jìn)行了喂狗操作,同時還對LED1的狀態(tài)進(jìn)行了以此翻轉(zhuǎn)(方便觀察)。
15.2.3 實(shí)驗(yàn)應(yīng)用代碼
本章實(shí)驗(yàn)的應(yīng)用代碼,如下所示:

int main(void)
{
    NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_3);	/* 設(shè)置中斷優(yōu)先級分組為組3 */
    sys_apm32_clock_init(336, 8, 2, 7);					/* 配置系統(tǒng)時鐘 */
    delay_init(168);										/* 初始化延時功能 */
    usart_init(115200);									/* 初始化串口 */
    led_init();											/* 初始化LED */
    LED0(0);												/* LED0點(diǎn)亮 */
    delay_ms(300);
    wwdt_init(0x7F, 0x5F, WWDT_TIME_BASE_8);
    
    while (1)
    {
    		LED0(1);	/* LED0熄滅 */
    }
}

可以看到應(yīng)用代碼中,LED初始化后,LED0會被點(diǎn)亮300毫秒,隨后初始化窗口看門狗并熄滅LED0,若窗口看門狗沒有正常被“喂狗”,那么程序復(fù)位,可以看到LED0再次亮起和熄滅,若窗口看門狗正常被“喂狗”,則可以看到LED1閃爍。
15.3 下載驗(yàn)證
在完成編譯和燒錄操作后,可以看到板子上的LED0在上電時,亮起并熄滅一次,隨后LED1不斷閃爍,說明WWDT“喂狗”正常。文章來源地址http://www.zghlxwxcb.cn/news/detail-662480.html

到了這里,關(guān)于【正點(diǎn)原子STM32連載】第十五章 窗口看門狗實(shí)驗(yàn) 摘自【正點(diǎn)原子】APM32F407最小系統(tǒng)板使用指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包