單芯片解決方案,開啟全新體驗(yàn)——W55MH32 高性能以太網(wǎng)單片機(jī)
W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶帶來(lái)前所未有的集成化體驗(yàn)。這顆芯片將強(qiáng)大的組件集于一身,具體來(lái)說(shuō),一顆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 提供了兩種選擇:QFN100和QFN68。
W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復(fù)雜工控場(chǎng)景設(shè)計(jì)。它擁有66個(gè)GPIO、3個(gè)ADC、12通道DMA、17個(gè)定時(shí)器、2個(gè)I2C、5個(gè)串口、2個(gè)SPI接口(其中1個(gè)帶I2S接口復(fù)用)、1個(gè)CAN、1個(gè)USB2.0以及1個(gè)SDIO接口。如此豐富的外設(shè)資源,能夠輕松應(yīng)對(duì)工業(yè)控制中多樣化的連接需求,無(wú)論是與各類傳感器、執(zhí)行器的通信,還是對(duì)復(fù)雜工業(yè)協(xié)議的支持,都能游刃有余,成為復(fù)雜工控領(lǐng)域的理想選擇。 同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網(wǎng)關(guān)模組等場(chǎng)景,軟件使用方法一致。更多信息和資料請(qǐng)進(jìn)入網(wǎng)站或者私信獲取。
此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。
為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32L這顆芯片,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èn)官方網(wǎng)頁(yè),我們期待與您共同探索W55MH32的無(wú)限可能。
第二十三章 IWDG——獨(dú)立看門狗
本章參考資料:《W55MH32參考手冊(cè)》IWDG章節(jié)。
學(xué)習(xí)本章時(shí),配合《W55MH32參考手冊(cè)》IWDG章節(jié)一起閱讀,效果會(huì)更佳,特別是涉及到寄存器說(shuō)明的部分。
1 IWDG簡(jiǎn)介
W55MH32有兩個(gè)看門狗,一個(gè)是獨(dú)立看門狗另外一個(gè)是窗口看門狗,獨(dú)立看門狗號(hào)稱寵物狗,窗口看門狗號(hào)稱警犬,本章我們主要分析獨(dú)立看門狗的功能框圖和它的應(yīng)用。 獨(dú)立看門狗用通俗一點(diǎn)的話來(lái)解釋就是一個(gè)12位的遞減計(jì)數(shù)器,當(dāng)計(jì)數(shù)器的值從某個(gè)值一直減到0的時(shí)候,系統(tǒng)就會(huì)產(chǎn)生一個(gè)復(fù)位信號(hào),即IWDG_RESET。 如果在計(jì)數(shù)沒(méi)減到0之前,刷新了計(jì)數(shù)器的值的話,那么就不會(huì)產(chǎn)生復(fù)位信號(hào),這個(gè)動(dòng)作就是我們經(jīng)常說(shuō)的喂狗。看門狗功能由 VDD 電壓域供電, 在停止模式和待機(jī)模式下仍能工作。
2 IWDG功能框圖剖析
IWDG功能框圖如下:
2.1 獨(dú)立看門狗時(shí)鐘
獨(dú)立看門狗的時(shí)鐘由獨(dú)立的RC振蕩器LSI提供,即使主時(shí)鐘發(fā)生故障它仍然有效,非常獨(dú)立。LSI的頻率一般在30~60KHZ之間, 根據(jù)溫度和工作場(chǎng)合會(huì)有一定的漂移,我們一般取40KHZ,所以獨(dú)立看門狗的定時(shí)時(shí)間并不一定非常精確,只適用于對(duì)時(shí)間精度要求比較低的場(chǎng)合。
2.2 計(jì)數(shù)器時(shí)鐘
遞減計(jì)數(shù)器的時(shí)鐘由LSI經(jīng)過(guò)一個(gè)8位的預(yù)分頻器得到,我們可以操作預(yù)分頻器寄存器IWDG_PR來(lái)設(shè)置分頻因子, 分頻因子可以是:[4,8,16,32,64,128,256,256],計(jì)數(shù)器時(shí)鐘CK_CNT= 40/ 4*2^PRV,一個(gè)計(jì)數(shù)器時(shí)鐘計(jì)數(shù)器就減一。
2.3 計(jì)數(shù)器
獨(dú)立看門狗的計(jì)數(shù)器是一個(gè)12位的遞減計(jì)數(shù)器,最大值為0XFFF,當(dāng)計(jì)數(shù)器減到0時(shí),會(huì)產(chǎn)生一個(gè)復(fù)位信號(hào):IWDG_RESET, 讓程序重新啟動(dòng)運(yùn)行,如果在計(jì)數(shù)器減到0之前刷新了計(jì)數(shù)器的值的話,就不會(huì)產(chǎn)生復(fù)位信號(hào),重新刷新計(jì)數(shù)器值的這個(gè)動(dòng)作我們俗稱喂狗。
2.4 重裝載寄存器
重裝載寄存器是一個(gè)12位的寄存器,里面裝著要刷新到計(jì)數(shù)器的值,這個(gè)值的大小決定著獨(dú)立看門狗的溢出時(shí)間。 超時(shí)時(shí)間Tout = (4*2^prv) / 40 * rlv (s) ,prv是預(yù)分頻器寄存器的值,rlv是重裝載寄存器的值。
2.5 鍵寄存器
鍵寄存器IWDG_KR可以說(shuō)是獨(dú)立看門狗的一個(gè)控制寄存器,主要有三種控制方式,往這個(gè)寄存器寫入下面三個(gè)不同的值有不同的效果。
鍵值 | 鍵值作用 |
0XAAAAA | 把 RLR 的值重裝載到 CNT |
0X55555 | PR 和 RLR 這兩個(gè)寄存器可寫 |
0XCCCC | 啟動(dòng) IWDG |
通過(guò)寫往鍵寄存器寫0XCCC來(lái)啟動(dòng)看門狗是屬于軟件啟動(dòng)的方式,一旦獨(dú)立看門狗啟動(dòng),它就關(guān)不掉,只有復(fù)位才能關(guān)掉。
2.6 狀態(tài)寄存器
狀態(tài)寄存器SR只有位0:PVU和位1:RVU有效,這兩位只能由硬件操作,軟件操作不了。RVU:看門狗計(jì)數(shù)器重裝載值更新, 硬件置1表示重裝載值的更新正在進(jìn)行中,更新完畢之后由硬件清0。PVU:看門狗預(yù)分頻值更新,硬件置’1’指示預(yù)分頻值的更新正在進(jìn)行中, 當(dāng)更新完成后,由硬件清0。所以只有當(dāng)RVU/PVU等于0的時(shí)候才可以更新重裝載寄存器/預(yù)分頻寄存器。
3 IWDG使用方法
獨(dú)立看門狗一般用來(lái)檢測(cè)和解決由程序引起的故障,比如一個(gè)程序正常運(yùn)行的時(shí)間是50ms, 在運(yùn)行完這個(gè)段程序之后緊接著進(jìn)行喂狗,我們?cè)O(shè)置獨(dú)立看門狗的定時(shí)溢出時(shí)間為60ms,比我們需要監(jiān)控的程序50ms多一點(diǎn), 如果超過(guò)60ms還沒(méi)有喂狗,那就說(shuō)明我們監(jiān)控的程序出故障了,跑飛了,那么就會(huì)產(chǎn)生系統(tǒng)復(fù)位,讓程序重新運(yùn)行。
4 IWDG復(fù)位測(cè)試實(shí)驗(yàn)
4.1 代碼解析
主要用于在 W55MH32 微控制器上實(shí)現(xiàn)看門狗定時(shí)器(IWDG)復(fù)位測(cè)試,并通過(guò)串口進(jìn)行數(shù)據(jù)交互。下面為你詳細(xì)解釋代碼的各個(gè)部分:
1. 頭文件包含
#include #include #include #include "delay.h" #include "w55mh32.h"
stdlib.h、string.h 和 stdio.h 是標(biāo)準(zhǔn) C 庫(kù)的頭文件,分別提供了通用工具、字符串處理和輸入輸出的函數(shù)。
delay.h 可能是自定義的頭文件,用于實(shí)現(xiàn)延時(shí)功能。
w55mh32.h 可能是與特定硬件(如 W55MH32 芯片)相關(guān)的頭文件。
2. 全局變量定義
USART_TypeDef *USART_TEST = USART1;
定義了一個(gè)指向 USART_TypeDef 類型的指針 USART_TEST,并將其初始化為 USART1,這意味著后續(xù)的串口操作將使用 USART1。
3. 函數(shù)聲明
void UART_Configuration(uint32_t bound); uint8_t GetCmd(void);
UART_Configuration()函數(shù)用于配置串口,參數(shù) bound 表示波特率。
GetCmd()函數(shù)用于從串口接收數(shù)據(jù)。
4. main()函數(shù)
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() 初始化延時(shí)函數(shù)。
UART_Configuration(115200) 以 115200 的波特率配置串口。
RCC_GetClocksFreq(&clocks) 獲取系統(tǒng)時(shí)鐘頻率信息。
打印信息:
打印系統(tǒng)時(shí)鐘頻率信息。
提示進(jìn)行看門狗定時(shí)器復(fù)位測(cè)試,并告知用戶輸入 r 來(lái)喂狗。
看門狗定時(shí)器配置:
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable) 使能對(duì)看門狗定時(shí)器的寫訪問(wèn)。
IWDG_SetPrescaler(IWDG_Prescaler_64) 設(shè)置看門狗定時(shí)器的預(yù)分頻器為 64。
IWDG_SetReload(0x7FF) 設(shè)置看門狗定時(shí)器的重裝載值為 0x7FF。
IWDG_ReloadCounter() 重載看門狗定時(shí)器計(jì)數(shù)器。
IWDG_Enable() 使能看門狗定時(shí)器。
主循環(huán):
不斷調(diào)用 GetCmd() 函數(shù)獲取串口輸入。
如果輸入為 r,則調(diào)用 IWDG_ReloadCounter() 喂狗,并打印 “Feed Dog Success”。
5. UART_Configuration()函數(shù)
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 的時(shí)鐘。
配置 GPIOA 的引腳 9 為復(fù)用推挽輸出,用于 USART1 的發(fā)送;引腳 10 為浮空輸入,用于 USART1 的接收。
配置 USART1 的波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)等參數(shù)。
初始化 USART1 并使能。
6.GetCmd()函數(shù)
uint8_t GetCmd(void) { uint8_t tmp = 0; if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE)) { tmp = USART_ReceiveData(USART1); } return tmp; }
檢查 USART1 的接收緩沖區(qū)非空標(biāo)志位 USART_FLAG_RXNE。
如果標(biāo)志位被置位,說(shuō)明有數(shù)據(jù)到達(dá),從 USART1 接收數(shù)據(jù)并返回。
7. SER_PutChar()函數(shù)
int SER_PutChar(int ch) { while (!USART_GetFlagStatus(USART_TEST, USART_FLAG_TC)); USART_SendData(USART_TEST, (uint8_t)ch); return ch; }
等待 USART1 的發(fā)送完成標(biāo)志位 USART_FLAG_TC 被置位。
發(fā)送字符 ch 到 USART1。
8. fputc()函數(shù)
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)); }
重定向標(biāo)準(zhǔn)輸出函數(shù) fputc(),使其通過(guò)串口發(fā)送數(shù)據(jù)。
如果要發(fā)送的字符是換行符 n,則先發(fā)送回車符 r。
4.2 下載驗(yàn)證
這段代碼實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的看門狗定時(shí)器復(fù)位測(cè)試程序,通過(guò)串口與用戶交互,用戶可以輸入 r 來(lái)喂狗,避免看門狗定時(shí)器超時(shí)復(fù)位。
WIZnet 是一家無(wú)晶圓廠半導(dǎo)體公司,成立于 1998 年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術(shù),基于獨(dú)特的專利全硬連線 TCP/IP。iMCU? 面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。
WIZnet 在全球擁有 70 多家分銷商,在香港、韓國(guó)、美國(guó)設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營(yíng)銷。
香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國(guó)和日本除外)。
-
單片機(jī)
+關(guān)注
關(guān)注
6067文章
44961瀏覽量
648867 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3297瀏覽量
117603 -
IWDG
+關(guān)注
關(guān)注
0文章
23瀏覽量
5485 -
獨(dú)立看門狗
+關(guān)注
關(guān)注
0文章
25瀏覽量
4106
發(fā)布評(píng)論請(qǐng)先 登錄
獨(dú)立看門狗(IWDG)的基礎(chǔ)知識(shí)

MM32獨(dú)立看門狗(IWDG)
獨(dú)立看門狗(IWDG)
獨(dú)立看門狗( IWDG)和窗口看門狗( WWDG)
如何對(duì)獨(dú)立看門狗(IWDG)進(jìn)行配置
第二十三講 異步計(jì)數(shù)器

模擬電路網(wǎng)絡(luò)課件 第二十三節(jié):乙類雙電源互補(bǔ)對(duì)稱功率放大電路
2017中國(guó)西部微波射頻技術(shù)研討會(huì)暨第二十三屆國(guó)際電子測(cè)試測(cè)量研討會(huì)
STM32看門狗配置(獨(dú)立看門狗IWDG和窗口看門狗WWDG)

MCU學(xué)習(xí)筆記_IWDG獨(dú)立看門狗

【MCU】基于STM32CubeMX 實(shí)現(xiàn)獨(dú)立看門狗 IWDG

【正點(diǎn)原子FPGA連載】第二十三章RGB-LCD字符和圖片顯示實(shí)驗(yàn) -摘自【正點(diǎn)原子】新起點(diǎn)之FPGA開發(fā)指南_V2.1

STM32L051使用HAL庫(kù)操作實(shí)例(6)-(IWDG)獨(dú)立看門狗實(shí)驗(yàn)

評(píng)論