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

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

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

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

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

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

2.4 WWDG寄存器映像
WWDG 寄存器映像和復位值

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

3.2 WWDG_Reset例程
此程序是基于 W55MH32 單片機開發的,其主要目的是開展窗口看門狗(WWDG)的復位測試,同時配置了串口通信用于輸出系統信息。
1.主函數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,用于存儲系統時鐘頻率信息。
使能窗口看門狗(WWDG)的時鐘。
調用delay_init函數進行延時初始化。
調用UART_Configuration()函數,以 115200 的波特率配置串口。
獲取系統時鐘頻率,并通過printf函數將系統時鐘頻率信息打印輸出。
打印 “WWDG Reset Test.” 信息。
對窗口看門狗進行配置,設置預分頻器和窗口值,然后使能窗口看門狗。
進入無限循環。
2. 串口配置函數UART_Configuration()
定義了GPIO_InitTypeDef和USART_InitTypeDef類型的結構體變量。
使能USART1和GPIOA的時鐘。
對GPIOA的引腳 9 進行配置,使其作為USART1的發送引腳(復用推挽輸出)。
對GPIOA的引腳 10 進行配置,使其作為USART1的接收引腳(浮空輸入)。
對USART1進行配置,設置波特率、數據位、停止位、校驗位、硬件流控制和工作模式。
使能USART1。
3. 獲取串口數據函數GetCmd()
定義了一個無符號 8 位整型變量tmp。
檢查USART1的接收緩沖區是否非空,如果非空則讀取接收到的數據并賦值給tmp。
返回接收到的數據。
uint8_t GetCmd(void)
{
uint8_t tmp = 0;
if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE))
{
tmp = USART_ReceiveData(USART1);
}
return tmp;
}
4. 串口發送字符函數SER_PutChar()
等待USART_TEST的發送完成標志位被置位。
發送一個字符到USART_TEST。
返回發送的字符。
5. 標準輸出重定向函數fputc()
若要輸出的字符是換行符n,則先發送回車符r。
調用SER_PutChar函數發送字符。
返回發送的字符。
3.2.1 下載驗證
1. 正常下載情況
?串口輸出信息:程序下載到單片機后,若一切正常,通過串口調試助手可以看到系統時鐘信息以及 WWDG Reset Test. 提示信息。
?窗口看門狗復位:由于程序中沒有對窗口看門狗進行喂狗操作,窗口看門狗計數器會不斷遞減。當計數器值減到 0x3F 以下時,單片機就會復位,然后重新開始執行程序,串口會再次輸出系統時鐘信息和提示信息。

審核編輯 黃宇
-
單片機
+關注
關注
6067文章
44969瀏覽量
649180 -
以太網
+關注
關注
40文章
5619瀏覽量
175454 -
看門狗
+關注
關注
10文章
582瀏覽量
71701 -
WWDG
+關注
關注
0文章
21瀏覽量
5751
發布評論請先 登錄
STM32的內置看門狗WWDG-窗口看門狗CubeMX操作步驟
淺析窗口看門狗( WWDG)
STM32看門狗配置(獨立看門狗IWDG和窗口看門狗WWDG)

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

【MCU】基于STM32CubeMX 實現窗口看門狗 WWDG

第一章 W55MH32 高性能以太網單片機的學習方法概述

W55MH32高性能以太網單片機開發課件 第十四章 ADC(上篇)

評論