IWDG和WWDG HAL库+cubeMX

2023-11-29 08:04
文章标签 cubemx hal iwdg wwdg

本文主要是介绍IWDG和WWDG HAL库+cubeMX,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.IWDG

1.原理

启用IWDG后,LSI时钟会自动开启

2.IWDG溢出时间计算 

3.IWDG配置步骤

4.HAL库相关函数介绍

HAL_IWDG_Init	//使能IWDG,设置预分频系数和重装载值等
HAL_IWDG_Refresh	 //把重装载寄存器的值重载到计数器中,喂狗typedef struct 
{ IWDG_TypeDef *Instance; /* IWDG 寄存器基地址 */IWDG_InitTypeDef Init;       /* IWDG 初始化参数 */
}IWDG_HandleTypeDef;typedef struct
{ uint32_t Prescaler;  /* 预分频系数 */ uint32_t Reload;       /* 重装载值 */ 
} IWDG_InitTypeDef;

5.自己编写的初始化函数 

IWDG_HandleTypeDef g_iwdg_handle;/* IWDG初始化函数 */
void iwdg_init(uint8_t prer, uint16_t rlr)
{g_iwdg_handle.Instance = IWDG;g_iwdg_handle.Init.Prescaler = prer;g_iwdg_handle.Init.Reload = rlr;HAL_IWDG_Init(&g_iwdg_handle);
}/* 喂狗函数 */
void iwdg_feed(void)
{HAL_IWDG_Refresh(&g_iwdg_handle);
}
int main(void)
{HAL_Init();                             /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9);     /* 设置时钟为72Mhz */delay_init(72);                         /* 延时初始化 */usart_init(115200);                     /* 串口初始化为115200 */printf("您还没喂狗,请及时喂狗!!!\r\n");iwdg_init(IWDG_PRESCALER_32, 1250);     /* 预分频系数为32,重装载值为1250,溢出时间约为1s */while (1){delay_ms(1000);iwdg_feed();printf("已经喂狗\r\n");}
}

二.WWDG

1.WWDG超时时间计算 

 2.WWDG配置步骤

3.相关寄存器介绍

HAL_StatusTypeDef HAL_WWDG_Init(WWDG_HandleTypeDef *hwwdg);//设置预分频系数和窗口值等
HAL_StatusTypeDef HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg);//重装载计数器,即喂狗typedef struct 
{WWDG_TypeDef *Instance; /* WWDG 寄存器基地址 */ WWDG_InitTypeDef Init;      /* WWDG 初始化参数 */
}WWDG_HandleTypeDef;typedef struct 
{uint32_t Prescaler; /* 预分频系数 */uint32_t Window;    /* 窗口值 */uint32_t Counter;    /* 计数器值 */uint32_t EWIMode;  /* 提前唤醒中断使能 */ 
}WWDG_InitTypeDef;

4.自己编写的初始化函数 

设置计数器值为0x7F,窗口值0x5F,预分频系数是8

WWDG_HandleTypeDef g_wwdg_handle;/* 窗口看门狗初始化函数 */
void wwdg_init(uint8_t tr, uint8_t wr, uint32_t fprer)
{g_wwdg_handle.Instance = WWDG;g_wwdg_handle.Init.Counter = tr;g_wwdg_handle.Init.Window = wr;g_wwdg_handle.Init.Prescaler = fprer;g_wwdg_handle.Init.EWIMode = WWDG_EWI_ENABLE;HAL_WWDG_Init(&g_wwdg_handle);
}/* WWDG MSP回调函数 */
void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg)
{__HAL_RCC_WWDG_CLK_ENABLE();HAL_NVIC_SetPriority(WWDG_IRQn, 2, 3);HAL_NVIC_EnableIRQ(WWDG_IRQn);
}/* WWDG中断服务函数 */
void WWDG_IRQHandler(void)
{HAL_WWDG_IRQHandler(&g_wwdg_handle);
}/* WWDG提前唤醒回调函数 */
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{HAL_WWDG_Refresh(&g_wwdg_handle);LED1_TOGGLE();
}
int main(void)
{HAL_Init();                                 /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9);         /* 设置时钟,72M */delay_init(72);                             /* 初始化延时函数 */usart_init(115200);                         /* 波特率设置为115200 */led_init();                                 /* 初始化LED */if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET){printf("窗口看门狗复位\r\n");__HAL_RCC_CLEAR_RESET_FLAGS();}else{printf("外部复位\r\n");}delay_ms(500);printf("请在窗口期内喂狗\r\n\r\n");wwdg_init(0x7f, 0x5f, WWDG_PRESCALER_8);while(1){delay_ms(90);//延迟90msHAL_WWDG_Refresh(&g_wwdg_handle);LED0_TOGGLE();}
}

这篇关于IWDG和WWDG HAL库+cubeMX的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/432060

相关文章

STM32CubeMX和HAL库-新建项目

目录 新建项目 选择开发板  MCU图形化配置界面总览 MCU配置 新建项目 新建项目包含选择MCU创建项目、选择开发板新建项目和交叉选择MCU新建项目三部分。 1. 选择MCU创建项目 单击主菜单项File→New Project,或Home视图上的ACCESS TO MCU SELECTOR 按钮,都可以打开的New Project from a MCU/MPU对话框。

STM32 HAL CAN通讯 实操

1、简介 相比于串口通讯,对于刚接触CAN通讯的小白来说,CAN通讯相对复杂,看各种视频、帖子理论,总是一知半解。本次通过傻瓜式操作,先实现CAN通讯的交互,以提高小白的信心,也便于自己复习观看。本次以STM32CubeMX进行初始化配置,通过Keil 5软件进行软件设计,通过CAN盒实现进行数据的交互。该流程实际以STM32F0、F1、F3、F4、F7实测好用(理论上都适用),这三种型号单片机

我在高职教STM32——准备HAL库工程模板(1)

新学期开学在即,又要给学生上 STM32 嵌入式课程了。这课上了多年了,一直用的都是标准库来开发,已经驾轻就熟了。人就是这样,有了自己熟悉的舒适圈,就很难做出改变,老师上课也是如此,排斥新课和不熟悉的内容。显然,STM32 的开发,HAL 库已是主流,自己其实也在使用,只不过更换库就意味着教学内容有很大变化,自己也就迟迟没有迈出调整这一步。现在,是时候做出变化了,笔者计划保持教学项

STM32单片机HAL库——ADC输入

一、单通道采集 二、单通道+DMA采集 使能DMA 三、定时器采集+DMA传输 选择定时器1的通道1作为触发源,在TIM1的上升沿进行采集 定时器1挂载在APB2上面,APB2上定时器的频率为168MHZ psc=168-1 arr=1000-1 TIM1的时钟频率为168/168/1000=1kHZ pulse设置为500,占空比为50%

基于STM32的RTOS--freertos的使用(HAL实现多任务)

一:STM32cubemx配置         1:工程建立                         (1)打开stm32cubemx  点击进入芯片选择页面                                         (2)选择对应的芯片型号双击         2:调试接口配置                  3:时钟设置

tiny4412 ov5640 driver and hal

初步完成在 tiny412 上 ov5640的driver and hal 的 porting  源码: https://github.com/gxx9203/tiny4412_ov5640_hal

STM32F1 HAL库笔记0

参考UM1850  Description of STM32F1 HAL and low-layer drivers 1、STM32Cube 包括:         • STM32CubeMX,图形软件配置工具,使用图形向导生成 C 初始化代码。         • 嵌入式软件平台,按系列提供(例如用于STM32F1的STM32CubeF1),包括:         ——STM32Cube

STM32的窗口看门狗详解及案例(基于HAL库)

目录 一、引言 二、窗口看门狗的工作原理 1.基本概念 2.功能描述 3.窗口值和计数器初始值 三、STM32F429 HAL 库中窗口看门狗的配置步骤 1.开启时钟 2.初始化窗口看门狗  3.开启早期唤醒中断 4.喂狗操作  四、窗口看门狗的应用场景  1.防止软件死锁 2.检测外部干扰 3.提高系统可靠性 五、注意事项 1.时间窗口的设置 2.喂狗操作的

【STM32+HAL库】---- 硬件IIC驱动0.96OLED

硬件开发板:STM32G0B1RET6软件平台:cubemax+keil+VScode 内容原著声明 代码借鉴学习于以下文章: STM32 使用硬件IIC驱动0.96寸4针IOLED显示器(HAL库) 1 新建cubemax工程 1.1 配置系统时钟RCC 1.2 配置引脚 1.3 导出工程 略… 2 代码 2.1 OLED_IIC_Config.h /*** **

W25Q32驱动 基于HAL库的SPI

环境 芯片:STM32F103ZET6 库:来自HAL的STM32F1XX.H 原理图 cubeMX配置 W25Q32.h //// Created by seven on 2024/9/2.//#ifndef SPI_W25Q32_H#define SPI_W25Q32_H#include "spi.h"/*** 初始化W25Q32闪存芯片*/void W25Q32