1.概述
本篇文章主要介紹如何使用e2studio對(duì)瑞薩進(jìn)行看門(mén)狗WDT配置,并且配置RTC時(shí)鐘產(chǎn)生1s的周期中斷,通過(guò)串口打印查看看門(mén)狗WDT的計(jì)數(shù)值。
2.硬件準(zhǔn)備
首先需要準(zhǔn)備一個(gè)開(kāi)發(fā)板,這里我準(zhǔn)備的是芯片型號(hào) R7FA2L1AB2DFL 的開(kāi)發(fā)板。
3.新建工程
4.工程模板
5.保存工程路徑
6.芯片配置
本文中使用R7FA2L1AB2DFL來(lái)進(jìn)行演示。
7
7.工程模板選擇
8.WDT配置
點(diǎn)擊Stacks->New Stack->Driver->Monitoring -> Watchdog Driver on r_wdt。
9.WDT屬性配置
10.RTC配置
點(diǎn)擊Stacks->New Stack->Driver->Timers -> RTC Driver on r_rtc。
11.RTC屬性配置
12.設(shè)置E2STUDIO堆棧
13.e2studio的重定向printf設(shè)置

C++ 構(gòu)建->設(shè)置->GNU ARM Cross C Linker->Miscellaneous去掉Other linker flags中的 “--specs=rdimon.specs”
14.printf輸出重定向到串口
打印最常用的方法是printf,所以要解決的問(wèn)題是將printf的輸出重定向到串口,然后通過(guò)串口將數(shù)據(jù)發(fā)送出去。
注意一定要加上頭文件#include
#ifdef __GNUC__ //串口重定向
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
err = R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&ch, 1);
if(FSP_SUCCESS != err) __BKPT();
while(uart_send_complete_flag == false){}
uart_send_complete_flag = false;
return ch;
}
int _write(int fd,char *pBuffer,int size)
{
for(int i=0;i;i++)>
15.R_WDT_Open()函數(shù)原型

故可以用R_WDT_Open()函數(shù)進(jìn)行初始化和開(kāi)啟WDT。
/* Open the module. */
err = R_WDT_Open(&g_wdt0_ctrl, &g_wdt0_cfg);
/* Handle any errors. This function should be defined by the user. */
assert(FSP_SUCCESS == err);
16.R_WDT_Refresh()函數(shù)原型

故可以用R_WDT_Refresh()函數(shù)進(jìn)行喂狗操作。
/* Refresh before the counter underflows to prevent reset or NMI. */
err = R_WDT_Refresh(&g_wdt0_ctrl);
assert(FSP_SUCCESS == err);
17.R_WDT_CounterGet()函數(shù)原型

故可以用R_WDT_CounterGet()函數(shù)獲取當(dāng)前的計(jì)數(shù)值。
/* Read the current WDT counter value. */
err = R_WDT_CounterGet(&g_wdt0_ctrl, &wdt_counter);
assert(FSP_SUCCESS == err);
18.WDT周期設(shè)定
通過(guò)查閱數(shù)據(jù)手冊(cè),可以得知WDT使用的時(shí)鐘為PCLKB。

在本案例中,使用的PCLKB時(shí)鐘為24MHz。

WDT從PCLKB運(yùn)行,依據(jù)上文的設(shè)定,PCLKB周期如下所示。
| Paramete | Equal to |
| PLCKB/2 | 24MHz |
| Clock division ratio | PLCK/8192 |
| Timeout period | 16384 cycles |
| WDT clock frequency | 24MHz / 8192 = 2929.6875 Hz |
| Cycle time | 1 / 2929.6875 Hz = 341.33 us |
| Timeout | 341.33 us * 16384 cycles = 5.59 seconds |
上述可以看到在該設(shè)置下的溢出時(shí)間為5.59s,那么1s的計(jì)數(shù)為1s/341.33 us=2930。
19.WDT計(jì)數(shù)周期
WDT計(jì)數(shù)是從最高一直減到0,當(dāng)?shù)?時(shí)候觸發(fā)復(fù)位。

20.演示效果
設(shè)置每過(guò)1s打印一次當(dāng)前時(shí)間,分別設(shè)置喂狗和不喂狗,結(jié)果如下。
延遲1s的計(jì)數(shù)為1s/341.33us=2930,打印為13460,由于是向下計(jì)數(shù),16384-2930=13554,符合計(jì)算值。
當(dāng)不執(zhí)行喂狗時(shí)候,計(jì)數(shù)值到0時(shí)會(huì)進(jìn)行復(fù)位,2個(gè)復(fù)位之間為5.595s,符合計(jì)算的5.59s。


21.完整代碼
#include "hal_data.h"
#include
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
fsp_err_t err = FSP_SUCCESS;
volatile bool uart_send_complete_flag = false;
void user_uart_callback (uart_callback_args_t * p_args)
{
if(p_args->event == UART_EVENT_TX_COMPLETE)
{
uart_send_complete_flag = true;
}
}
#ifdef __GNUC__ //串口重定向
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
err = R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&ch, 1);
if(FSP_SUCCESS != err) __BKPT();
while(uart_send_complete_flag == false){}
uart_send_complete_flag = false;
return ch;
}
int _write(int fd,char *pBuffer,int size)
{
for(int i=0;ievent == RTC_EVENT_PERIODIC_IRQ)
rtc_flag=1;
}
void hal_entry(void)
{
/* TODO: add your own code here */
err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);
assert(FSP_SUCCESS == err);
/* Initialize the RTC module*/
err = R_RTC_Open(&g_rtc0_ctrl, &g_rtc0_cfg);
/* Handle any errors. This function should be defined by the user. */
assert(FSP_SUCCESS == err);
/* Set the periodic interrupt rate to 1 second */
R_RTC_PeriodicIrqRateSet(&g_rtc0_ctrl, RTC_PERIODIC_IRQ_SELECT_1_SECOND);
/* (Optional) Enable the WDT to count and generate NMI or reset when the
* debugger is connected. */
R_DEBUG->DBGSTOPCR_b.DBGSTOP_WDT = 0;
/* (Optional) Check if the WDTRF flag is set to know if the system is
* recovering from a WDT reset. */
if (R_SYSTEM->RSTSR1_b.WDTRF)
{
/* Clear the flag. */
R_SYSTEM->RSTSR1 = 0U;
}
/* Open the module. */
err = R_WDT_Open(&g_wdt0_ctrl, &g_wdt0_cfg);
/* Handle any errors. This function should be defined by the user. */
assert(FSP_SUCCESS == err);
/* In register start mode, start the watchdog by calling R_WDT_Refresh. */
err = R_WDT_Refresh(&g_wdt0_ctrl);
assert(FSP_SUCCESS == err);
printf("starting up !\n");
uint32_t wdt_counter = 0U;
while(1)
{
if(rtc_flag)
{
/* Read the current WDT counter value. */
err = R_WDT_CounterGet(&g_wdt0_ctrl, &wdt_counter);
assert(FSP_SUCCESS == err);
printf("wdt_counter=%d\n",wdt_counter);
rtc_flag=0;
/* Refresh before the counter underflows to prevent reset or NMI. */
err = R_WDT_Refresh(&g_wdt0_ctrl);
assert(FSP_SUCCESS == err);
}
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
};i++)>
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
mcu
+關(guān)注
關(guān)注
147文章
18924瀏覽量
398041 -
ARM
+關(guān)注
關(guān)注
135文章
9552瀏覽量
391855 -
嵌入式
+關(guān)注
關(guān)注
5198文章
20442瀏覽量
333986 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
26文章
6289瀏覽量
118054
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
【瑞薩FPB-RA6E2試用】Zephyr看門(mén)狗(WDT)機(jī)制
程序卡死未按時(shí)喂狗,看門(mén)狗就會(huì)直接切斷并復(fù)位MCU的電源軌,讓系統(tǒng)重啟。
在傳統(tǒng)的裸機(jī)開(kāi)發(fā)中,配置看門(mén)狗需要翻閱芯片手冊(cè),操作復(fù)雜的控制寄存器和分頻器。而在Zephyr中,無(wú)論底層是瑞薩
發(fā)表于 02-20 10:35
瑞薩RL78/F22 MCU基于e2studio開(kāi)發(fā)環(huán)境創(chuàng)建觸摸應(yīng)用樣例工程
瑞薩RL78/F22 MCU基于e2studio開(kāi)發(fā)環(huán)境創(chuàng)建觸摸應(yīng)用樣例工程
【瑞薩FPB-RA6E2試用】【瑞薩FPB-RA6E2】看門(mén)狗(Watchdog Timer, WDT)個(gè)人理解及資料整理
【瑞薩FPB-RA6E2】看門(mén)狗(Watchdog Timer, WDT)個(gè)人理解及資料整理
瑞
發(fā)表于 01-14 11:09
【瑞薩RA × Zephyr評(píng)測(cè)】多線程和看門(mén)狗
本文章旨在評(píng)估使用 Zephyr RTOS 在 Renesas FPB-RA6E2 開(kāi)發(fā)板上實(shí)現(xiàn)多線程調(diào)度與硬件看門(mén)狗功能的應(yīng)用。評(píng)估內(nèi)容包括任務(wù)調(diào)度、看門(mén)狗初始化流程、主程序邏輯的詳細(xì)解析,以及實(shí)驗(yàn)現(xiàn)象與數(shù)據(jù)分析。
【瑞薩FPB-RA6E2試用】【原創(chuàng)】【瑞薩RA × Zephyr開(kāi)發(fā)板評(píng)測(cè)】WDT功能測(cè)試
;g_wdt0_ctrl);
}
看門(mén)狗中斷回調(diào)函數(shù):
void wdt_callback (wdt_callback_args_t * p_args){
(void) p_args
發(fā)表于 01-07 18:07
瑞芯微(EASY EAI)RV1126B看門(mén)狗
1.查看看門(mén)狗資源通過(guò)ls命令,即可查看系統(tǒng)有多少個(gè)看門(mén)狗節(jié)點(diǎn)ls/dev/watchdog*2.快速上手2.1開(kāi)發(fā)環(huán)境準(zhǔn)備如果您初次閱讀此文檔,請(qǐng)閱讀《入門(mén)指南/開(kāi)發(fā)環(huán)境準(zhǔn)備/Easy-Eai編譯
“喂狗”的藝術(shù):看門(mén)狗不叫,才是系統(tǒng)好
看門(mén)狗選哪只好呢? 中間那只看起來(lái)不錯(cuò)。 咳咳搞錯(cuò)了,自動(dòng)化項(xiàng)目中說(shuō)的看門(mén)狗是PLC的看門(mén)狗,那這個(gè)狗有什么用呢?難道真的是看大門(mén)的狗?
小安派BW21-CBV-Kit入門(mén)教程之看門(mén)狗簡(jiǎn)介
這是一個(gè)簡(jiǎn)單的看門(mén)狗定時(shí)器(WDT)示例,演示了看門(mén)狗 API 的用法。 有關(guān)看門(mén)狗的定義和工作原理,請(qǐng)參閱以下信息。
如果 NUC505 的 WDT(看門(mén)狗定時(shí)器)重置無(wú)法正常工作,怎么解決?
如果 NUC505 的 WDT(看門(mén)狗定時(shí)器)重置無(wú)法正常工作,用戶該怎么辦?
發(fā)表于 08-28 06:56
如果在配置位中啟用了看門(mén)狗(WDT)功能,是否會(huì)影響ISP升級(jí)過(guò)程呢?
如果在配置位中啟用了看門(mén)狗 (WDT) 功能,則看門(mén)狗將自動(dòng)啟動(dòng)。默認(rèn)時(shí)鐘源是內(nèi)部低速10 kHz時(shí)鐘。復(fù)位時(shí)間 = 溢出時(shí)間延遲時(shí)間
= (2 ^ 18 1026) /10k=26.
發(fā)表于 08-18 08:26
TPS3430 具有可編程復(fù)位延遲的窗口看門(mén)狗定時(shí)器數(shù)據(jù)手冊(cè)
TPS3430 是一款獨(dú)立的窗口看門(mén)狗定時(shí)器,具有可編程看門(mén)狗窗口和可編程看門(mén)狗復(fù)位延遲,適用于各種應(yīng)用。TPS3430窗口看門(mén)狗可實(shí)現(xiàn) 2.5% 的定時(shí)精度(25°C 時(shí)的典型值),
什么是看門(mén)狗?這樣的看門(mén)狗,你想領(lǐng)養(yǎng)一條嗎? #看門(mén)狗復(fù)位芯片 #WDT芯片 #單片機(jī)復(fù)位 #單片機(jī)方案
看門(mén)狗
英銳恩科技
發(fā)布于 :2025年03月27日 14:41:50
【瑞薩RA2L1入門(mén)學(xué)習(xí)】+e2_studio軟件安裝及使用
一、e2_studio軟件安裝及使用
注冊(cè)e2 studio | Renesas 瑞薩電子
下載軟件
安裝
4.創(chuàng)建工程
更改工程位置
新
發(fā)表于 03-27 13:25
e2studio和Keil簡(jiǎn)介及如何安裝e2studio開(kāi)發(fā)環(huán)境
(簡(jiǎn)稱(chēng)為e2或e2s)是瑞薩電子的一款包含代碼開(kāi)發(fā)、構(gòu)建和調(diào)試的開(kāi)發(fā)工具。e2studio基于開(kāi)
看門(mén)狗,你真的會(huì)用嗎?
嵌入式系統(tǒng)開(kāi)發(fā)中,看門(mén)狗是一種重要的機(jī)制,用于在程序異常時(shí)自動(dòng)重啟系統(tǒng),保障其穩(wěn)定性。本文將深入探討看門(mén)狗及其在程序穩(wěn)定性中的作用,幫助您更好地理解和應(yīng)用看門(mén)狗技術(shù)。看門(mén)狗首先需要明確
瑞薩e2studio----看門(mén)狗WDT
評(píng)論