女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

第二十四章 WWDG——窗口看門狗

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-06-20 14:00 ? 次閱讀

單芯片解決方案,開啟全新體驗(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 提供了兩種選擇: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è)控制中多樣化的連接需求,無論是與各類傳感器、執(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ǎng)頁,我們期待與您共同探索W55MH32的無限可能。

wKgZPGgbOfaANhwzACodXd3sVzg463.png

第二十四章 WWDG——窗口看門狗

本章參考資料:《W55MH32參考手冊(cè)》WWDG章節(jié)。

學(xué)習(xí)本章時(shí),配合《W55MH32參考手冊(cè)》WWDG章節(jié)一起閱讀,效果會(huì)更佳,特別是涉及到寄存器說明的部分。

1 WWDG簡(jiǎn)介

W55MH32有兩個(gè)看門狗,一個(gè)是獨(dú)立看門狗,一個(gè)是窗口看門狗。我們知道獨(dú)立看門狗的工作原理就是一個(gè)遞減計(jì)數(shù)器不斷的往下遞減計(jì)數(shù), 當(dāng)減到0之前如果沒有喂狗的話,產(chǎn)生復(fù)位。窗口看門狗跟獨(dú)立看門狗一樣,也是一個(gè)遞減計(jì)數(shù)器不斷的往下遞減計(jì)數(shù), 當(dāng)減到一個(gè)固定值0X40時(shí)還不喂狗的話,產(chǎn)生復(fù)位,這個(gè)值叫窗口的下限,是固定的值,不能改變。這個(gè)是跟獨(dú)立看門狗類似的地方, 不同的地方是窗口看門狗的計(jì)數(shù)器的值在減到某一個(gè)數(shù)之前喂狗的話也會(huì)產(chǎn)生復(fù)位,這個(gè)值叫窗口的上限,上限值由用戶獨(dú)立設(shè)置。 窗口看門狗計(jì)數(shù)器的值必須在上窗口和下窗口之間才可以喂狗,這就是窗口看門狗中窗口兩個(gè)字的含義。

wKgZPGgxNfOAWmAkAAD7Q_vjiJw399.png

RLR是重裝載寄存器,用來設(shè)置獨(dú)立看門狗的計(jì)數(shù)器的值。TR是窗口看門狗的計(jì)數(shù)器的值,由用戶獨(dú)立設(shè)置,WR是窗口看門狗的上窗口值,由用戶獨(dú)立設(shè)置。

2 WWDG功能框圖剖析

WWDG功能框圖如下:

wKgZO2gxNfOAXeTxAAEzTvg_vq0569.png

2.1 窗口看門狗時(shí)鐘

窗口看門狗時(shí)鐘來自PCLK1,PCLK1最大是108M,由RCC時(shí)鐘控制器開啟。

2.2 計(jì)數(shù)器時(shí)鐘

計(jì)數(shù)器時(shí)鐘由CK計(jì)時(shí)器時(shí)鐘經(jīng)過預(yù)分頻器分頻得到,分頻系數(shù)由配置寄存器CFR的位8:7 WDGTB[1:0]配置,可以是[0,1,2,3], 其中CK計(jì)時(shí)器時(shí)鐘=PCLK1/4096,除以4096是手冊(cè)規(guī)定的,沒有為什么。所以計(jì)數(shù)器的時(shí)鐘CNT_CK=PCLK1/4096/(2^WDGTB), 這就可以算出計(jì)數(shù)器減一個(gè)數(shù)的時(shí)間T= 1/CNT_CK = Tpclk1 * 4096 * (2^WDGTB)。

2.3 計(jì)數(shù)器

窗口看門狗的計(jì)數(shù)器是一個(gè)遞減計(jì)數(shù)器,共有7位,其值存在控制寄存器CR的位6:0,即T[6:0],當(dāng)7個(gè)位全部為1時(shí)是0X7F, 這個(gè)是最大值,當(dāng)遞減到T6位變成0時(shí),即從0X40變?yōu)?X3F時(shí)候,會(huì)產(chǎn)生看門狗復(fù)位。這個(gè)值0X40是看門狗能夠遞減到的最小值, 所以計(jì)數(shù)器的值只能是:0X40~0X7F之間,實(shí)際上真正用來計(jì)數(shù)的是T[5:0]。當(dāng)遞減計(jì)數(shù)器遞減到0X40的時(shí)候,還不會(huì)馬上產(chǎn)生復(fù)位, 如果使能了提前喚醒中斷:CFR位9EWI置1,則產(chǎn)生提前喚醒中斷,如果真進(jìn)入了這個(gè)中斷的話,就說明程序肯定是出問題了, 那么在中斷服務(wù)程序里面我們就需要做最重要的工作,比如保存重要數(shù)據(jù),或者報(bào)警等,這個(gè)中斷我們也叫它死前中斷。

2.4 窗口值

我們知道窗口看門狗必須在計(jì)數(shù)器的值在一個(gè)范圍內(nèi)才可以喂狗,其中下窗口的值是固定的0X40,上窗口的值可以改變, 具體的由配置寄存器CFR的位6:0 W[6:0]設(shè)置。其值必須大于0X40,如果小于或者等于0X40就是失去了窗口的價(jià)值,而且也不能大于計(jì)數(shù)器的值, 所以必須得小于0X7F。那窗口值具體要設(shè)置成多大?這個(gè)得根據(jù)我們需要監(jiān)控的程序的運(yùn)行時(shí)間來決定。如果我們要監(jiān)控的程序段A運(yùn)行的時(shí)間為Ta, 當(dāng)執(zhí)行完這段程序之后就要進(jìn)行喂狗,如果在窗口時(shí)間內(nèi)沒有喂狗的話,那程序就肯定是出問題了。一般計(jì)數(shù)器的值TR設(shè)置成最大0X7F,窗口值為WR, 計(jì)數(shù)器減一個(gè)數(shù)的時(shí)間為T,那么時(shí)間:(TR-WR)*T應(yīng)該稍微小于Ta即可,這樣就能做到剛執(zhí)行完程序段A之后喂狗,起到監(jiān)控的作用,這樣也就可以算出WR的值是多少。

2.5 計(jì)算看門狗超時(shí)時(shí)間

wKgZPGgxNfOACWF2AAEoHEFyExU739.png

這個(gè)圖來自數(shù)據(jù)手冊(cè),從圖我們知道看門狗超時(shí)時(shí)間:Twwdg = Tpclk1 x 4096 x 2^wdgtb x (T[5:0] + 1) ms, 當(dāng)PCLK1 = 36MHZ時(shí),WDGTB取不同的值時(shí)有最小和最大的超時(shí)時(shí)間,那這個(gè)最小和最大的超時(shí)時(shí)間該怎么理解,又是怎么算出來的? 講起來有點(diǎn)繞,這里我稍微講解下WDGTB=0時(shí)是怎么算的。遞減計(jì)數(shù)器有7位T[6:0] ,當(dāng)位6變?yōu)?的時(shí)候就會(huì)產(chǎn)生復(fù)位,實(shí)際上有效的計(jì)數(shù)位是T[5:0], 而且T6必須先設(shè)置為1。如果T[5:0]=0時(shí),遞減計(jì)數(shù)器再減一次,就產(chǎn)生復(fù)位了, 那這減一的時(shí)間就等于計(jì)數(shù)器的周期=1/CNT_CK = Tpclk1 * 4096 * (2^WDGTB) = 1/36 * 4096 *2^0 =113.7us, 這個(gè)就是最短的超時(shí)時(shí)間。如果T[5:0]全部裝滿為1,即63,當(dāng)他減到0X40變成0X3F時(shí),所需的時(shí)間就是最大的超時(shí)時(shí)間=113.7*2^5=113.7*64=7.2768ms。 同理,當(dāng)WDGTB等于1/2/3時(shí),代入公式即可。

3 WWDG使用方法

WWDG一般被用來監(jiān)測(cè),由外部干擾或不可預(yù)見的邏輯條件造成的應(yīng)用程序背離正常的運(yùn)行序列而產(chǎn)生的軟件故障。比如一個(gè)程序段正常運(yùn)行的時(shí)間是50ms, 在運(yùn)行完這個(gè)段程序之后緊接著進(jìn)行喂狗,如果在規(guī)定的時(shí)間窗口內(nèi)還沒有喂狗,那就說明我們監(jiān)控的程序出故障了,跑飛了,那么就會(huì)產(chǎn)生系統(tǒng)復(fù)位,讓程序重新運(yùn)行。

4 WWDG的中斷測(cè)試

4.1 代碼解析

主要用于進(jìn)行窗口看門狗(WWDG)的中斷測(cè)試。以下是對(duì)代碼各部分的詳細(xì)解釋:

1.頭文件包含

#include 
#include 
#include 
#include "delay.h"
#include "w55mh32.h"

stdlib.h、string.h 和 stdio.h 是標(biāo)準(zhǔn) C 庫頭文件,分別提供通用工具函數(shù)、字符串操作函數(shù)和標(biāo)準(zhǔn)輸入輸出功能。

delay.h 是自定義頭文件,可能用于實(shí)現(xiàn)延時(shí)功能。

w55mh32.h 是頭文件。

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);
void    NVIC_Configuration(void);

UART_Configuration()函數(shù)用于配置串口通信,參數(shù) bound 為波特率。

GetCmd()函數(shù)用于從串口接收數(shù)據(jù)。

NVIC_Configuration()函數(shù)用于配置嵌套向量中斷控制器(NVIC)。

4. main()函數(shù)

int main(void)
{
    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 Int Test.n");
    printf("Interrupt Feed Dogn");

    WWDG_SetPrescaler(WWDG_Prescaler_8);
    WWDG_SetWindowValue(0x5F);
    WWDG_Enable(0x7f);

    WWDG_ClearFlag();
    NVIC_Configuration();
    WWDG_EnableIT();

    while (1);
}

定義 RCC_ClocksTypeDef 類型的變量 clocks,用于存儲(chǔ)系統(tǒng)時(shí)鐘頻率信息。

使能窗口看門狗(WWDG)的時(shí)鐘。

調(diào)用 delay_init()函數(shù)初始化延時(shí)功能。

調(diào)用 UART_Configuration()函數(shù)配置串口通信,波特率為 115200。

調(diào)用 RCC_GetClocksFreq()函數(shù)獲取系統(tǒng)時(shí)鐘頻率信息,并通過串口輸出。

輸出提示信息,表明進(jìn)行窗口看門狗中斷測(cè)試以及采用中斷方式喂狗。

配置窗口看門狗的預(yù)分頻器、窗口值,并使能窗口看門狗。

清除窗口看門狗的標(biāo)志位。

調(diào)用 NVIC_Configuration()函數(shù)配置 NVIC。

使能窗口看門狗的中斷功能。

進(jìn)入無限循環(huán),程序在此處暫停。

5. WWDG_IRQHandler()函數(shù)

void WWDG_IRQHandler(void)
{
    WWDG_SetCounter(0x7f);
    WWDG_ClearFlag();
}

這是窗口看門狗的中斷服務(wù)函數(shù)。當(dāng)窗口看門狗產(chǎn)生中斷時(shí),會(huì)執(zhí)行該函數(shù)。函數(shù)中:

將窗口看門狗的計(jì)數(shù)器值設(shè)置為 0x7f,即喂狗操作,防止系統(tǒng)復(fù)位。

清除窗口看門狗的標(biāo)志位,以便能處理下一次中斷。

6. NVIC_Configuration()函數(shù)

void NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel                   = WWDG_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 3;
    NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

7. 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);
}

此函數(shù)用于配置 USART1 串口通信,具體步驟如下:

使能 USART1 和 GPIOA 的時(shí)鐘。

配置 GPIOA 的 Pin9 為復(fù)用推挽輸出模式,作為 USART1 的發(fā)送引腳。

配置 GPIOA 的 Pin10 為浮空輸入模式,作為 USART1 的接收引腳。

配置 USART1 的波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位、硬件流控制和工作模式。

初始化 USART1 并使能。

8. GetCmd()函數(shù)

uint8_t GetCmd(void)
{
    uint8_t tmp = 0;

    if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE))
    {
        tmp = USART_ReceiveData(USART1);
    }
    return tmp;
}

該函數(shù)用于從 USART1 接收數(shù)據(jù)。若接收緩沖區(qū)非空標(biāo)志位 USART_FLAG_RXNE 被置位,則從接收緩沖區(qū)讀取數(shù)據(jù)并返回。

9. 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;
}

此函數(shù)用于向 USART1 發(fā)送單個(gè)字符。等待發(fā)送完成標(biāo)志位 USART_FLAG_TC 被置位后,將字符寫入發(fā)送緩沖區(qū)并返回該字符。

10. fputc()函數(shù)

int fputc(int c, FILE *f)
{
    if (c == 'n')
    {
        SER_PutChar('r');
    }
    return (SER_PutChar(c));
}

這是標(biāo)準(zhǔn)庫 fputc()函數(shù)的重定向?qū)崿F(xiàn),用于將字符輸出到串口。若要輸出的字符為換行符 n,先輸出回車符 r,再輸出換行符。

4.2 下載驗(yàn)證

該程序的主要功能是配置串口通信,輸出系統(tǒng)時(shí)鐘頻率信息,同時(shí)使能窗口看門狗的中斷功能,并通過中斷服務(wù)函數(shù)進(jìn)行喂狗操作,以防止系統(tǒng)復(fù)位。

wKgZO2gxNfOAWoi6AADCSu3WNBI189.png

如果想要了解確認(rèn)這段代碼是否在正確執(zhí)行“喂狗”(即重置WWDG計(jì)數(shù)器),在 WWDG_IRQHandler 中斷處理函數(shù)中添加串口打印語句,每次觸發(fā)中斷時(shí)輸出調(diào)試信息。

修改代碼:

void WWDG_IRQHandler(void)
{
    WWDG_SetCounter(0x7f);  // 喂狗
    WWDG_ClearFlag();       // 清除中斷標(biāo)志
    printf("[WWDG] Feed dog! Counter reset to 0x7Fn"); // 添加調(diào)試輸出
}

然后查看串口打印數(shù)據(jù),查看到正在執(zhí)行“喂狗”:

wKgZO2gxNfOAWoi6AADCSu3WNBI189.png

5 WWDG_Reset

5.1 代碼解析

1. 頭文件和全局變量

#include 
#include 
#include 
#include "delay.h"
#include "w55mh32.h"

USART_TypeDef *USART_TEST = USART1;

包含了標(biāo)準(zhǔn)庫和自定義的頭文件。

USART_TEST 是一個(gè)指向 USART1 的指針,用于后續(xù)串口操作。

2. 函數(shù)聲明

void    UART_Configuration(uint32_t bound);
uint8_t GetCmd(void);

UART_Configuration()函數(shù)用于配置串口通信。

GetCmd()函數(shù)用于從串口接收數(shù)據(jù)。

3. main()函數(shù)

int main(void)
{
    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);

    while (1);
}

時(shí)鐘和外設(shè)初始化:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE) 使能窗口看門狗(WWDG)的時(shí)鐘。

delay_init() 初始化延時(shí)函數(shù)。

UART_Configuration(115200) 配置串口通信,波特率為 115200。

RCC_GetClocksFreq(&clocks) 獲取系統(tǒng)時(shí)鐘頻率信息。

串口輸出信息:

通過 printf()函數(shù)輸出系統(tǒng)時(shí)鐘頻率信息和測(cè)試提示信息。

窗口看門狗配置:

WWDG_SetPrescaler(WWDG_Prescaler_8) 設(shè)置窗口看門狗的預(yù)分頻器為 8。

WWDG_SetWindowValue(0x5F) 設(shè)置窗口值為 0x5F。

WWDG_Enable(0x7f) 使能窗口看門狗,初始計(jì)數(shù)值為 0x7f。

主循環(huán):

while (1); 程序進(jìn)入無限循環(huán),由于沒有對(duì)窗口看門狗進(jìn)行喂狗操作,一段時(shí)間后窗口看門狗會(huì)觸發(fā)復(fù)位。

4. 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í)鐘。

配置 PA9 為復(fù)用推挽輸出,作為串口發(fā)送引腳;配置 PA10 為浮空輸入,作為串口接收引腳。

配置串口的波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)等參數(shù)。

初始化串口并使能。

5. GetCmd()函數(shù)

uint8_t GetCmd(void)
{
    uint8_t tmp = 0;

    if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE))
    {
        tmp = USART_ReceiveData(USART1);
    }
    return tmp;
}

檢查串口接收緩沖區(qū)是否有數(shù)據(jù)(USART_FLAG_RXNE 標(biāo)志位)。

如果有數(shù)據(jù),從串口接收一個(gè)字節(jié)的數(shù)據(jù)并返回。

6. SER_PutChar()和fputc()函數(shù)

int SER_PutChar(int ch)
{
    while (!USART_GetFlagStatus(USART_TEST, USART_FLAG_TC));
    USART_SendData(USART_TEST, (uint8_t)ch);

    return ch;
}

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));
}

SER_PutChar()函數(shù)用于通過串口發(fā)送一個(gè)字符,等待發(fā)送完成標(biāo)志位(USART_FLAG_TC)置位后再發(fā)送。

fputc()函數(shù)是 printf()函數(shù)的底層實(shí)現(xiàn),當(dāng)輸出換行符 n 時(shí),會(huì)先發(fā)送回車符 r,然后再發(fā)送字符。

這段代碼的主要目的是測(cè)試窗口看門狗的復(fù)位功能。程序啟動(dòng)后,會(huì)輸出系統(tǒng)時(shí)鐘信息和測(cè)試提示信息,然后配置并使能窗口看門狗。由于在主循環(huán)中沒有對(duì)窗口看門狗進(jìn)行喂狗操作,窗口看門狗會(huì)在一段時(shí)間后觸發(fā)復(fù)位,重新啟動(dòng)程序。同時(shí),代碼還實(shí)現(xiàn)了串口通信功能,用于輸出信息和接收數(shù)據(jù)。

5.2 下載驗(yàn)證

wKgZO2gxOBmAYfJvAACfwPvmtq8647.jpg


WIZnet 是一家無晶圓廠半導(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ó)和日本除外)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6066

    文章

    44946

    瀏覽量

    648369
  • 看門狗
    +關(guān)注

    關(guān)注

    10

    文章

    581

    瀏覽量

    71639
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5590

    瀏覽量

    103217
  • WWDG
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    5742
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    淺析窗口看門狗WWDG

    1.窗口看門狗WWDG):通常被用來監(jiān)測(cè)由外部干擾或不可預(yù)見的邏輯條件造成的應(yīng)用程序背離正常的運(yùn)行序列而產(chǎn)生的軟件故障。2.窗口看門狗
    發(fā)表于 08-02 10:41

    介紹窗口看門狗WWDG

    一、看門狗介紹窗口看門狗WWDG)也是程序中用的比較多的,通常被用來監(jiān)測(cè)由外部干擾或不可預(yù)見的邏輯條件造成的應(yīng)用程序背離正常的運(yùn)行序列而產(chǎn)生的軟件故障。
    發(fā)表于 08-02 08:32

    WWDG窗口看門狗的實(shí)驗(yàn)步驟

    實(shí)驗(yàn)步驟:1、使能窗口看門狗時(shí)鐘(※)2、設(shè)置窗口值, 分頻數(shù) 和計(jì)數(shù)器 初始值(※)3、開啟WWDG(※)4、喂狗(WWDG 的喂狗操作實(shí)
    發(fā)表于 08-02 06:12

    有關(guān)窗口看門狗WWDG)的基本知識(shí)匯總

    窗口看門狗的主要特性是什么?窗口看門狗WWDG)有哪些功能?如何去計(jì)算窗口
    發(fā)表于 08-09 06:34

    如何防止窗口看門狗WWDG)復(fù)位

    什么是窗口看門狗窗口看門狗的作用有哪些?如何防止窗口看門狗
    發(fā)表于 08-12 07:33

    窗口看門狗WWDG)庫函數(shù)配置有哪些步驟

    窗口看門狗WWDG)是如何工作的?窗口看門狗WWDG)有哪些相關(guān)的寄存器?
    發(fā)表于 08-16 06:04

    獨(dú)立看門狗IWDG與窗口看門狗WWDG的區(qū)別在哪

    怎樣去配置獨(dú)立看門狗IWDG?如何去啟動(dòng)窗口看門狗WWDG?獨(dú)立看門狗IWDG與窗口
    發(fā)表于 09-26 09:22

    STM32看門狗配置(獨(dú)立看門狗IWDG和窗口看門狗WWDG

    stm32自帶兩個(gè)看門狗模塊,獨(dú)立看門狗IWDG和窗口看門狗WWDG看門狗主要作用是可用來檢測(cè)
    發(fā)表于 11-09 17:17 ?8577次閱讀
    STM32<b class='flag-5'>看門狗</b>配置(獨(dú)立<b class='flag-5'>看門狗</b>IWDG和<b class='flag-5'>窗口</b><b class='flag-5'>看門狗</b><b class='flag-5'>WWDG</b>)

    STM32有兩個(gè)看門狗,獨(dú)立看門狗窗口看門狗

    窗口看門狗的上窗口就是配置寄存器WWDG->CFR里設(shè)定的W[6:0];下窗口是固定的0x40;當(dāng)窗口
    的頭像 發(fā)表于 06-15 09:02 ?5038次閱讀
    STM32有兩個(gè)<b class='flag-5'>看門狗</b>,獨(dú)立<b class='flag-5'>看門狗</b>和<b class='flag-5'>窗口</b><b class='flag-5'>看門狗</b>

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

    基于STM32CubeMX 實(shí)現(xiàn)窗口看門狗 WWDG第一部分 基礎(chǔ)理論基礎(chǔ)理論部分主要參考 STM32F10X 參考手冊(cè)1. WWDG 簡(jiǎn)介(1)W
    發(fā)表于 11-01 16:24 ?10次下載
    【MCU】基于STM32CubeMX 實(shí)現(xiàn)<b class='flag-5'>窗口</b><b class='flag-5'>看門狗</b> <b class='flag-5'>WWDG</b>

    【STM32】窗口看門狗

    寄存器 (WWDG_CFR)5.3 狀態(tài)寄存器 (WWDG_SR)5.4 WWDG寄存器映射06. 附錄07. 聲明01. WWDG簡(jiǎn)介窗口
    發(fā)表于 12-08 10:36 ?8次下載
    【STM32】<b class='flag-5'>窗口</b><b class='flag-5'>看門狗</b>

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

    MCU學(xué)習(xí)筆記WWDG窗口看門狗1. WWDG窗口看門狗概述2. 寄存器和HAL庫函數(shù)配置3.
    發(fā)表于 12-08 17:51 ?7次下載
    MCU學(xué)習(xí)筆記_<b class='flag-5'>WWDG</b><b class='flag-5'>窗口</b><b class='flag-5'>看門狗</b>

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

    一、看門狗介紹窗口看門狗WWDG)也是程序中用的比較多的,通常被用來監(jiān)測(cè)由外部干擾或不可預(yù)見的邏輯條件造成的應(yīng)用程序背離正常的運(yùn)行序列而產(chǎn)生的軟件故障。
    發(fā)表于 12-09 16:51 ?11次下載
    STM32L051使用HAL庫操作實(shí)例(7)-(<b class='flag-5'>WWDG</b>)<b class='flag-5'>窗口</b><b class='flag-5'>看門狗</b>實(shí)驗(yàn)

    STM32窗口看門狗(WWDG)開源

    電子發(fā)燒友網(wǎng)站提供《STM32窗口看門狗(WWDG)開源.zip》資料免費(fèi)下載
    發(fā)表于 11-14 09:26 ?29次下載
    STM32<b class='flag-5'>窗口</b><b class='flag-5'>看門狗</b>(<b class='flag-5'>WWDG</b>)開源

    MM32F0140學(xué)習(xí)筆記——窗口看門狗(WWDG)

    MM32F0140學(xué)習(xí)筆記——窗口看門狗(WWDG)
    的頭像 發(fā)表于 10-27 09:45 ?953次閱讀
    MM32F0140學(xué)習(xí)筆記——<b class='flag-5'>窗口</b><b class='flag-5'>看門狗</b>(<b class='flag-5'>WWDG</b>)
    主站蜘蛛池模板: 汾西县| 德化县| 斗六市| 阜新| 宁夏| 右玉县| 馆陶县| 普兰县| 报价| 博爱县| 枝江市| 林芝县| 武乡县| 亚东县| 商河县| 年辖:市辖区| 绥德县| 郎溪县| 田东县| 广宗县| 三门峡市| 涿州市| 普兰店市| 晋江市| 阳江市| 哈密市| 土默特右旗| 吉安市| 凤山县| 罗江县| 饶平县| 安多县| 城步| 遵义市| 林周县| 凯里市| 梅河口市| 新干县| 浏阳市| 卢氏县| 新丰县|