stm32 看门狗 BKP(HAL库)
(一)概述
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库)相关推荐
- STM32看门狗总结
转自:http://www.openedv.com/thread-56260-1-1.html STM32看门狗总结 调原子哥的开发板一年多,基本上能用,但是对于STM32某些基本外设的工作机理还不甚 ...
- stm32直流电机PID控制hal库(Cubemx)
stm32直流电机PID控制hal库(Cubemx),一步步手把手教你怎么配置cubemx怎么写代码. 未对pid就行深入解析,不过相信您通过配置和写代码以后大概可以知道pid的主要作用. 文章目录 ...
- 《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.9 TIM---输入捕获(脉冲频率测量)实验
写在前面-- <STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>第四章4.9 TIM-输入捕获(脉冲频率测量)实验,讲解TIM输入捕获的原 ...
- 《STM32单片机开发应用教程(HAL库版)---基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第二章 软件安装与使用
写在前面-- 作为<STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>系列之第二章,本章节将介绍开发软件STM32CubeMX和KEIL5的 ...
- 《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.3 按键控制实验
写在前面-- <STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>第四章4.3 按键控制实验,讲述按键控制的编程方法 官方例程下载:http ...
- 《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.1 LED显示控制实验
写在前面-- <STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>第四章4.1,本节将通过LED显示控制实验,学习STM32G431的开发技 ...
- STM32看门狗作用
STM32F103 独立看门狗 学习笔记 引言 STM32是一系列基于ARM Cortex-M处理器的微控制器.看门狗(Watchdog)是STM32的一个重要功能模块,它能够帮助程序员实现系统的可靠 ...
- stm32看门狗详细介绍
独立看门狗(IWDG) 独立看门狗由内部专门的 40Khz 低速时钟(内部 RC 时钟)驱动,即使主时钟发生故障,它也仍然有效. 作用 单片机系统万一在外界干扰死循环,看门狗可以复位.看门狗的作用就是 ...
- 手把手教你开发stm32——看门狗(基于hal库)
目录: 1.独立看门狗介绍 1.1.独立看门狗简介 1.2.独立看门狗功能描述 1.3.独立看门狗工作框图 2.独立看门狗实验 2.1.cubemx配置 2.2.具体代码实现 3.独立看门狗的相关寄存 ...
最新文章
- jQuery中$(document).ready()和window.onload的区别
- 复制不用说yes的方法
- GCC built in CAS API
- 解决redis-cli连接时出现Could not connect to Redis at 127.0.0.1:6379: Connection refused
- 信息学奥赛一本通 1059:求平均年龄 | OpenJudge NOI 1.5 01
- mac下安装caffe
- android消息机制 Message, Looper,Handler
- 【java】java wait 原理 synchronized ReentrantLock 唤醒顺序
- 外链引入css有哪些方式_CSS 文件的4种引入方式
- hdfs-大数据Week6-DAY2-2-hdfs
- [最短路-Floyd][数学]Luogu P1552 牛的旅行
- ikm java_ikm(IKM在线)
- python写词法分析器_python实现词法分析器
- 使用 bioMart 包获取数据库信息
- linux 读取内存颗粒,Linux 读写memory操作,devmem直接访问物理内存地址【转】
- markdown文本居中
- 毕业两年工作三年小结
- 开单大师目录结构学习
- python-读取和保存npy文件
- 苹果店里卖移动套餐,走出甲方思维