精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內(nèi)不再提示

基于RT-Thread對N32L40XCL的看門狗定時器進行測試

冬至子 ? 來源:zealsoft ? 作者:zealsoft ? 2023-08-08 17:24 ? 次閱讀

模塊介紹

N32L40XCL 內(nèi)置獨立看門狗(IWDG)和窗口看門狗(WWDG)定時器,解決軟件錯誤導致的問題。看門狗定時器使用非常靈活,提高了系統(tǒng)的安全性和定時控制的準確性。

獨立看門狗(IWDG)由運行在 40KHz 的低速內(nèi)部時鐘(LSI 時鐘)驅(qū)動,在死循環(huán)事件或 MCU 卡死發(fā)生時,它仍然可以運行。這可以提供更高的安全級別、定時精度和看門狗的靈活性。它可以通過重置來解決由于軟件故障引起的系統(tǒng)故障。IWDG 最適合需要看門狗在主應用程序之外作為完全獨立進程運行但時序精度限制較低的應用程序。

窗口看門狗(WWDG)的時鐘是由 APB1 時鐘頻率除以 4096 得到的,通過時間窗口的配置來檢測程序運行是否異常。因此,WWDG 適用于精確定時,常用于監(jiān)控因外部干擾或無法預見的邏輯條件導致應用程序偏離其正常操作順序的軟件故障。當 WWDG 遞減計數(shù)器在達到窗口寄存器值之前或 WWDG_CTRL.T6 位變?yōu)?0 之后刷新時,系統(tǒng)復位發(fā)生。

官方WDT驅(qū)動實現(xiàn)的是獨立看門狗(IWDG)。

開發(fā)軟件
開發(fā)環(huán)境:
RT-Thread Studio 2.2.6
RT-Thread版本:4.0.2
下載工具:pyocd

步驟說明

新建工程

打開RT-Thread settings,使能Watchdog Timer,如下圖所示。

1.jpg

添加保存后,進行編譯,若無問題,則進行下一步。

編寫測試程序

編寫測試程序如下:

#include
#include
#include
/* defined the LED3 pin: PB5 /
#define LED3_PIN GET_PIN(B, 5)
#define WDT_DEVICE_NAME "wdt" /
看門狗設備名稱 /
static rt_device_t wdg_dev; /
看門狗設備句柄 /
static void idle_hook(void)
{
/
在空閑線程的回調(diào)函數(shù)里喂狗 /
rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);
//rt_kprintf("feed the dog!n ");
}
int main(void)
{
/
set LED3 pin mode to output /
rt_pin_mode(LED3_PIN, PIN_MODE_OUTPUT);
rt_err_t ret = RT_EOK;
rt_uint32_t timeout = 3000; /
溢出時間,單位:毫秒 /
char device_name[RT_NAME_MAX];
rt_strncpy(device_name, WDT_DEVICE_NAME, RT_NAME_MAX);
/
根據(jù)設備名稱查找看門狗設備,獲取設備句柄 /
wdg_dev = rt_device_find(device_name);
if (!wdg_dev)
{
rt_kprintf("find %s failed!n", device_name);
return RT_ERROR;
}
/
設置看門狗溢出時間 /
ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, &timeout);
if (ret != RT_EOK)
{
rt_kprintf("set %s timeout failed!n", device_name);
return RT_ERROR;
}
/
啟動看門狗 /
ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_START, RT_NULL);
if (ret != RT_EOK)
{
rt_kprintf("start %s failed!n", device_name);
return -RT_ERROR;
}
/
根據(jù)設備名稱查找看門狗設備,獲取設備句柄 /
wdg_dev = rt_device_find(device_name);
if (!wdg_dev)
{
rt_kprintf("find %s failed!n", device_name);
return RT_ERROR;
}
/
設置空閑線程回調(diào)函數(shù) */
rt_thread_idle_sethook(idle_hook);
while (1)
{
rt_pin_write(LED3_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED3_PIN, PIN_LOW);
rt_thread_mdelay(500);
}
}

代碼驗證

程序很簡單,初始化看門狗后,在空閑線程回調(diào)函數(shù)中不斷喂狗即可。在正式使用看門狗時,取消回調(diào)函數(shù)中的打印。

下載程序后運行。

如果終端打印提示“warning: tidle0 stack is close to end of stack address.”,請在rtconfig.h文件中搜索IDLE_THREAD_STACK_SIZE,并擴大該棧空間。默認值是256,可以擴大到512。

程序中使用RT_DEVICE_CTRL_WDT_SET_TIM命令設置超時時間,需要注意對于N32L40XCL開發(fā)板的驅(qū)動程序而言,這個超時時間的單位是毫秒,而有些RT-Thread的驅(qū)動程序這個超時時間的單位是秒。

此外,這個超時時間不能設置過長,因為過長會超過N32L40XCL寄存器的范圍。對于默認配置,這個超時時間不能超過376ms。否則程序會打印如下錯誤信息

[W/DBG] wdg set timeout parameter too large, please less than 3276 ms

set wdt timeout failed!

具體的工作原理可以參考下面這段drv_wdt.c的代碼:

case RT_DEVICE_CTRL_WDT_SET_TIMEOUT:
    {
        RT_ASSERT(*(uint16_t *)args != 0);
        reload_value = *(uint16_t *)args;
        if(reload_value >  0xFFF * 32 *1000 / LsiFreq)
        {
            LOG_W("wdg set timeout parameter too large, please less than %d msn", 0xFFF * 32 *1000 / LsiFreq);
            return -RT_EINVAL;
        }
        /* Enable write access to IWDG_PR and IWDG_RLR registers */
        IWDG_WriteConfig(IWDG_WRITE_ENABLE);
        /* IWDG counter clock: LSI/32 */
        IWDG_SetPrescalerDiv(IWDG_PRESCALER_DIV32);
        reload_value = ((uint32_t)reload_value * LsiFreq / 1000) / 32;
        IWDG_CntReload(reload_value);
        IWDG_WriteConfig(IWDG_WRITE_DISABLE);
    }

如果注釋掉上面idle_hook中的喂狗語句,則可以看到程序每3秒重啟一次。

章節(jié)總結

通過測試,可以驗證N32L40XCL芯片的WDT驅(qū)動程序可以正常運行。

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

    關注

    31

    文章

    5254

    瀏覽量

    119217
  • RT-Thread
    +關注

    關注

    31

    文章

    1239

    瀏覽量

    39447
  • MCU控制器
    +關注

    關注

    0

    文章

    27

    瀏覽量

    6858
  • WWDG
    +關注

    關注

    0

    文章

    19

    瀏覽量

    5478
  • IWDG
    +關注

    關注

    0

    文章

    21

    瀏覽量

    5182
收藏 人收藏

    評論

    相關推薦

    一文詳解看門狗定時器

    看門狗定時器由獨立的1 Mhz 片內(nèi)振蕩驅(qū)動。這是VCC = 5V 時的典型值。請參見特性數(shù)據(jù)以了解其他VCC 電平下的典型值。通過設置看門狗定時
    發(fā)表于 09-02 16:40 ?3797次閱讀
    一文詳解<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>

    STM32看門狗定時器的工作原理和作用 看門狗定時器的特性

    看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數(shù),一般來說都是向下計數(shù)的,給看門狗一個數(shù)字,程序開始運行后
    的頭像 發(fā)表于 07-27 16:30 ?5524次閱讀
    STM32<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>的工作原理和作用 <b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>的特性

    N32L40XCL-STB的I2C測試步驟

    本人基于 rt-thread studio 對 N32L40XCL 進行I2C測試。具體表現(xiàn)為使用 N32L40XCL 的 I2C1 (PA
    的頭像 發(fā)表于 09-18 17:35 ?1263次閱讀
    <b class='flag-5'>N32L40XCL</b>-STB的I2C<b class='flag-5'>測試</b>步驟

    RT-Thread Nano入門:獨立看門狗(IWDT)

    本文主要介紹怎么用RT-Thread Nano實現(xiàn)獨立看門狗IWDT驅(qū)動,創(chuàng)建一個喂狗線程,實現(xiàn)定時喂狗功能。
    的頭像 發(fā)表于 11-22 11:04 ?1760次閱讀
    <b class='flag-5'>RT-Thread</b> Nano入門:獨立<b class='flag-5'>看門狗</b>(IWDT)

    內(nèi)部與外部看門狗定時器的比較

    摘要:本文對內(nèi)部(集成在處理內(nèi)部)看門狗定時器(WTD)與外部(基于硬件) WDT的優(yōu)勢和劣勢進行了對比。內(nèi)部看門狗便于設計,但容易失效。
    發(fā)表于 05-02 10:34 ?4509次閱讀

    看門狗定時器的設計、工作原理及看門狗定時器的操作

    看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數(shù),一般給看門狗一個數(shù)字,程序開始運行后看門狗
    發(fā)表于 05-23 09:14 ?7511次閱讀
    <b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>的設計、工作原理及<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>的操作

    看門狗定時器的作用

    看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數(shù),一般給看門狗一個數(shù)字,程序開始運行后看門狗
    發(fā)表于 10-20 14:41 ?6568次閱讀

    基于VxWorks的看門狗定高效定時機制設計實現(xiàn)

    VxWorks提供了一個看門狗定時器(watchDog timer),它由以下四個函數(shù)維護: wdCreate( ) 創(chuàng)建并初始化一個看門狗定時器;wdDelete( ) 終止并
    發(fā)表于 03-06 09:22 ?4623次閱讀
    基于VxWorks的<b class='flag-5'>看門狗</b>定高效<b class='flag-5'>定時</b>機制設計實現(xiàn)

    TB3123 - PIC?單片機的窗口看門狗定時器

    窗口看門狗定時器(Windowed Watchdog Timer,WWDT)是PIC單片機的增強型看門狗定時器。該定時器是PIC單片機現(xiàn)有
    發(fā)表于 03-26 14:35 ?0次下載
    TB3123 - PIC?單片機的窗口<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>

    什么是看門狗定時器?為何看門狗定時器如此重要?

    的MCU故障可能無意中使看門狗定時器喪失功用,因此整合看門狗可能不會總是按預期的方式運作。同樣地,雖然軟件以內(nèi)部看門狗能夠偵測所有凍結或停機的方式編寫,但是,采取額外的步驟以冗余方式監(jiān)
    的頭像 發(fā)表于 08-29 08:13 ?2.3w次閱讀
    什么是<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>?為何<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>如此重要?

    看門狗定時器的相關問題和實驗說明

    看門狗的作用: 看門狗定時器是一個計數(shù),基本功能是在發(fā)生軟件問題和程序跑飛后使系統(tǒng)重新啟動。看門狗計數(shù)
    的頭像 發(fā)表于 10-06 12:59 ?4364次閱讀
    <b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>的相關問題和實驗說明

    LPC2294看門狗定時器

    導致復位/中斷5.指示看門狗復位的標志6.可編程的32位定時器與內(nèi)部預分頻。7.可選擇時間段,從(T PCLK x 256 x 4)到(TPCLK x 232 x4)應用看門狗的目的是在微控制
    發(fā)表于 12-04 10:36 ?8次下載
    LPC2294<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>

    使用高速微型看門狗定時器

    在惡劣環(huán)境中使用的高速微控制應用的設計人員將使用看門狗定時器來防止軟件失控。DS80C320高速微控制集成了看門狗
    的頭像 發(fā)表于 02-09 11:54 ?731次閱讀

    內(nèi)部和外部看門狗定時器的比較

    本文比較了內(nèi)部(與微處理集成)和外部(基于硬件)看門狗定時器(WDT)的優(yōu)缺點。它解釋了內(nèi)部看門狗定時器易于實現(xiàn),但容易發(fā)生故障。MAXQ
    的頭像 發(fā)表于 04-03 11:15 ?2741次閱讀

    AXI時基看門狗定時器(WDT)概述

    XilinxLogiCORE IP AXI4-Lite時基看門狗定時器(WDT)是一個32位外設,提供32位自由運行時基和看門狗定時器
    的頭像 發(fā)表于 10-16 11:10 ?995次閱讀
    AXI時基<b class='flag-5'>看門狗</b><b class='flag-5'>定時器</b>(WDT)概述