單芯片解決方案,開啟全新體驗(yàn)——W55MH32 高性能以太網(wǎng)單片機(jī)
W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶帶來前所未有的集成化體驗(yàn)。這顆芯片將強(qiáng)大的組件集于一身,具體來說,一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達(dá)216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲(chǔ)與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨(dú)立的32KB以太網(wǎng)收發(fā)緩存,可供8個(gè)獨(dú)立硬件socket使用。如此配置,真正實(shí)現(xiàn)了All-in-One解決方案,為開發(fā)者提供極大便利。
在封裝規(guī)格上,W55MH32 提供了兩種選擇:QFN68和QFN100。
W55MH32Q采用QFN68封裝版本,尺寸為8x8mm,它擁有36個(gè)GPIO、3個(gè)ADC、12通道DMA、17個(gè)定時(shí)器、2個(gè)I2C、3個(gè)串口、2個(gè)SPI接口(其中1個(gè)帶I2S接口復(fù)用)、1個(gè)CAN以及1個(gè)USB2.0。在保持與同系列其他版本一致的核心性能基礎(chǔ)上,僅減少了部分GPIO以及SDIO接口,其他參數(shù)保持一致,性價(jià)比優(yōu)勢顯著,尤其適合網(wǎng)關(guān)模組等對空間布局要求較高的場景。緊湊的尺寸和精簡化外設(shè)配置,使其能夠在有限空間內(nèi)實(shí)現(xiàn)高效的網(wǎng)絡(luò)連接與數(shù)據(jù)交互,成為物聯(lián)網(wǎng)網(wǎng)關(guān)、邊緣計(jì)算節(jié)點(diǎn)等緊湊型設(shè)備的理想選擇。 同系列還有QFN100封裝的W55MH32L版本,該版本擁有更豐富的外設(shè)資源,適用于需要多接口擴(kuò)展的復(fù)雜工控場景,軟件使用方法一致。更多信息和資料請進(jìn)入http://www.w5500.com/網(wǎng)站或者私信獲取。
此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。
為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32Q這顆芯片,WIZnet精心打造了配套開發(fā)板。開發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實(shí)現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開發(fā)者全面評(píng)估芯片性能。
若您想獲取芯片和開發(fā)板的更多詳細(xì)信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價(jià)格等,歡迎訪問官方網(wǎng)頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

第九章 窗口看門狗(WWDG)
本章分為如下幾個(gè)小節(jié):
1 IWDG 簡介
2 IWDG 寄存器描述
3 程序設(shè)計(jì)
4 下載驗(yàn)證
1 WWDG簡介
窗口看門狗通常被用來監(jiān)測,由外部干擾或不可預(yù)見的邏輯條件造成的應(yīng)用程序背離正常的運(yùn)行序列而產(chǎn)生的軟件故障。除非遞減計(jì)數(shù)器的值在 T6 位變成 0 前被刷新,看門狗電路在達(dá)到預(yù)置的時(shí)間周期時(shí),會(huì)產(chǎn)生一個(gè) MCU 復(fù)位。在遞減計(jì)數(shù)器達(dá)到窗口寄存器數(shù)值之前,如果 7 位的遞減計(jì)數(shù)器數(shù)值(在控制寄存器中)被刷新,那么也將產(chǎn)生一個(gè) MCU 復(fù)位。這表明遞減計(jì)數(shù)器需要在一個(gè)有限的時(shí)間窗口中被刷新。
1.1 WWDG主要特性
- 可編程的自由運(yùn)行遞減計(jì)數(shù)器
- 條件復(fù)位
- 當(dāng)遞減計(jì)數(shù)器的值小于 0x40,(若看門狗被啟動(dòng))則產(chǎn)生復(fù)位。
- 當(dāng)遞減計(jì)數(shù)器在窗口外被重新裝載,(若看門狗被啟動(dòng))則產(chǎn)生復(fù)位。
- 如果啟動(dòng)了看門狗并且允許中斷,當(dāng)遞減計(jì)數(shù)器等于 0x40 時(shí)產(chǎn)生早期喚醒中斷(EWI),它可以被用于重裝載計(jì)數(shù)器以避免 WWDG 復(fù)位。
1.2 WWDG功能描述
如果看門狗被啟動(dòng)(WWDG_CR 寄存器中的 WDGA 位被置'1'),并且當(dāng) 7 位(T[6:0])遞減計(jì)數(shù)器從0x40 翻轉(zhuǎn)到 0x3F(T6 位清零)時(shí),則產(chǎn)生一個(gè)復(fù)位。如果軟件在計(jì)數(shù)器值大于窗口寄存器中的數(shù)值時(shí)重新裝載計(jì)數(shù)器,將產(chǎn)生一個(gè)復(fù)位。

看門狗框圖
應(yīng)用程序在正常運(yùn)行過程中必須定期地寫入 WWDG_CR 寄存器以防止 MCU 發(fā)生復(fù)位。只有當(dāng)計(jì)數(shù)器值小于窗口寄存器的值時(shí),才能進(jìn)行寫操作。儲(chǔ)存在 WWDG_CR 寄存器中的數(shù)值必須在 0xFF 和0xC0 之間:
- 啟動(dòng)看門狗
在系統(tǒng)復(fù)位后,看門狗總是處于關(guān)閉狀態(tài),設(shè)置 WWDG_CR 寄存器的 WDGA 位能夠開啟看門狗,隨后它不能再被關(guān)閉,除非發(fā)生復(fù)位。
- 控制遞減計(jì)數(shù)器
遞減計(jì)數(shù)器處于自由運(yùn)行狀態(tài),即使看門狗被禁止,遞減計(jì)數(shù)器仍繼續(xù)遞減計(jì)數(shù)。當(dāng)看門狗被啟用時(shí),T6 位必須被設(shè)置,以防止立即產(chǎn)生一個(gè)復(fù)位。T[5:0]位包含了看門狗產(chǎn)生復(fù)位之前的計(jì)時(shí)數(shù)目;復(fù)位前的延時(shí)時(shí)間在一個(gè)最小值和一個(gè)最大值之間變化,這是因?yàn)閷懭?WWDG_CR 寄存器時(shí),預(yù)分頻值是未知的。配置寄存器(WWDG_CFR)中包含窗口的上限值:要避免產(chǎn)生復(fù)位,遞減計(jì)數(shù)器必須在其值小于窗口寄存器的數(shù)值并且大于 0x3F 時(shí)被重新裝載,0 描述了窗口寄存器的工作過程。另一個(gè)重裝載計(jì)數(shù)器的方法是利用早期喚醒中斷(EWI)。設(shè)置 WWDG_CFR 寄存器中的 WEI 位開啟該中斷。當(dāng)遞減計(jì)數(shù)器到達(dá) 0x40 時(shí),則產(chǎn)生此中斷,相應(yīng)的中斷服務(wù)程序(ISR)可以用 來加載計(jì)數(shù)器以防止 WWDG 復(fù)位。在 WWDG_SR 寄存器中寫'0'可以清除該中斷。
注: 可以用 T6 位產(chǎn)生一個(gè)軟件復(fù)位(設(shè)置 WDGA 位為'1',T6 位為'0')。
1.3 如何編寫看門狗超時(shí)程序
可以使用 0 提供的公式計(jì)算窗口看門狗的超時(shí)時(shí)間。
警告:當(dāng)寫入 WWDG_CR 寄存器時(shí),始終置 T6 位為'1'以避免立即產(chǎn)生一個(gè)復(fù)位。

窗口看門狗時(shí)序圖
1.4 調(diào)試模式
當(dāng)微控制器進(jìn)入調(diào)試模式時(shí)(Cortex-M3 核心停止),根據(jù)調(diào)試模塊中的 DBG_WWDG_STOP 配置位的狀態(tài),WWDG 的計(jì)數(shù)器能夠繼續(xù)工作或停止。
2 寄存器描述
可以用半字(16 位)或字(32 位)的方式操作這些外設(shè)寄存器。
2.1 控制寄存器(WWDG_CR)
地址偏移量:0x00
復(fù)位值:0x0000 007F

2.2 配置寄存器(WWDG_CFR)
地址偏移量:0x04
復(fù)位值:0x0000 007F

2.3 狀態(tài)寄存器(WWDG_SR)
地址偏移量:0x08
復(fù)位值:0x0000 0000

2.4 WWDG寄存器映像
WWDG 寄存器映像和復(fù)位值

3 程序設(shè)計(jì)
3.1 WWDG_Int例程
這段代碼是基于 W55MH32 微控制器編寫的,主要用于演示窗口看門狗(WWDG)的中斷喂狗功能。窗口看門狗是一種特殊的看門狗,它有一個(gè)上窗口值和下窗口值,只有在計(jì)數(shù)器的值處于這兩個(gè)窗口值之間時(shí)喂狗才有效。該程序通過配置窗口看門狗和中斷,在窗口看門狗產(chǎn)生中斷時(shí)進(jìn)行喂狗操作,以防止系統(tǒng)復(fù)位。
1. 系統(tǒng)啟動(dòng)階段
系統(tǒng)上電或復(fù)位后,程序開始執(zhí)行。首先會(huì)初始化各種外設(shè)和窗口看門狗,然后通過串口輸出系統(tǒng)時(shí)鐘頻率信息和提示信息。
2.正常運(yùn)行階段
// 窗口看門狗配置(在main函數(shù)中)
WWDG_SetPrescaler(WWDG_Prescaler_8); // 設(shè)置預(yù)分頻值
WWDG_SetWindowValue(0x5F); // 設(shè)置窗口上限值
WWDG_Enable(0x7f); // 使能看門狗并設(shè)置初始值
// 中斷配置
WWDG_ClearFlag(); // 清除早期喚醒中斷標(biāo)志
NVIC_Configuration(); // 配置NVIC中斷優(yōu)先級(jí)
WWDG_EnableIT(); // 使能窗口看門狗中斷
// 窗口看門狗中斷處理函數(shù)
void WWDG_IRQHandler(void)
{
WWDG_SetCounter(0x7f); // 重置計(jì)數(shù)器值為0x7F(喂狗操作)
WWDG_ClearFlag(); // 清除中斷標(biāo)志
printf("[WWDG] Feed dog! Counter reset to 0x7Fn");
}
窗口看門狗開始工作,計(jì)數(shù)器從初始值 0x7F 開始遞減。
當(dāng)計(jì)數(shù)器的值遞減到窗口值 0x5F 時(shí),會(huì)觸發(fā)窗口看門狗中斷,進(jìn)入中斷處理函數(shù)WWDG_IRQHandler()。
在中斷處理函數(shù)中,計(jì)數(shù)器被重置為 0x7F,中斷標(biāo)志位被清除,然后繼續(xù)正常運(yùn)行。
只要中斷處理函數(shù)能夠及時(shí)響應(yīng)并進(jìn)行喂狗操作,系統(tǒng)將不會(huì)因?yàn)榇翱诳撮T狗超時(shí)而復(fù)位,會(huì)一直保持正常運(yùn)行狀態(tài)。
3. 異常情況
如果由于某種原因(如中斷處理函數(shù)被阻塞、系統(tǒng)死機(jī)等)導(dǎo)致中斷處理函數(shù)不能及時(shí)響應(yīng),計(jì)數(shù)器會(huì)繼續(xù)遞減到 0,此時(shí)窗口看門狗會(huì)產(chǎn)生復(fù)位信號(hào),使系統(tǒng)重新啟動(dòng),再次輸出系統(tǒng)時(shí)鐘頻率信息和提示信息。
3.1.1 下載驗(yàn)證
在燒錄完成后,串口會(huì)輸出系統(tǒng)時(shí)鐘頻率信息及“WWDG Int Test.”和“Interrupt Feed Dog”提示,窗口看門狗會(huì)周期性觸發(fā)中斷,在中斷處理函數(shù)中重新設(shè)置計(jì)數(shù)器和清除標(biāo)志以防止系統(tǒng)復(fù)位,而主函數(shù)進(jìn)入無限循環(huán),無其他明顯現(xiàn)象。

3.2 WWDG_Reset例程
此程序是基于 W55MH32 單片機(jī)開發(fā)的,其主要目的是開展窗口看門狗(WWDG)的復(fù)位測試,同時(shí)配置了串口通信用于輸出系統(tǒng)信息。
1.主函數(shù)main()
RCC_ClocksTypeDef clocks;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
delay_init();
UART_Configuration(115200);
RCC_GetClocksFreq(&clocks);
printf("n");
printf("SYSCLK: %3.1fMhz, HCLK: %3.1fMhz, PCLK1: %3.1fMhz, PCLK2: %3.1fMhz, ADCCLK: %3.1fMhzn",
(float)clocks.SYSCLK_Frequency / 1000000, (float)clocks.HCLK_Frequency / 1000000,
(float)clocks.PCLK1_Frequency / 1000000, (float)clocks.PCLK2_Frequency / 1000000, (float)clocks.ADCCLK_Frequency / 1000000);
printf("WWDG Reset Test.n");
WWDG_SetPrescaler(WWDG_Prescaler_8);
WWDG_SetWindowValue(0x5F);
WWDG_Enable(0x7f);
定義了RCC_ClocksTypeDef類型的變量clocks,用于存儲(chǔ)系統(tǒng)時(shí)鐘頻率信息。
使能窗口看門狗(WWDG)的時(shí)鐘。
調(diào)用delay_init函數(shù)進(jìn)行延時(shí)初始化。
調(diào)用UART_Configuration()函數(shù),以 115200 的波特率配置串口。
獲取系統(tǒng)時(shí)鐘頻率,并通過printf函數(shù)將系統(tǒng)時(shí)鐘頻率信息打印輸出。
打印 “WWDG Reset Test.” 信息。
對窗口看門狗進(jìn)行配置,設(shè)置預(yù)分頻器和窗口值,然后使能窗口看門狗。
進(jìn)入無限循環(huán)。
2. 串口配置函數(shù)UART_Configuration()
定義了GPIO_InitTypeDef和USART_InitTypeDef類型的結(jié)構(gòu)體變量。
使能USART1和GPIOA的時(shí)鐘。
對GPIOA的引腳 9 進(jìn)行配置,使其作為USART1的發(fā)送引腳(復(fù)用推挽輸出)。
對GPIOA的引腳 10 進(jìn)行配置,使其作為USART1的接收引腳(浮空輸入)。
對USART1進(jìn)行配置,設(shè)置波特率、數(shù)據(jù)位、停止位、校驗(yàn)位、硬件流控制和工作模式。
使能USART1。
3. 獲取串口數(shù)據(jù)函數(shù)GetCmd()
定義了一個(gè)無符號(hào) 8 位整型變量tmp。
檢查USART1的接收緩沖區(qū)是否非空,如果非空則讀取接收到的數(shù)據(jù)并賦值給tmp。
返回接收到的數(shù)據(jù)。
uint8_t GetCmd(void)
{
uint8_t tmp = 0;
if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE))
{
tmp = USART_ReceiveData(USART1);
}
return tmp;
}
4. 串口發(fā)送字符函數(shù)SER_PutChar()
等待USART_TEST的發(fā)送完成標(biāo)志位被置位。
發(fā)送一個(gè)字符到USART_TEST。
返回發(fā)送的字符。
5. 標(biāo)準(zhǔn)輸出重定向函數(shù)fputc()
若要輸出的字符是換行符n,則先發(fā)送回車符r。
調(diào)用SER_PutChar函數(shù)發(fā)送字符。
返回發(fā)送的字符。
3.2.1 下載驗(yàn)證
1. 正常下載情況
- 串口輸出信息:程序下載到單片機(jī)后,若一切正常,通過串口調(diào)試助手可以看到系統(tǒng)時(shí)鐘信息以及 WWDG Reset Test. 提示信息。
- 窗口看門狗復(fù)位:由于程序中沒有對窗口看門狗進(jìn)行喂狗操作,窗口看門狗計(jì)數(shù)器會(huì)不斷遞減。當(dāng)計(jì)數(shù)器值減到 0x3F 以下時(shí),單片機(jī)就會(huì)復(fù)位,然后重新開始執(zhí)行程序,串口會(huì)再次輸出系統(tǒng)時(shí)鐘信息和提示信息。

審核編輯 黃宇
-
單片機(jī)
+關(guān)注
關(guān)注
6061文章
44888瀏覽量
646334 -
看門狗
+關(guān)注
關(guān)注
10文章
579瀏覽量
71538 -
WWDG
+關(guān)注
關(guān)注
0文章
21瀏覽量
5710
發(fā)布評(píng)論請先 登錄
淺析窗口看門狗( WWDG)
窗口看門狗(WWDG)實(shí)驗(yàn) 精選資料分享
介紹窗口看門狗(WWDG)
功率放大電路問答第九章
STM32看門狗配置(獨(dú)立看門狗IWDG和窗口看門狗WWDG)

【MCU】基于STM32CubeMX 實(shí)現(xiàn)窗口看門狗 WWDG

MCU學(xué)習(xí)筆記_WWDG窗口看門狗

STM32L051使用HAL庫操作實(shí)例(7)-(WWDG)窗口看門狗實(shí)驗(yàn)

STM32窗口看門狗(WWDG)開源

第九章 數(shù)模和模數(shù)轉(zhuǎn)換

評(píng)論