單芯片解決方案,開啟全新體驗——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 提供了兩種選擇:QFN100和QFN68。
W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復雜工控場景設計。它擁有66個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、5個串口、2個SPI接口(其中1個帶I2S接口復用)、1個CAN、1個USB2.0以及1個SDIO接口。如此豐富的外設資源,能夠輕松應對工業控制中多樣化的連接需求,無論是與各類傳感器、執行器的通信,還是對復雜工業協議的支持,都能游刃有余,成為復雜工控領域的理想選擇。 同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網關模組等場景,軟件使用方法一致。更多信息和資料請進入網站或者私信獲取。
此外,本W55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網絡通信安全再添保障。
為助力開發者快速上手與深入開發,基于W55MH32L這顆芯片,WIZnet精心打造了配套開發板。開發板集成WIZ-Link芯片,借助一根USB C口數據線,就能輕松實現調試、下載以及串口打印日志等功能。開發板將所有外設全部引出,拓展功能也大幅提升,便于開發者全面評估芯片性能。
若您想獲取芯片和開發板的更多詳細信息,包括產品特性、技術參數以及價格等,歡迎訪問官方網頁,我們期待與您共同探索W55MH32的無限可能。

第二十三章 IWDG——獨立看門狗
本章參考資料:《W55MH32參考手冊》IWDG章節。
學習本章時,配合《W55MH32參考手冊》IWDG章節一起閱讀,效果會更佳,特別是涉及到寄存器說明的部分。
1 IWDG簡介
W55MH32有兩個看門狗,一個是獨立看門狗另外一個是窗口看門狗,獨立看門狗號稱寵物狗,窗口看門狗號稱警犬,本章我們主要分析獨立看門狗的功能框圖和它的應用。 獨立看門狗用通俗一點的話來解釋就是一個12位的遞減計數器,當計數器的值從某個值一直減到0的時候,系統就會產生一個復位信號,即IWDG_RESET。 如果在計數沒減到0之前,刷新了計數器的值的話,那么就不會產生復位信號,這個動作就是我們經常說的喂狗。看門狗功能由 VDD 電壓域供電, 在停止模式和待機模式下仍能工作。
2 IWDG功能框圖剖析
IWDG功能框圖如下:

2.1 獨立看門狗時鐘
獨立看門狗的時鐘由獨立的RC振蕩器LSI提供,即使主時鐘發生故障它仍然有效,非常獨立。LSI的頻率一般在30~60KHZ之間, 根據溫度和工作場合會有一定的漂移,我們一般取40KHZ,所以獨立看門狗的定時時間并不一定非常精確,只適用于對時間精度要求比較低的場合。
2.2 計數器時鐘
遞減計數器的時鐘由LSI經過一個8位的預分頻器得到,我們可以操作預分頻器寄存器IWDG_PR來設置分頻因子, 分頻因子可以是:[4,8,16,32,64,128,256,256],計數器時鐘CK_CNT= 40/ 4*2^PRV,一個計數器時鐘計數器就減一。
2.3 計數器
獨立看門狗的計數器是一個12位的遞減計數器,最大值為0XFFF,當計數器減到0時,會產生一個復位信號:IWDG_RESET, 讓程序重新啟動運行,如果在計數器減到0之前刷新了計數器的值的話,就不會產生復位信號,重新刷新計數器值的這個動作我們俗稱喂狗。
2.4 重裝載寄存器
重裝載寄存器是一個12位的寄存器,里面裝著要刷新到計數器的值,這個值的大小決定著獨立看門狗的溢出時間。 超時時間Tout = (4*2^prv) / 40 * rlv (s) ,prv是預分頻器寄存器的值,rlv是重裝載寄存器的值。
2.5 鍵寄存器
鍵寄存器IWDG_KR可以說是獨立看門狗的一個控制寄存器,主要有三種控制方式,往這個寄存器寫入下面三個不同的值有不同的效果。
| 鍵值 | 鍵值作用 |
| 0XAAAAA | 把 RLR 的值重裝載到 CNT |
| 0X55555 | PR 和 RLR 這兩個寄存器可寫 |
| 0XCCCC | 啟動 IWDG |
通過寫往鍵寄存器寫0XCCC來啟動看門狗是屬于軟件啟動的方式,一旦獨立看門狗啟動,它就關不掉,只有復位才能關掉。
2.6 狀態寄存器
狀態寄存器SR只有位0:PVU和位1:RVU有效,這兩位只能由硬件操作,軟件操作不了。RVU:看門狗計數器重裝載值更新, 硬件置1表示重裝載值的更新正在進行中,更新完畢之后由硬件清0。PVU:看門狗預分頻值更新,硬件置’1’指示預分頻值的更新正在進行中, 當更新完成后,由硬件清0。所以只有當RVU/PVU等于0的時候才可以更新重裝載寄存器/預分頻寄存器。
3 IWDG使用方法
獨立看門狗一般用來檢測和解決由程序引起的故障,比如一個程序正常運行的時間是50ms, 在運行完這個段程序之后緊接著進行喂狗,我們設置獨立看門狗的定時溢出時間為60ms,比我們需要監控的程序50ms多一點, 如果超過60ms還沒有喂狗,那就說明我們監控的程序出故障了,跑飛了,那么就會產生系統復位,讓程序重新運行。
4 IWDG復位測試實驗
4.1 代碼解析
主要用于在 W55MH32 微控制器上實現看門狗定時器(IWDG)復位測試,并通過串口進行數據交互。下面為你詳細解釋代碼的各個部分:
1. 頭文件包含
#include #include #include #include "delay.h" #include "w55mh32.h"
stdlib.h、string.h 和 stdio.h 是標準 C 庫的頭文件,分別提供了通用工具、字符串處理和輸入輸出的函數。
delay.h 可能是自定義的頭文件,用于實現延時功能。
w55mh32.h 可能是與特定硬件(如 W55MH32 芯片)相關的頭文件。
2. 全局變量定義
USART_TypeDef *USART_TEST = USART1;
定義了一個指向 USART_TypeDef 類型的指針 USART_TEST,并將其初始化為 USART1,這意味著后續的串口操作將使用 USART1。
3. 函數聲明
void UART_Configuration(uint32_t bound); uint8_t GetCmd(void);
UART_Configuration()函數用于配置串口,參數 bound 表示波特率。
GetCmd()函數用于從串口接收數據。
4. main()函數
int main(void)
{
RCC_ClocksTypeDef clocks;
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("IWDG Reset Test.n");
printf("Please Input 'r', Feed Dogn");
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
IWDG_SetPrescaler(IWDG_Prescaler_64);
IWDG_SetReload(0x7FF);
IWDG_ReloadCounter();
IWDG_Enable();
while (1)
{
if (GetCmd() == 'r')
{
IWDG_ReloadCounter();
printf("Feed Dog Successn");
}
}
}
初始化部分:
delay_init() 初始化延時函數。
UART_Configuration(115200) 以 115200 的波特率配置串口。
RCC_GetClocksFreq(&clocks) 獲取系統時鐘頻率信息。
打印信息:
打印系統時鐘頻率信息。
提示進行看門狗定時器復位測試,并告知用戶輸入 r 來喂狗。
看門狗定時器配置:
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable) 使能對看門狗定時器的寫訪問。
IWDG_SetPrescaler(IWDG_Prescaler_64) 設置看門狗定時器的預分頻器為 64。
IWDG_SetReload(0x7FF) 設置看門狗定時器的重裝載值為 0x7FF。
IWDG_ReloadCounter() 重載看門狗定時器計數器。
IWDG_Enable() 使能看門狗定時器。
主循環:
不斷調用 GetCmd() 函數獲取串口輸入。
如果輸入為 r,則調用 IWDG_ReloadCounter() 喂狗,并打印 “Feed Dog Success”。
5. UART_Configuration()函數
void UART_Configuration(uint32_t bound)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = bound;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART_TEST, &USART_InitStructure);
USART_Cmd(USART_TEST, ENABLE);
}
使能 USART1 和 GPIOA 的時鐘。
配置 GPIOA 的引腳 9 為復用推挽輸出,用于 USART1 的發送;引腳 10 為浮空輸入,用于 USART1 的接收。
配置 USART1 的波特率、數據位、停止位、奇偶校驗等參數。
初始化 USART1 并使能。
6.GetCmd()函數
uint8_t GetCmd(void)
{
uint8_t tmp = 0;
if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE))
{
tmp = USART_ReceiveData(USART1);
}
return tmp;
}
檢查 USART1 的接收緩沖區非空標志位 USART_FLAG_RXNE。
如果標志位被置位,說明有數據到達,從 USART1 接收數據并返回。
7. SER_PutChar()函數
int SER_PutChar(int ch)
{
while (!USART_GetFlagStatus(USART_TEST, USART_FLAG_TC));
USART_SendData(USART_TEST, (uint8_t)ch);
return ch;
}
等待 USART1 的發送完成標志位 USART_FLAG_TC 被置位。
發送字符 ch 到 USART1。
8. fputc()函數
int fputc(int c, FILE *f)
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART */
if (c == 'n')
{
SER_PutChar('r');
}
return (SER_PutChar(c));
}
重定向標準輸出函數 fputc(),使其通過串口發送數據。
如果要發送的字符是換行符 n,則先發送回車符 r。
4.2 下載驗證
這段代碼實現了一個簡單的看門狗定時器復位測試程序,通過串口與用戶交互,用戶可以輸入 r 來喂狗,避免看門狗定時器超時復位。

WIZnet 是一家無晶圓廠半導體公司,成立于 1998 年。產品包括互聯網處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術,基于獨特的專利全硬連線 TCP/IP。iMCU? 面向各種應用中的嵌入式互聯網設備。
WIZnet 在全球擁有 70 多家分銷商,在香港、韓國、美國設有辦事處,提供技術支持和產品營銷。
香港辦事處管理的區域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。
-
單片機
+關注
關注
6076文章
45495瀏覽量
670276 -
定時器
+關注
關注
23文章
3368瀏覽量
123597 -
IWDG
+關注
關注
0文章
23瀏覽量
5815 -
獨立看門狗
+關注
關注
0文章
26瀏覽量
4488
發布評論請先 登錄
獨立看門狗(IWDG)的基礎知識
MM32獨立看門狗(IWDG)
獨立看門狗( IWDG)和窗口看門狗( WWDG)
第二十三講 異步計數器
STM32看門狗配置(獨立看門狗IWDG和窗口看門狗WWDG)
【MCU】基于STM32CubeMX 實現獨立看門狗 IWDG
【正點原子FPGA連載】第二十三章RGB-LCD字符和圖片顯示實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1
STM32L051使用HAL庫操作實例(6)-(IWDG)獨立看門狗實驗
第二十三章 IWDG——獨立看門狗
評論