HAL库常用的函数:
目录
HAL库:
1.GPIO常用函数:
1.HAL_GPIO_ReadPin( )
2.HAL_GPIO_WritePin( )
3.HAL_GPIO_TogglePin( )
4.HAL_GPIO_EXTI_IRQHandler( )
5.HAL_GPIO_EXTI_Callback( )
2.UART常用函数:
1.HAL_UART_Init()
发送函数:
2.HAL_UART_Transmit()
3.HAL_UART_Transmit_IT( )
4.HAL_UART_Transmit_DMA( )
接收函数:
5.HAL_UART_Receive( )
6.HAL_UART_Receive_IT()
7.HAL_UART_Receive_DMA( )
UART中断处理函数
UART的中断回调函数:
中断接收回调函数示例:
3.SPI常用函数:
4.定时器常用函数:
1. HAL_TIM_Base_Init 函数
2.TIM_Base_InitTypeDef 这个结构体类型
1.按键扫描函数
HAL库:
1.GPIO常用函数:
HAL_GPIO_Init()
这个函数主要用来初始化我们需要用到的引脚,设置其工作频率、工作模式、上下拉等参数。如果使用CubeMX配置工程,所有参数在Cube中调配,函数自动在工程中生成,无需要手动初始化。
HAL_GPIO_DeInit()
HAL_GPIO_Init能够实现对GPIO的初始化,那么HAL_GPIO_DeInit就是与其相反的操作,能够将GPIO口恢复至默认状态,即各个寄存器复位时的值
1.HAL_GPIO_ReadPin( )
读取我们想要知道的引脚的电平状态、函数返回值类型为GPIO_PinState = 0或1。
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
例:pin_State = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_9);
2.HAL_GPIO_WritePin( )
给某个引脚写0或1,GPIO_PIN_RESET 也可写成0;GPIO_PIN_RSET 也可写成1
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
例:HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9,GPIO_PIN_RESET)
3.HAL_GPIO_TogglePin( )
翻转某个引脚的电平状态
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
例:HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9);
4.HAL_GPIO_EXTI_IRQHandler( )
这个函数是外部中断服务函数,用来响应外部中断的触发,函数实体里面有两个功能,1是清除中断标记位,2是调用下面要介绍的回调函数。如果使用CUbeMX生产,无需自己手写,直需要在main.c中重新定义相应的回调函数即可
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
例:HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);//配置好CubeMX后,自动生产
5.HAL_GPIO_EXTI_Callback( )
中断回调函数,可以理解为中断函数具体要响应的动作。
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
2.UART常用函数:
1.HAL_UART_Init()
- 功能:初始化UART外设。
- 参数:
huart
是指向UART_HandleTypeDef
结构体的指针,该结构体包含了UART模块的配置信息。 - 返回值:返回一个枚举类型的值,表示初始化是否成功。可能的返回值包括
HAL_OK
(成功)、HAL_ERROR
(错误)、HAL_BUSY
(正忙,配置失败的一种)和HAL_TIMEOUT
(超时,配置失败的一种)。
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
发送函数:
2.HAL_UART_Transmit()
- 功能:发送指定长度的数据。
- 参数:
huart
:指向UART_HandleTypeDef
结构体的指针。pData
:指向要发送的数据的指针。Size
:要发送的数据的长度。Timeout
:发送超时时间。
- 返回值:返回一个枚举类型的值,表示发送是否成功。
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
3.HAL_UART_Transmit_IT( )
- 功能:以中断方式发送指定长度的数据。
- 参数:与
HAL_UART_Transmit
相同。 - 返回值:返回一个枚举类型的值,表示发送是否成功启动。
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
4.HAL_UART_Transmit_DMA( )
- 功能:以DMA(直接存储器访问)方式发送指定长度的数据。
- 参数:与
HAL_UART_Transmit
相同。 - 返回值:返回一个枚举类型的值,表示发送是否成功启动。
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
接收函数:
5.HAL_UART_Receive( )
- 功能:接收指定长度的数据。
- 参数:与
HAL_UART_Transmit
相同。 - 返回值:返回一个枚举类型的值,表示接收是否成功。
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
6.HAL_UART_Receive_IT()
- 功能:以中断方式接收指定长度的数据。
- 参数:与
HAL_UART_Transmit
相同。 - 返回值:返回一个枚举类型的值,表示接收是否成功启动。
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
7.HAL_UART_Receive_DMA( )
- 功能:以DMA方式接收指定长度的数据。
- 参数:与
HAL_UART_Transmit
相同。 - 返回值:返回一个枚举类型的值,表示接收是否成功启动。
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
UART中断处理函数
UART中断处理函数通常是由HAL库内部调用的,但用户需要编写相应的中断服务函数(ISR)和回调函数来处理UART中断。例如,当使用中断方式发送或接收数据时,用户需要编写ISR来调用HAL库提供的HAL_UART_IRQHandler
函数,并在回调函数中处理发送或接收完成的事件。
UART的中断回调函数:
HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
: 当UART传输完成时调用。HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
: 当UART接收完成时调用。HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart)
: 当UART传输一半数据时调用(如果使能了此中断)。HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart)
: 当UART接收一半数据时调用(如果使能了此中断)。HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
: 当UART发生错误时调用(如噪声、帧错误、溢出等)。
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{ if (huart->Instance == USART1) { // 处理USART1传输完成的事件 // ... }
} void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{ if (huart->Instance == USART1) { // 处理USART1接收完成的事件 // ... }
}
示例代码:
UART_HandleTypeDef huart1;
uint8_t txData[] = "Hello, UART!";
uint8_t rxData[10]; // UART初始化
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart1); // 发送数据
HAL_UART_Transmit(&huart1, txData, strlen((char *)txData), HAL_MAX_DELAY); // 接收数据
HAL_UART_Receive(&huart1, rxData, 10, HAL_MAX_DELAY);
void USART1_IRQHandler(void)
{ HAL_UART_IRQHandler(&huart1);
}
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0); // 设置中断优先级
HAL_NVIC_EnableIRQ(USART1_IRQn); // 使能USART1中断
中断接收回调函数示例:
uint8_t dataRcvd;
void main(void)
{HAL_UART_Receive_IT(&huart1,&dataRcvd,1);while(1){}}void HAL_URAT_RxCpltCallback()
{if(huart->Instance == USART1){}else if( ){}HAL_UART_Receive_IT(&huart1,&dataRcvd,1);
}
3.SPI常用函数:
A47 STM32_HAL库函数 之 SPI通用驱动 所有函数的介绍及使用_hal库spi有关函数配置-CSDN博客
HAL_MAX_DELAY
4.定时器常用函数:
1. HAL_TIM_Base_Init 函数
定时器的初始化函数,其声明如下:
HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim);
⚫ 函数描述: 用于初始化定时器。
⚫ 函数形参: 形参 1 是 TIM_HandleTypeDef 结构体类型指针变量(亦称定时器句柄),结构体定义如下:
typedef struct {TIM_TypeDef *Instance; /* 外设寄存器基地址 */TIM_Base_InitTypeDef Init; /* 定时器初始化结构体*/HAL_TIM_ActiveChannel Channel; /* 定时器通道 */DMA_HandleTypeDef *hdma[7]; /* DMA 管理结构体 */HAL_LockTypeDef Lock; /* 锁定资源 */__IO HAL_TIM_StateTypeDef State; /* 定时器状态 */__IO HAL_TIM_ChannelStateTypeDef ChannelState;/* 定时器通道状态 */__IO HAL_TIM_ChannelStateTypeDef ChannelNState; /* 定时器互补通道状态 */__IO HAL_TIM_DMABurstStateTypeDef DMABurstState; /* DMA 溢出状态 */}TIM_HandleTypeDef;
1)Instance:指向定时器寄存器基地址。
2)Init:定时器初始化结构体,用于配置定时器的相关参数。
3)Channel:定时器的通道选择,基本定时器没有该功能。
4)hdma[7]:用于配置定时器的 DMA 请求。
5)Lock:ADC 锁资源。
6)State:定时器工作状态。
7)ChannelState/ChannelNState:定时器通道/互补通道工作状态。
8)DMABurstState:DMA 溢出状态。
2.TIM_Base_InitTypeDef 这个结构体类型
typedef struct
{ uint32_t Prescaler; /* 预分频系数 */ uint32_t CounterMode; /* 计数模式 */ uint32_t Period; /* 自动重载值 ARR */ uint32_t ClockDivision; /* 时钟分频因子 */ uint32_t RepetitionCounter; /* 重复计数器 */ uint32_t AutoReloadPreload; /* 自动重载预装载使能 */
} TIM_Base_InitTypeDef;
1)Prescaler:预分频系数,即写入预分频寄存器的值,范围 0 到 65535。
2)CounterMode:计数器计数模式,这里基本定时器只能向上计数。
3)Period:自动重载值,即写入自动重载寄存器的值,范围 0 到 65535。
4)ClockDivision:时钟分频因子,也就是定时器时钟频率 CK_INT 与数字滤波器所使用的采样 时钟之间的分频比,基本定时器没有此功能。
5)RepetitionCounter:设置重复计数器寄存器的值,用在高级定时器中。
6)AutoReloadPreload:自动重载预装载使能,即控制寄存器 1 (TIMx_CR1)的 ARPE 位。
⚫ 函数返回值: HAL_StatusTypeDef 枚举类型的值。
1.按键扫描函数
#define KEY0 HAL_GPIO_ReadPin(KEY0_GPIO_PORT, KEY0_GPIO_PIN) /* 读取KEY0引脚 */
#define KEY1 HAL_GPIO_ReadPin(KEY1_GPIO_PORT, KEY1_GPIO_PIN) /* 读取KEY1引脚 */
#define KEY2 HAL_GPIO_ReadPin(KEY2_GPIO_PORT, KEY2_GPIO_PIN) /* 读取KEY2引脚 */
#define WK_UP HAL_GPIO_ReadPin(WKUP_GPIO_PORT, WKUP_GPIO_PIN) /* 读取WKUP引脚 */#define KEY0_PRES 1 /* KEY0按下 */
#define KEY1_PRES 2 /* KEY1按下 */
#define KEY2_PRES 3 /* KEY2按下 */
#define WKUP_PRES 4 /* KEY_UP按下(即WK_UP) */void key_init(void); /* 按键初始化函数 */
uint8_t key_scan(uint8_t mode); /* 按键扫描函数 */
/*** @brief 按键扫描函数* @note 该函数有响应优先级(同时按下多个按键): WK_UP > KEY2 > KEY1 > KEY0!!* @param mode:0 / 1, 具体含义如下:* @arg 0, 不支持连续按(当按键按下不放时, 只有第一次调用会返回键值,* 必须松开以后, 再次按下才会返回其他键值)* @arg 1, 支持连续按(当按键按下不放时, 每次调用该函数都会返回键值)* @retval 键值, 定义如下:* KEY0_PRES, 1, KEY0按下* KEY1_PRES, 2, KEY1按下* KEY2_PRES, 3, KEY2按下* WKUP_PRES, 4, WKUP按下*/
uint8_t key_scan(uint8_t mode)
{static uint8_t key_up = 1; /* 按键按松开标志 */uint8_t keyval = 0;if (mode) key_up = 1; /* 支持连按 */if (key_up && (KEY0 == 0 || KEY1 == 0 || KEY2 == 0 || WK_UP == 1)) /* 按键松开标志为1, 且有任意一个按键按下了 */{delay_ms(10); /* 去抖动 */key_up = 0;if (KEY0 == 0) keyval = KEY0_PRES;if (KEY1 == 0) keyval = KEY1_PRES;if (KEY2 == 0) keyval = KEY2_PRES;if (WK_UP == 1) keyval = WKUP_PRES;}else if (KEY0 == 1 && KEY1 == 1 && KEY2 == 1 && WK_UP == 0) /* 没有任何按键按下, 标记按键松开 */{key_up = 1;}return keyval; /* 返回键值 */
}
相关文章:

HAL库常用的函数:
目录 HAL库: 1.GPIO常用函数: 1.HAL_GPIO_ReadPin( ) 2.HAL_GPIO_WritePin( ) 3.HAL_GPIO_TogglePin( ) 4.HAL_GPIO_EXTI_IRQHandler( ) 5.HAL_GPIO_EXTI_Callback( ) 2.UART常用函数: 1.HAL_U…...

如何捕捉行情爆发的前兆
在金融市场的激烈角逐中,每一次行情的爆发都是投资者获取丰厚回报的关键时刻。然而,如何识别并把握这些时刻,却是一门需要深厚金融专业知识和敏锐洞察力的艺术。今天,我们就来深入探讨行情爆发的初期信号,揭示那些能够…...

【万字长文】Word2Vec计算详解(一)CBOW模型
【万字长文】Word2Vec计算详解(一)CBOW模型 写在前面 本文用于记录本人学习NLP过程中,学习Word2Vec部分时的详细过程,本文与本人写的其他文章一样,旨在给出Word2Vec模型中的详细计算过程,包括每个模块的计…...

React Native源码学习
核心组件 基础组件:View、Text、Image、TextInput、ScrollView(性能没有FlatList好,因为它会一次性把子元素渲染出来)、StyleSheet交互组件:button列表视图:FlatList(优先渲染屏幕上可见的元素&…...

【计网】从零开始认识https协议 --- 保证安全的网络通信
在每个死胡同的尽头, 都有另一个维度的天空, 在无路可走时迫使你腾空而起, 那就是奇迹。 --- 廖一梅 --- 从零开始认识https协议 1 什么是https协议2 https通信方案2.1 只使用对称加密2.2 只使用非对称加密2.3 双方都使用非对称加密2.4 …...

Ubuntu安装 MySQL【亲测有效】
在Ubuntu上安装MySQL数据库的步骤通常包括更新软件包列表、安装MySQL服务器、启动并配置MySQL服务等。以下是一个详细的安装指南: 一、更新软件包列表 首先,打开终端并输入以下命令来更新Ubuntu的软件包列表: sudo apt update二、安装MySQ…...

Unity 从零开始搭建一套简单易用的UGUI小框架 扩展与优化篇(完结)
一个通用的UGUI小框架就算是写完了,下面是一步步的思考与优化过程 Unity 从零开始搭建一套简单易用的UGUI小框架 基础分析篇-CSDN博客 Unity 从零开始搭建一套简单易用的UGUI小框架 功能撰写与优化篇-CSDN博客 从使用者的角度来整理一下可能会发出的疑问 0. Panel…...

MySQL多表操作--外键约束多表关系
外键约束介绍 Mysql外键约束(foreign key)是表的一个特殊字段,常与主键约束一起使用。外键约束是一种用于维护两个表之间数据一致性的方法。它确保引用表中的每个值都存在于主表中的某个列中。外键约束通常用于实现数据库的参照完整性。对于两…...

【python入门到精通专题】8.装饰器
装饰器是python语言中的语法糖,可以通过装饰器对函数的功能进行拓展。 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数。 def say_hello():print("hello!")def say_goodbye():print("hello!") # 此处应打印go…...

Halcon Blob分析提取小光斑
文章目录 算子complement 返回一个区域的补集select_region_point 选择包含指定像素的所有区域intensity 计算灰度值的均值和偏差 案例 算子 complement 返回一个区域的补集 complement(Region : RegionComplement : : )Region (输入对象):这指的是输入的一个或多…...

Lua
1.声明一个变量 只要赋值一个变量,就相当于新建了一个变量,默认全局变量,加一个local前缀之后,这个变量就变成了局部变量 a1//全局变量 local b2//局部变量2.nil类型 在Lua里没有被声明过的变量都是nil,nil是一种类…...

模型 总观效应
系列文章 分享 模型,了解更多👉 模型_思维模型目录。超越自我,洞见生命之渺小。 1 总观效应的呈现和应用 1.1 回首创业路,星辰大海的启示 陈浩是一名连续创业者,他的创业历程充满了起伏和挑战。在经历了几次失败后&a…...

【HarmonyOS NEXT】实现页面水印功能
关键词:鸿蒙、水印、Watermark、页面、触摸问题 注:本期文章同样适用 OpenHarmony 的开发 在app开发过程中时常会出现敏感信息页面,为保护信息安全和及时的数据追踪,通常会采用给页面加水印的形式,那么本期文章会介绍…...

selenium自动化测试之Junit
1. 常用的注解 将junit的索引添加到pom文件: <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId&…...

【氮化镓】基于氮化镓的互补逻辑集成电路[Nature Electronics]
【摘要】本文介绍了一种基于氮化镓(GaN)的互补金属氧化物半导体(CMOS)逻辑集成电路,该电路利用氧等离子体处理技术实现了增强型n沟道和p沟道GaN场效应晶体管的单片集成。研究者们展示了包括反相器、与非门、或非门和传输门在内的基本逻辑门,以及多级逻辑电路,如锁存器和…...

Linux之如何找回 root 密码?
1、启动系统,进入开界面,在界面中按“e"进入编辑界面 2、进入编辑界面,使用键盘上的上下键把光标往下移动,找到以”Linux16“开通内容所在的行数,在行的最后面输入:init/bin/sh 3、输入完成后&…...

后端参数校验方式
1. 使用Hibernate Validator进行注解校验 这是Java中最常用的参数校验方式,基于JSR 303/JSR 380规范的实现,通常结合Valid或Validated注解进行参数校验。 使用步骤: 添加依赖(如果使用Spring Boot,通常已经内置了Hi…...

访问控制列表(课内实验)
实验2:访问控制列表 实验目的及要求: 通过实验,进一步的理解标准ACL与扩展ACL的工作原理及执行过程。理解通配符的概念,熟练掌握标准ACL与扩展ACL的配置指令,掌握将访问控制列表应用VTY线路上,并且能够判断…...

处理Java内存溢出问题(java.lang.OutOfMemoryError):增加JVM堆内存与调优
处理Java内存溢出问题(java.lang.OutOfMemoryError):增加JVM堆内存与调优 在进行压力测试时,遇到java.lang.OutOfMemoryError: Java heap space错误或者nginx报错no live upstreams while connecting to upstream通常意味着应用的…...

数据分析库Pandas
一、认识Pandas数据分析库 Pandas是一个功能强大的数据分析库,它提供了丰富的数据结构和函数来处理和分析表格数据。在处理类似您提供的Excel文件时,首先需要导入Pandas库并读取数据,然后进行数据清洗和预处理,最后进行数据分析和…...

nginx做负载均衡的策略有哪些和模块
文章目录 策略模块 策略 轮询:轮询是Nginx默认的负载均衡策略,每个请求会按时间顺序分配到不同的后端服务器。这种方式适用于服务器配置相当且无状态的服务场景。加权轮询:在轮询的基础上,通过设置权重来调整不同服务器处理请求的…...

基于SSM社区医院预约转诊管理系统JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解
源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储:…...

Android适配器更改,ListView未收到通知解析
只需要在每次适配器发生变化时,调用函数adapter.notifyDataSetChanged(); 其中的adapter是适配器名。 需要说明的适配器对应的数组:List<String>也是适配器的一部分。 如:以下代码中的lists数组 List<T> lists new ArrayLis…...

ubuntu18.04系统中图形化界面
一、Ubuntu 18.04 中,使用 GDM 作为默认的图形用户界面(GUI)管理器。GDM 是 GNOME Display Manager 的缩写,它是用于 Ubuntu 的显示管理器,负责处理登录和会话管理。 通过命令行重启 Ubuntu 18.04 上的图形界面服务&am…...

深入Semantic Kernel:插件开发与实践应用(进阶篇)
文章目录 一、引言二、开发Semantic Kernel插件三、实战3.1 时间信息插件3.2 小部件工厂插件3.3 初始化Semantic Kernel实例3.4 四个实战示例3.4.1 模型幻觉3.4.2 给模型提供时间信息3.4.3 AI自动调用函数3.4.4 AI自动调用和使用枚举 四、结论 一、引言 在上一篇入门文章《探索…...

基于SpringBoot+Vue+Uniapp的植物园管理小程序系统(2024最新,源码+文档+远程部署+讲解视频等)
3. 论文参考 4. 项目运行截图 5. 技术框架 5.1 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring …...

2024zzuacm新生选拔赛第一场
2024zzuacm新生选拔赛第一场https://ac.nowcoder.com/acm/contest/92409 python代码源自我有异议症QAQ A - 降智视频 题意 起初有n个数都在丁丁手中,进行如下操作k次: 豆豆从丁丁手中拿走标号为奇数的数。对丁丁的其他的数进行重新标号。 问进行k次…...

IP地址如何支持远程办公?
由于当今社会经济的飞速发展,各个方向的业务都不免接触到跨省、跨市以及跨国办公的需要,随之而来的远程操作的不方便,加载缓慢,传输文件时间过长等困难,如何在万里之外实现远程办公呢?我们以以下几点进行阐…...

spring 集合注入格式
数组 List Set Map properties 案例 package org.example.dao.impl;import org.example.dao.BookDao;import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set;public class BookDaoImpl implements BookDao {private int[] array;p…...

基于Zabbix进行服务器运行情况监测
文章目录 引言I Zabbix主要构成下载并安装Zabbix被监控主机安装zabbix agent创建被监控主机报警设置II 常见问题cannot use database "zabbix": its "users" table is empty (is this the Zabbix proxy database?)重置 Zabbix Web 界面密码Zabbix agent i…...