stm32 看门狗 BKP(HAL库)

发布者:玄幻剑客最新更新时间:2019-11-16 来源: eefocus关键字: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 看门狗 BKP(HAL库)

上一篇:[HAL库学习之路]5.IWDG-独立看门狗
下一篇:stm32F1RTC

推荐阅读最新更新时间:2024-11-04 11:20

STM32高分辨率定时器(HRTIM)使用实例之PWM
STM32高分辨率功能非常强大,寄存器数量非常多,使用起来也比较麻烦,本文使用HRTIM1产生一组互补输出的PWM 高分辨率定时器的初始化比普通定时器要复杂得多, HRTIM_OutputCfgTypeDef HRTIM_TIM_OutputStructure;//配置输出特性,高低电平等 HRTIM_BaseInitTypeDef HRTIM_BaseInitStructure;//配置基本参数,这部分和普通定时器一样 HRTIM_TimerInitTypeDef HRTIM_TimerInitStructure; //配置不同模式 HRTIM_TimerCfgTypeDef HRTIM_TimerWaveStructure;/
[单片机]
stm32专题二:GPIO输入—按键检测
新建板级支持包bsp_key.c和bsp_key.h GPIO输入配置过程: 定义初始化结构体; 开启RCC时钟,非常重要; 写入引脚和模式配置,不需要配置速度; 调用初始化函数,将初始化结构体写入对应的GPIO端口。 bsp_key.c包含两个函数,一个是初始化函数,另一个是按键扫描函数,会按键被按下时,返回按键的状态。 bsp_key.c #include bsp_key.h /** * @brief 按键初始化函数 */ void KEY_GPIO_Config(void) { // 定义GPIO初始化结构体 GPIO_InitTypeDef GPIO_InitStruct; // 开
[单片机]
stm32在调试过程中常见问题及解决办法
STM32调试过程中常见的问题及解决方法 一、 在“Debug选项卡”下设置好仿真器的类型后,下载程序时却提示“No ULINK Device found.” 解决办法: Keil MDK默认使用ULINK仿真器下载程序,在“Project --- Option for Target 'xxx' --- Utilities选项卡”下把编程所使用的仿真器改为相应的类型即可。 二、 编译工程时提示如下信息: main.axf: Error: L6218E: Undefined symbol __BASEPRICONFIG (referred from stm32f10x_nvic.o). main.axf: Error
[单片机]
ARM S3C2410 看门狗设置原理及源码
S3C2410 看门狗只要有两个功能 1、作为常规时钟,并且可以产生中断 2、作为看门狗定时器使用,当时钟减到0时(超时),它将产生一个128个时钟(PLCK)的时钟信号。 看门狗的设置: 1、 看门狗的外部时钟源是有PLCK提供的, plck 通过预分频 和 与比例因子 产生适合看门狗的时钟。 t_watchdog = 1/ 上面就是它的计算公式。 2、相关寄存器的介绍 WTCON watchdog控制寄存器 看门狗控制寄存器能够禁止或者允许看门狗时钟,从四个不同的时钟源中挑选时钟信号,允许或禁止中断,并且能允许或禁止看门狗时钟输出。如果用户想要使用看门狗作为普通时钟,应该中断使能
[单片机]
STM32笔记---DMA(USART)的演示
 这里有个小小的例子,来演示DMA模块与系统程序并行工作。   用串口以低波特率发送一个10K的数据,花费近10s时间,此时按照以往方法,CPU要不断等待数据发送、送数据;或者送数据、进中断、送数据,处理起来比较消耗时间。   使用了DMA功能以后,用户程序中只需配置好DMA,开启传输后,再也不需要操心,10K数据完成后会有标志位或中断产生,期间可以做任何想做的事,非常方便。   这个是相应的代码例子,基于STM32F103VBT6 /****************************************************************************** * 本文件实现串口发送功能(通过重构
[单片机]
STM32 SysTick配置函数
之前使用SysTick滴答定时器都是通过查找内核编程手册配置寄存器让SysTick滴答定时器工作的。其实在内核相关的头文件core_cm4.h中已经有SysTick滴答定时器的相关配置了。 条件__Vendor_SysTickConfig == 0成立,配置函数才能使用。 刚好在stm32f4xx.h中定义了__Vendor_SysTickConfig = 0,所以可以使用该配置函数。 观察函数__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks),其中的寄存器和我们在Systick查询定时中用到的寄存器其实是一样的。 __STATI
[单片机]
<font color='red'>STM32</font> SysTick配置函数
STM32 GPIO工作原理详解
1.STM32引脚说明 GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 以STM32F103ZET6芯片为例子,该芯片共有144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。 STM32的大部分引脚除了当GPIO使用之外,还可以复用位外设功能引脚(比如串口),这部分在STM32端口复用和重映射(AFIO辅
[单片机]
STM32 输入捕获
PWM 输入捕获模式 xmlnamespace prefix = o ns = urn:schemas-microsoft-com:office:office / 一、概念理解 PWM输入捕获模式时输入捕获模式的特例 1、每个定时器有四个输入通道IC1、IC2、IC3、IC4,且IC1 IC2一组,IC3 IC4一组,并可是设置管脚和寄存器的对应关系 2、两个TI输出映射了两个ICx信号 3、这两个ICx信号分别在相反的极性边沿有效 4、两个边沿信号中的一个被选为触发信号,并且从模式控制器被设置成复位模式 5、当触发信号来临时,被设置成触发输入信号的捕获寄存器,捕获 一个PWM周期(即连续的两个上升沿或下降沿) ,他
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved