细说STM32F407单片机窗口看门狗WWDG的原理及使用方法

news2025/1/17 7:06:44

目录

一、窗口看门狗的工作原理

1、递减计数器

2、窗口值和比较器

3、看门狗的启动

4、提前唤醒中断

二、窗口看门狗的HAL驱动程序

1、窗口看门狗初始化

2.窗口看门狗刷新

3.EWI中断及其处理

三、不开启EWI的WWDG示例

1、示例功能

2、项目设置

(1) 时钟、Debug

(2)GPIO 

(3) WWDG

(4)NVIC

(5)USART、 CodeGenrator

3、软件设计main.c

4、下载并调试

(1)启动后不按任何键,连续更新

(2) 442ms内按键,更新

(3)442ms~1094ms之间按键,不更新 

(4)1094ms以上按键,更新

四、开启EWI的WWDG示例

1、示例功能、项目配置

2、软件设计

3、下载并调试

(1)不按按任何键

(2)按S2,800ms

(3) 按S3,1200ms

(4)按S4,200ms


        窗口看门狗(Window Watchdog,WWDG)是STM32F407上的另一个看门狗,通常用来监测由外部干扰或不可预见的逻辑条件造成的应用程序软件故障

一、窗口看门狗的工作原理

        窗口看门狗的内部结构如图所示。

1、递减计数器

        窗口看门狗内部有一个7位递减计数器,控制寄存器WWDG_CR中的T[6:0]位,是计数器的计数值。7位计数器的时钟信号来源于PCLK1,看门狗内部首先对PCLK1进行4096分频,然后再经过可配置的预分频器分频,因此7位递减计数器的时钟频率是:

        f_{CNT}=f_{PCLK1}/(4096×DIV)

        f_{PCLK1}是时钟信号PCLK1的频率,4096是看门狗的固定分频系数,DIV是可设置的分频系数,由寄存器WWDG_CFR的WDGTB[1:0]位决定,DIV可取值为1、2、4、8。

        7位递减计数器在T6位由1变为0时,就会使系统产生复位(看门狗必须是激活的,也就是控制寄存器WWDG_CR中的WDGA位是1),也就是计数值由0x40变为0x3F时,产生复位。要避免系统复位,就必须在计数值变为0x3F之前重置计数器,重置计数器的值必须大于0x3F。

        窗口看门狗的递减计数器是自由运行计数器,即使没有开启看门狗,这个计数器也是在计数的。所以,在启动看门狗之前,应该重置计数器的值,以避免因为T6位是0而立刻复位。

2、窗口值和比较器

        在配置寄存器WWDG_CFR中,有个7位的窗口值W[6:0],这个值用来与计数器的当前值T[6:0]进行比较。

        窗口看门狗的工作时序图如图所示。当T[6:0]>W[6:0]时,比较器输出为1这时不允许重置计数器的值,也就是不允许写WWDG_CR否则系统复位。只有当T[6:0]≤W[6:0]时,才可以重置计数器的值,如果在T[6:0]变化到0x3F之前没有重置计数器,就会产生系统复位信号。所以,只能在这样一个窗口期重置看门狗计数器,这也是称为“窗口看门狗”的原因

        根据窗口看门狗的工作特点,在初始化设置时,窗口值W[6:0]必须小于或等于递减计数器的重置值。窗口看门狗的超时(timeout)就是计数器重置后,计数值变化为0x3F的这段时间长度,也就是图中不允许刷新和允许刷新两段的时间长度之和。用户可以根据计数器的时钟信号频率和T[6:0]的重置值计算超时。例如,设置计数器重置值为最大值0x7F,变化到0x3F时的计数周期个数是:

∆=0x7F-0x3F=0x40。

        计数器的时钟周期是:T_{CNT}= \frac{1}{f_{CNT}}= \frac{4096\times DIV}{f_{PCLK1}}

        所以,看门狗的超时是:timeout= \bigtriangleup T_{CNT}= \frac{4096\times DIV\times \Delta }{f_{PCLK1}}

       同样,也可以计算出不允许刷新的时间段的长度。

3、看门狗的启动

        控制寄存器WWDG_CR中的位WDGA用于启动看门狗。系统复位后WDGA被硬件清零,通过向WDGA写1可启动看门狗。此外,启动看门狗后就无法再停止,除非系统复位。

        根据窗口看门狗的特点,可以使用软件使系统立刻复位。具体的操作方法是将WDGA位置1(启动窗口看门狗),并将T6位清零(使看门狗立刻产生复位),也就是设置一个小于0x3F的重置值即可。

4、提前唤醒中断

        窗口看门狗有一个提前唤醒中断(Early Wakeup Interrupt,EWI)事件,如果已开启此中断事件源,且启动了看门狗,在递减计数器的值变为0x40时,就会触发此中断。

        可在此中断服务程序里执行系统复位之前的一些关键操作,但是执行时间有限,只有一个计数器时钟周期。当然,也可以在此中断服务程序里重置计数器的值,避免系统复位,但是这样似乎就违背了使用窗口看门狗的初衷。

二、窗口看门狗的HAL驱动程序

        窗口看门狗的驱动程序的头文件是stm32f4xx_hal_wwdg.h,WWDG的驱动函数不多。

1、窗口看门狗初始化

        使用函数HAL_WWDG_Init()进行窗口看门狗初始化,其原型定义如下:

WWDG_HandleTypeDef hwwdg;  //WWDG外设对象变量

        结构体WWDG_HandleTypeDef的定义如下:

typedef struct
{
    WWDG_TypeDef *Instance;	//寄存器基址
    WWDG_InitTypeDef Init;	//WWDG的参数
}WWDG_HandleTypeDef;

        其成员变量Init是结构体类型WWDG_InitTypeDef,包含WWDG的参数。该结构体定义如下,各成员变量意义见注释:

typedef struct
{
    uint32_t Prescaler;	//WWDG时钟预分频系数
    uint32_t Window;	//WWDG窗口值,设定值范围为0x40~0x7E
    uint32_t Counter;	//WWDG自由运行递减计数器的重载值,设定值范围为0×40~0×7F
    uint32_t EWIMode;	//WWDG的EWI中断模式,开启或禁止
}WWDG_InitTypeDef;

2.窗口看门狗刷新

        函数HAL_WWDG_Refresh()用于刷新窗口看门狗,其原型定义如下:

HAL_StatusTypeDef HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg);

        其功能就是将计数器重置值加载到看门狗的递减计数器,以避免看门狗触发系统复位。但只能在允许刷新时间段才能刷新看门狗

3.EWI中断及其处理

        WWDG有一个全局中断,只有一个提前唤醒中断(EWI)事件。驱动程序头文件定义了EWI中断事件使能位的宏,也作为中断事件类型定义。

#define WWDG_IT_EWI WWDG_CFR_EWI	//EWI中断事件使能位,也作为中断事件类型

         有一个宏函数用于开启EWI中断事件,即

__HAL_WWDG_ENABLE_IT(__HANDLE__,__INTERRUPT__)

        参数__HANDLE__是WWDG对象指针,__INTERRUPT__就使用WWDG_IT_EWI作为参数值。EWI中断事件开启后就不能关闭,只能在硬件复位时才关闭,所以没有关闭EWI中断事件的函数

        WWDG全局中断ISR里调用的通用处理函数是HAL_WWDG_IRQHandler(),对应于EWI事件中断的回调函数是HAL_WWDG_EarlyWakeupCallback(),其原型定义如下:

void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg);

        若要对EWI事件中断做出处理,重新实现这个回调函数即可。

三、不开启EWI的WWDG示例

1、示例功能

        本文作者旨在介绍如何WWDG及用法。继续使用旺宝红龙开发板STM32F407ZGT6 KIT V1.0。示例功能:看门狗在启动或上次刷新后,在442ms之内不能再刷新,在443ms至1049ms之内可以刷新看门狗,如果超过1049ms没有刷新看门狗,看门狗就会使系统复位

        使用开发板上的3个按键,按下案件后分别执行:在允许刷新的时间段内刷新、超时后刷新、在不允许刷新的时间段内刷新。LED1~LED3分别用于动作指示。

//显示菜单
[S2]KeyUp    = 在允许刷新时间段内,看门狗不会触发复位.         LED1闪烁
[S3]KeyDown  = 超时,看门狗会触发系统复位.                    LED2闪烁
[S4]KeyLeft  = 在不允许刷时间段内,刷新看门狗会导致系统复位.    LED3闪烁

        本示例不开启EWI中断。 

        部分内容需要参考本文作者写的其他文章。参考文章:细说STM32F407单片机独立看门狗IWDG的原理及使用方法-CSDN博客  https://wenchm.blog.csdn.net/article/details/145159637 

2、项目设置

(1) 时钟、Debug

         设置Debug接口为Serial Wire,设置HSE为Crystal/Ceramic Resonator

        配置时钟树,设置HSE为8MHz,HCLK为32MHz,设置APB1 Prescaler为16,使PCLK1为2MHz。这是因为窗口看门狗要用到PCLK1时钟,使PCLK1为2MHz是为得到一个较低频率时钟信号,用于看门狗的递减计数器,便于观察程序运行效果。 

 

(2)GPIO 

        本示例要用到两个LED,配置PA6和PA4引脚,设置初始输出为高电平,两个LED的GPIO引脚的配置结果如图所示,仍然使用keyled.h中的LED驱动函数。

(3) WWDG

        只需激活WWDG即可,参数设置部分的几个参数决定看门狗的特性。

 

  • WWDG counter clock prescaler,看门狗计数器预分频系数,有1、2、4、8几个可选值。
  • WWDG window value,窗口值,也就是W[6:0]的值。这个值必须小于计数器的重置值,也必须大于0x3F(十进制值63)。
  • WWDG free-running downcounter value,递减计数器T[6:0]的重置值,最大值为127(也就是0x7F)必须大于W[6:0]的值。根据设置的参数以及PCLK1为2MHz,可以计算出看门狗的超时为

         timeout= \bigtriangleup T_{CNT}= \frac{4096\times DIV\times \Delta }{f_{PCLK1}}=\frac{4096\times 8\times \left ( 127-63 \right )}{2\times 10^{6}}= 1049ms

        计数器重置后不允许刷新的时间段长度是

         time=\frac{4096\times 8\times \left ( 127-100 \right )}{2\times10 ^{6}}=442ms

        对照WWDG工作原理图,这两个时间对看门狗的意义:看门狗在启动或上次刷新后,在442ms之内不能再刷新,在443ms至1049ms之内可以刷新看门狗,如果超过1049ms没有刷新看门狗,看门狗就会使系统复位

  • Early wakeup interrupt,是否开启提前唤醒中断。这里开启EWI中断。还需要在WWDG的NVIC Settings页面开启WWDG的全局中断,使用默认的优先级即可。

(4)NVIC

        在WWDG的NVIC Settings页面开启WWDG的全局中断,使用默认的优先级。

(5)USART、 CodeGenrator

         与参考文章相同。

3、软件设计main.c

/* USER CODE BEGIN Includes */
#include "keyled.h"
#include <stdio.h>
/* USER CODE END Includes */
/* USER CODE BEGIN 2 */
  //系统复位、初始状态
  printf("Demo21_WWDG: Windows Watchdog\r\n\r\n");

  //显示菜单
  printf("[S2]KeyUp    = 在允许刷新时间段内,看门狗不会触发复位.\r\n");
  printf("[S3]KeyDown  = 超时,看门狗会触发系统复位.\r\n");
  printf("[S4]KeyLeft  = 在不允许刷时间段内,刷新看门狗会导致系统复位.\r\n\r\n");

  // MCU output low level LED light is on
  LED1_OFF();
  LED2_OFF();
  LED3_OFF();
  LED4_OFF();
  /* USER CODE END 2 */
    /* USER CODE BEGIN 3 */
	KEYS curKey = ScanPressedKey(KEY_WAIT_ALWAYS);
	switch(curKey)
	{
		//1. 在允许刷新时间段内,看门狗不会触发复位,LED1闪烁
		case KEY_UP:
		{
			LED1_Toggle();
		  	LED2_OFF();
		  	LED3_OFF();
		  	HAL_Delay(800);

		  	HAL_WWDG_Refresh(&hwwdg); 	//刷新看门狗,也就是重置计数器的值
		  	printf("The watchdog will not trigger a reset during the allowed refresh period.\r\n\r\n");
		  	break;
		}

		//2. 超时,看门狗会触发系统自动复位,LED2亮
		case KEY_DOWN:
		{
		  	LED1_OFF();
		  	LED2_ON();
		  	LED3_OFF();
		  	printf("Timeout, the watchdog will trigger a reset automatically.\r\n\r\n");
		  	HAL_Delay(1200);

		  	HAL_WWDG_Refresh(&hwwdg);
		  	break;
		}

		//3. 在不允许刷时间段内,刷新看门狗会导致系统复位,LED3亮
		case KEY_LEFT:
		{
		  	HAL_Delay(200);
		  	LED1_OFF();
		  	LED2_OFF();
		  	LED3_ON();
		  	HAL_Delay(200);

		  	HAL_WWDG_Refresh(&hwwdg); 	//刷新看门狗,也就是重置计数器的值
		  	printf("During the period of time when refresh is not allowed,\r\n");
		  	printf("refreshing the watchdog will cause the system to reset.\r\n\r\n");
		  	break;
		 }

		 default:
		 {
		  	printf("Keystroke error, refreshing watchdog will not cause system reset.\r\n\r\n");
		  	LED1_OFF();
		  	LED2_OFF();
		  	LED3_OFF();
		 }
	}

	HAL_Delay(500);		//消除按键抖动影响
  }
  /* USER CODE END 3 */
/* USER CODE BEGIN 4 */
int __io_putchar(int ch)
{
	HAL_UART_Transmit(&huart6,(uint8_t*)&ch,1,0xFFFF);
	return ch;
}
/* USER CODE END 4 */

4、下载并调试

        调试的时候,按键按下后不要抬起。 

(1)启动后不按任何键,连续更新

         启动后不按任何键,系统连续启动,串口助手连续显示启动信息,这是因为WWDG的窗口值100,重置值127,当减计数到100后,系统自动重启。

(2) 442ms内按键,更新

        在执行LED3_ON()前后各延时200ms是为了看到LED3的闪烁效果,这两个延时合计400ms,还在不允许刷新时间段内(小于442ms),这时调用HAL_WWDG_Refresh()刷新看门狗会使系统复位,后面如果有程序也是不会被执行的。 

(3)442ms~1094ms之间按键,不更新 

        看门狗在允许刷新的时间段内及时刷新。如果在while循环内调用HAL_Delay(800)延时800ms,然后调用HAL_WWDG_Refresh()刷新看门狗,则可以观察到LED1一直闪烁。因为延时800ms后进入允许刷新的时间段(大于442ms),也没有超过看门狗的超时时间(1049ms),这时候调用HAL_WWDG_Refresh()是可以刷新看门狗的,程序能一直正常运行,所以LED1闪烁,闪烁周期为800ms。

 

(4)1094ms以上按键,更新

        看门狗超时是自动复位的。如果将程序中的延时改为1200ms,则运行时会看到LED1一直亮着。因为在延时1200ms的过程中,看门狗已经超时导致系统复位,while循环里使LED1输出翻转的代码不会被执行。

四、开启EWI的WWDG示例

1、示例功能、项目配置

        除WWDG开启EWI中断外,其余都与三相同。

 

2、软件设计

        在不开启EWI的时候,程序下载后,即使不按任何键,WWDG的减计数器减到阈值后也会自动重置,现象就是串口助手连续不断底显示更新,一般情况下,这不是设计者的设计目的。

        开启EWI后,在EWI的回调函数里执行计数器重置。那么久解决了上面不需要的连续刷新WWDG的现象了。 

/* USER CODE BEGIN 4 */
// EWI中断事件回调函数
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{
	LED4_Toggle();
	HAL_WWDG_Refresh(hwwdg); //在此刷新看门狗,看门狗也是能被刷新的
}

int __io_putchar(int ch)
{
	HAL_UART_Transmit(&huart6,(uint8_t*)&ch,1,0xFFFF);
	return ch;
}
/* USER CODE END 4 */

        看门狗的EWI中断是在递减计数器的值变为0x40时触发的,而递减计数器的值变为0x3F时就会导致系统自动复位。所以,EWI中断相当于在系统复位之前的一个预警,用户可以在此中断里做一些紧急处理,例如关闭某个开关,但是处理时间只有1个计数周期。

3、下载并调试

(1)不按按任何键

(2)按S2,800ms

 

(3) 按S3,1200ms

 

(4)按S4,200ms

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2277908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Rust自学】12.6. 使用TDD(测试驱动开发)开发库功能

12.6.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print)&#xff0c;是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步&#xff1a; 接收命令行参数读取…

利用rsync备份全网服务器数据

一、项目描述 某公司里有一台Web服务器&#xff0c;里面的数据很重要&#xff0c;但是如果硬盘坏了数据就会丢失&#xff0c;现在领导要求把数据做备份&#xff0c;这样Web服务器数据丢失在可以进行恢复&#xff0c;要求如下&#xff1a; 1、备份要求 每天晚上00点整在Web服…

Go基础之环境搭建

文章目录 1 Go 1.1 简介 1.1.1 定义1.1.2 特点用途 1.2 环境配置 1.2.1 下载安装1.2.2 环境配置 1.2.2.1 添加环境变量1.2.2.2 各个环境变量理解 1.2.3 验证环境变量 1.3 包管理工具 Go Modules 1.3.1 开启使用1.3.2 添加依赖包1.3.3 配置国内包源 1.3.3.1 通过 go env 配置1.…

Go Ebiten小游戏开发:贪吃蛇

贪吃蛇是一款经典的小游戏&#xff0c;玩法简单却充满乐趣。本文将介绍如何使用 Go 语言和 Ebiten 游戏引擎开发一个简单的贪吃蛇游戏。通过这个项目&#xff0c;你可以学习到游戏开发的基本流程、Ebiten 的使用方法以及如何用 Go 实现游戏逻辑。 项目简介 贪吃蛇的核心玩法是…

如何优化Elasticsearch大文档查询?

记录一次业务复杂场景下DSL优化的过程 背景 B端商城业务有一个场景就是客户可见的产品列表是需要N多闸口及各种其它逻辑组合过滤的&#xff0c;各种闸口数据及产品数据都是存储在ES的(有的是独立索引&#xff0c;有的是作为产品属性存储在产品文档上)。 在实际使用的过程中&a…

在VS2022中用C++连接MySQL数据库读取数据库乱码问题

1.正确安装mysql 安装之后的配置文件 2.在VS2022中进行相关配置 &#xff08;1&#xff09;右键项目&#xff0c;打开属性 注意是右键项目&#xff0c;不是.cpp文件 &#xff08;2&#xff09;配置属性-> VC目录 -> 包含目录 ->添加头文件路径&#xff08;如图&am…

如何在linux系统上完成定时开机和更新github端口的任务

任务背景 1.即使打开代理&#xff0c;有的时候github去clone比较大的文件时也会出问题。这时需要每小时更新一次github的host端口&#xff1b; 2.马上要放假&#xff0c;想远程登录在学校的台式电脑&#xff0c;但学校内网又不太好穿透。退而求其次&#xff0c;选择定时启动电…

基于Java的语音陪聊软件——支持聊天私聊-礼物系统-直播系统-缘分匹配-游戏陪玩

丰富的经验、成熟的技术&#xff0c;打造适合当下市场发展的语音交友软件源码。Java 语言凭借其独特的优势&#xff0c;为这款语音陪聊软件的稳健运行和持续发展奠定了坚实基础。它不仅融合了聊天私聊、礼物系统和直播系统等实用且有趣的功能&#xff0c;还创新性地引入了缘分匹…

RV1126+FFMPEG推流项目(7)AI音频模块编码流程

一、AI 模块和外设麦克风的关系 AI 模块是 RV1126 芯片的一个重要组成部分。它的主要功能是将外部接入的麦克风采集到的模拟信号通过内置的驱动程序转换为数字信号。这意味着麦克风作为外设&#xff0c;提供音频输入信号&#xff0c;AI 模块通过其硬件和软件的结合&#xff0c…

计算机网络 (37)TCP的流量控制

前言 计算机网络中的TCP&#xff08;传输控制协议&#xff09;流量控制是一种重要机制&#xff0c;用于确保数据在发送方和接收方之间的传输既高效又稳定。 一、目的 TCP流量控制的主要目的是防止发送方发送数据过快&#xff0c;导致接收方无法及时处理&#xff0c;从而引起数据…

Python 实现 NLP 的完整流程

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

AIGC时代:如何快速搞定Spring Boot+Vue全栈开发

文章目录 一、Spring Boot基础二、Vue.js基础三、Spring Boot与Vue.js集成四、性能优化与最佳实践《快速搞定Spring BootVue全栈开发》 内容简介作者简介目录前言/序言本书内容本书特点读者对象 随着人工智能生成内容&#xff08;AIGC&#xff09;技术的迅速发展&#xff0c;…

【ArcGIS初学】产生随机点计算混淆矩阵

混淆矩阵&#xff1a;用于比较分类结果和地表真实信息 总体精度(overall accuracy) :指对角线上所有样本的像元数(正确分类的像元数)除以所有像元数。 生产者精度(producers accuracy) &#xff1a;某类中正确分类的像元数除以参考数据中该类的像元数(列方向)&#xff0c;又称…

《探秘火焰目标检测开源模型:智能防火的科技利刃》

一、引言 火灾&#xff0c;如同隐藏在暗处的恶魔&#xff0c;时刻威胁着人们的生命财产安全与社会的稳定发展。无论是澳大利亚那场肆虐数月、烧毁约1860万公顷土地、造成近30亿只动物死亡或流离失所的森林大火&#xff0c;还是美国加州频繁爆发、迫使大量居民撤离家园、带来巨额…

计算机网络 (46)简单网络管理协议SNMP

前言 简单网络管理协议&#xff08;SNMP&#xff0c;Simple Network Management Protocol&#xff09;是一种用于在计算机网络中管理网络节点的标准协议。 一、概述 SNMP是基于TCP/IP五层协议中的应用层协议&#xff0c;它使网络管理员能够管理网络效能&#xff0c;发现并解决网…

Java并发03 - 无锁三大将

无锁三大将&#xff1a;CAS & Unsafe & Atomic 文章目录 无锁三大将&#xff1a;CAS & Unsafe & Atomic一&#xff1a;CAS机制二&#xff1a;Unsafe魔法指针类2.1&#xff1a;内存管理2.2&#xff1a;对象创建实例2.3&#xff1a;类&#xff0c;实例对象以及变…

JVM远程调试原理剖析

一、如何开启JVM远程调试 当一个 Java 应用启动时&#xff0c;JVM 会根据启动参数配置其运行环境。使用 -agentlib:jdwp 参数启动远程调试功能&#xff0c;JVM 会初始化调试代理。 agentlib:jdwptransportdt_socket,servery,suspendn,address*:5005 -jar your_application.jar…

01、flink的原理和安装部署

flink中主要有两个进程&#xff0c;分别是JobMManager和TaskManager&#xff0c;当然了根据flink的部署和运行环境不同&#xff0c;会有一些不同&#xff0c;但是主要的功能是类似的&#xff0c;下面我会讲下聊下&#xff0c;公司用的多的部署方式&#xff0c;基于yarn集群的部…

浅谈云计算19 | OpenStack管理模块 (上)

OpenStack管理模块&#xff08;上&#xff09; 一、操作界面管理架构二、认证管理2.1 定义与作用2.2 认证原理与流程2.2.1 认证机制原理2.2.2 用户认证流程 三、镜像管理3.1 定义与功能3.2 镜像服务架构3.3 工作原理与流程3.3.1 镜像存储原理3.3.2 镜像检索流程 四、计算管理4.…

WXML模版语法-事件绑定

知识点1&#xff1a;什么是事件 事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为&#xff0c;反馈到逻辑层进行业务的处理。 知识点2&#xff1a;小程序中常用的事件 类型绑定方式事件描述tapbindtap或bind:tap手指触摸后马上离开&#xff0c;类似于…