日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

独立看门狗---STM32----HAL

發布時間:2023/12/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 独立看门狗---STM32----HAL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本概念

看門狗解決的問題是什么?

在系統跑飛(程序異常執行)的情況,是系統復位,程序重新執行。

獨立看門狗適應用于需要看門狗作為一個在主程序之外能夠完全獨立工作,并且對時間精度要求低的場合。

工作原理

在鍵值寄存器中寫入0xCCCC,開始啟用獨立看門狗,此時計數器開始從其復位值遞減,當計數器值計數到0時會產生一個復位信號。
無論何時,只要在鍵值寄存器中寫入0xAAAA,重裝載寄存器的值就會重新加載到計數器,從而避免計數器到0,產生復位信號。如果程序異常,就無法往鍵值寄存器中寫入0xAAAA,重裝載寄存器的值無法加載到計數器中,計數器會減到0,從而產生一個系統復位信號。

獨立看門狗寄存器
  • IWDG_KR:鍵值寄存器,0~15位有效
  • IWDG_PR:預分頻寄存器,0-2位有效
  • IWDG_RLR:重裝載寄存器,0~11位有效
  • IWDG_SR:狀態寄存器,0~1位有效
獨立看門狗超時時間

Tout = ((4*2prer)rlr)/32

Tout:看門狗溢出時間,單位為ms
prer:預分頻值IWDG_PR
rlr:重裝載值(IWDG_RLR)

獨立看門狗操作步驟

  • 初始化看門狗:預分頻系數,重裝載值
  • HAL_IWDG_Init();
  • 啟用看門狗
  • HAL_IWDG_Start();
  • 喂狗
  • HAL_IWDG_Refresh();

    具體代碼

  • 初始化看門狗:預分頻系數,重裝載值
  • IWDG_HandleTypeDef iwdg_handler; void iwdg_init(void) {iwdg_handler.Instance = IWDG;iwdg_handler.Init.Prescaler = IWDG_PRESCALER_64; //設置預分頻寄存器 IWDG_PRiwdg_handler.Init.Reload = 500; //設置重裝載寄存器IWDG_RLRHAL_IWDG_Init(&iwdg_handler);HAL_IWDG_Start(&iwdg_handler); //啟用看門狗 }

    Prescaler = IWDG_PRESCALER_64;設置的是4*2^prer=64,Reload = 500設置的是rlr,注意IWDG_RLR重裝載寄存器,只有0~11位有效,不能超過寄存器存儲范圍。

  • 啟用看門狗,在第一步實現了
  • 喂狗,在main函數實現了
  • int main(void) {// u8 key;HAL_Init(); //初始化HAL庫 Stm32_Clock_Init(360,25,2,8); //設置時鐘,180Mhzdelay_init(180); //初始化延時函數uart_init(115200); //初始化USARTLED_Init(); //初始化LED KEY_Init(); //初始化按鍵delay_ms(100);iwdg_init();//HAL_IWDG_Start(&iwdg_handler); //啟用看門狗LED0 = 0;while(1){if(KEY_Scan(0)==KEY0_PRES){HAL_IWDG_Refresh(&iwdg_handler);//LED1 = !LED1;delay_ms(10);}} }

    總結

    以上是生活随笔為你收集整理的独立看门狗---STM32----HAL的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。