(一)概述

stm32有两个看门狗:硬件看门狗(LSI 40KHz,时间精度不高)和窗口看门狗(APB1)。

(二)硬件看门狗实现代码

IWDG_HandleTypeDef hiwdg;// 硬件看门狗初始化
static void MX_IWDG_Init(IWDG_HandleTypeDef *pHiwdg)
{pHiwdg->Instance = IWDG;pHiwdg->Init.Prescaler = IWDG_PRESCALER_4;pHiwdg->Init.Reload = 0xFFF; // Tout = ((4 * 2^prer) * rlr) / 40 = 409ms,看门狗溢出时间if (HAL_IWDG_Init(pHiwdg) != HAL_OK){Error_Handler();}
}int main(void)
{........MX_IWDG_Init(&hiwdg);........HAL_IWDG_Start(&hiwdg);while (1){........HAL_IWDG_Refresh(&hiwdg);}}

(三)初始上电获取硬件看门狗复位状态

if (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET)
{}/* 硬件看门狗复位 */__HAL_RCC_CLEAR_RESET_FLAGS();

(四)看门狗复位后IO状态的保持方法

法一:硬件方式,锁存器。

法二:软件方式,当需要关注的IO状态改变时,立马存在Flash中,初始上电判断复位类型是硬件看门狗,就进行Flash读取和IO操作。该方式的缺点:由于stm32的Flash写操作是页写,每次写之前,都要先擦除,而且Flash的写次数有限,故经常写,Flash经常写的区域有可能被写坏。

法三:软件方式,BKP+初始判断处理(stm32F103RC大容量,备份寄存器是42个16位的寄存器)。

// BKP
#define BKP_DATA_LEN               16
#define BKP_MAX_DATA_LEN           42
#define BKP_INTERVAL_POINT         10// 写备份寄存器
void BKP_Write(uint8_t *pSourcedata, uint32_t num)
{assert_param(num <= BKP_MAX_DATA_LEN);volatile uint32_t *pDestData;RCC->APB1ENR |= (1 << 27 | 1 << 28);    // 电源接口时钟/备份时钟开启PWR->CR |= 1 << 8;                    // 允许写入后备寄存器if (num > BKP_INTERVAL_POINT){   pDestData = &(BKP->DR1);        for (uint32_t i = 0; i < BKP_INTERVAL_POINT; i++){*(pDestData + i) = *(pSourcedata + i);}pDestData = &(BKP->DR11);for (uint32_t i = 0; i < (num - BKP_INTERVAL_POINT); i++){*(pDestData + i) = *(pSourcedata + i + BKP_INTERVAL_POINT);}}else{pDestData = &(BKP->DR1);       for (uint32_t i = 0; i < num; i++){*(pDestData + i) = *(pSourcedata + i);}}
}// 读备份寄存器
void BKP_Read(uint8_t *pReadData, uint32_t num)
{assert_param(num <= BKP_MAX_DATA_LEN);volatile uint32_t *pSourceData;  if (num > BKP_INTERVAL_POINT){pSourceData = &(BKP->DR1);for (uint32_t i = 0; i < BKP_INTERVAL_POINT; i++){*(pReadData + i) = *(pSourceData + i);}   pSourceData = &(BKP->DR11);for (uint32_t i = 0; i < (num - BKP_INTERVAL_POINT); i++){*(pReadData + i + BKP_INTERVAL_POINT) = *(pSourceData + i);} }else{pSourceData = &(BKP->DR1);for (uint32_t i = 0; i < num; i++){*(pReadData + i) = *(pSourceData + i);}}
}

stm32 看门狗 BKP(HAL库)相关推荐

  1. STM32看门狗总结

    转自:http://www.openedv.com/thread-56260-1-1.html STM32看门狗总结 调原子哥的开发板一年多,基本上能用,但是对于STM32某些基本外设的工作机理还不甚 ...

  2. stm32直流电机PID控制hal库(Cubemx)

    stm32直流电机PID控制hal库(Cubemx),一步步手把手教你怎么配置cubemx怎么写代码. 未对pid就行深入解析,不过相信您通过配置和写代码以后大概可以知道pid的主要作用. 文章目录 ...

  3. 《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.9 TIM---输入捕获(脉冲频率测量)实验

    写在前面-- <STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>第四章4.9 TIM-输入捕获(脉冲频率测量)实验,讲解TIM输入捕获的原 ...

  4. 《STM32单片机开发应用教程(HAL库版)---基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第二章 软件安装与使用

    写在前面-- 作为<STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>系列之第二章,本章节将介绍开发软件STM32CubeMX和KEIL5的 ...

  5. 《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.3 按键控制实验

    写在前面-- <STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>第四章4.3 按键控制实验,讲述按键控制的编程方法 官方例程下载:http ...

  6. 《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.1 LED显示控制实验

    写在前面-- <STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>第四章4.1,本节将通过LED显示控制实验,学习STM32G431的开发技 ...

  7. STM32看门狗作用

    STM32F103 独立看门狗 学习笔记 引言 STM32是一系列基于ARM Cortex-M处理器的微控制器.看门狗(Watchdog)是STM32的一个重要功能模块,它能够帮助程序员实现系统的可靠 ...

  8. stm32看门狗详细介绍

    独立看门狗(IWDG) 独立看门狗由内部专门的 40Khz 低速时钟(内部 RC 时钟)驱动,即使主时钟发生故障,它也仍然有效. 作用 单片机系统万一在外界干扰死循环,看门狗可以复位.看门狗的作用就是 ...

  9. 手把手教你开发stm32——看门狗(基于hal库)

    目录: 1.独立看门狗介绍 1.1.独立看门狗简介 1.2.独立看门狗功能描述 1.3.独立看门狗工作框图 2.独立看门狗实验 2.1.cubemx配置 2.2.具体代码实现 3.独立看门狗的相关寄存 ...

最新文章

  1. jQuery中$(document).ready()和window.onload的区别
  2. 复制不用说yes的方法
  3. GCC built in CAS API
  4. 解决redis-cli连接时出现Could not connect to Redis at 127.0.0.1:6379: Connection refused
  5. 信息学奥赛一本通 1059:求平均年龄 | OpenJudge NOI 1.5 01
  6. mac下安装caffe
  7. android消息机制 Message, Looper,Handler
  8. 【java】java wait 原理 synchronized ReentrantLock 唤醒顺序
  9. 外链引入css有哪些方式_CSS 文件的4种引入方式
  10. hdfs-大数据Week6-DAY2-2-hdfs
  11. [最短路-Floyd][数学]Luogu P1552 牛的旅行
  12. ikm java_ikm(IKM在线)
  13. python写词法分析器_python实现词法分析器
  14. 使用 bioMart 包获取数据库信息
  15. linux 读取内存颗粒,Linux 读写memory操作,devmem直接访问物理内存地址【转】
  16. markdown文本居中
  17. 毕业两年工作三年小结
  18. 开单大师目录结构学习
  19. python-读取和保存npy文件
  20. 苹果店里卖移动套餐,走出甲方思维

热门文章

  1. PTA:7-37 秀恩爱分得快 (简洁易懂,详解)
  2. 击中击不中变换的作用理解
  3. excel表格拆分成多个工作表
  4. 4.4 Kali与windows xp之间搭建TFTP服务
  5. 设计师常用的素材网站有哪个推荐
  6. MacOS下Go语言环境搭建
  7. 捷客特带你盘点果粉手机壳的“鄙视链”
  8. uniapp app端写入读取txt doc等文件并下载阅览,已经在app端实现效果
  9. 代码注释如此沙雕,会玩还是你们程序员!
  10. 创建型设计模模式---原型模式