[STM32 - 野火] - - - 固件库学习笔记 - - -十一.电源管理系统
一、电源管理系统简介
电源管理系统是STM32硬件设计和系统运行的基础,它不仅为芯片本身提供稳定的电源,还通过多种电源管理功能优化功耗、延长电池寿命,并确保系统的可靠性和稳定性。
二、电源监控器
作用:保证STM32芯片工作在它自己要求的一个电压范围内。
STM32芯片主要通过引脚VDD从外部获取电源,在它的内部具有电源监控器用于检测VDD的电压,以实现复位功能及掉电紧急处理功能,保证系统地运行。
2.1 上电复位(POR)与掉电复位(PDR)
POR:Power On Reset;
PDR:Power Down Reset;

当VDD/VDDA低于指定的限位电压VPOR/VPDR时,系统保持为复位状态,而无需外部复位电路。
-
在刚开始上电,电压低于VPOR(约1.92V)时,系统保持在上电复位状态,当VDD电压持续上升到大于VPOR时,系统开始正常运行;
-
在系统正常运行时,检测到VDD电压下降至低于VPDR阈值(约1.88V)时,系统会进入掉电复位状态。
VPOR与VPDR的差值大概在40mv。
2.2 可编程电压监控器(PVD)
除了POR与PDR功能,STM32还提供了PVD用于实时检测VDD电压:当检测到VDD电压低于编程的VPVD阈值时,会向内核产生一个PVD中断(EXTI16线中断,该中断不用手动设置)以使内核在复位前进行紧急处理。
当VDD下降到PVD阀值以下和(或)当VDD上升到PVD阀值之上时,根据外部中断第16线的上升/下降边沿触发设置,就会产生PVD中断。

使用PVD可配置8个等级。

其中,上升沿和下降沿分别表示VDD电压上升过程及下降过程的阈值。
PVD可以理解为POR与PDR的升级版,对电压值可编程,复位前通过中断通知。
三、电源系统

STM32的电源系统主要分为ADC电路、调压器供电电路以及备份域电路三个部分。
3.1 ADC电路(VDDA供电区域)
ADC电路的工作电源使用VDDA引脚输入,使用VSSA作为独立的地连接,VRED引脚则为ADC提供测量使用的参考电压。
-
为什么ADC配有单独的电源接口?
- 为了提高转换精度,方便进行单独的滤波。
VDDA供电区域包含模数转换的一部分。
3.2 调压器供电电路(VDD/1.8V供电区域)
调压器供电电路是STM32电源系统中最主要的部分,为备份域及待机模式以外的所有数字电路供电,其中包括内核、数字外设(例如串口、GPIO口、CAN口等)以及RAM。
调压器的输出电压约为1.8V。
调压器可以工作在运行模式、停止模式以及待机模式。
-
在运行模式下,1.8V域全功率运行;
-
在停止模式下 1.8V 域运行在低功耗状态, 1.8V 区域的所有时钟都被关闭,相应的外设都停止了工作,但它会保留内核寄存器以及 SRAM 的内容;
-
在待机模式下,整个 1.8V 域都断电,该区域的内核寄存器及 SRAM 内容都会丢失 (备份区域的寄存器不受影响);
除了后备供电区域外的所有数字逻辑都包含在VDD供电区域,VDD供电区只包含数字逻辑,不包含模拟。
CPU核心就是cortex m3内核,电压调节器用来调节供给cortex内核是否供电。换句话说,cortex核心由电压调节器单独供电。
3.3 备份域电路
备份域电路给晶振、时钟供电。
STM32 的 LSE 振荡器、 RTC 及备份寄存器这些器件被包含进备份域电路中,这部分的电路可以通过 STM32 的 VBAT 引脚获取供电电源,在实际应用中一般会使用 3V 的钮扣电池对该引脚供电。

上图中的电源开关结构,类似于下图中的二极管。
后备供电区域由VBAT与VDD选择供电:
- 当主电源供电时,上面是3.3V大于下面纽扣电池的输出电压,主电源供电给MCU;
- 当主电源掉电时,就由纽扣电池给MCU供电。
BDCR寄存器:备份域寄存器,可以往这个寄存器中存储一些数据,主电掉电后不会丢失(有纽扣电池)。
四、低功耗模式
按功耗由高到低排列, STM32 具有运行、睡眠、停止和待机四种工作模式。
上电复位后 STM32处于运行状态时,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式降低功耗。
这三种模式中,电源消耗不同、唤醒时间不同、唤醒源不同,用户需要根据应用需求,选择最佳的低功耗模式。

4.1 睡眠模式
在睡眠模式中,仅关闭了内核时钟,内核停止运行,但其片上外设, CM3 核心的外设全都还照常运行。
- 进入睡眠模式:通过执行WFI(Wait For Interrupt)或WFE(Wait For Event)指令进入睡眠状态。

从睡眠模式唤醒后,程序会在进入睡眠模式的地方进行执行。
-
WFI与WFE的区别:
- WFI需要进入中断服务函数中执行;
- WFE不需要进入中断服务函数中执行,节省一点时间;
4.2 停止模式
在停止模式中,进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其 1.2V区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码。
停止模式可以由任意一个外部中断 (EXTI) 唤醒,在停止模式中可以选择电压调节器为开模式或低功耗模式。

-
若调压器处于低功耗模式下,唤醒的时间要长一点。(等待调压器恢复)
-
通过SLEEPDEEP位的设置,选择进入睡眠模式还是停止模式。(设置为0进入睡眠模式,设置为1进入停止模式)
4.3 待机模式
待机模式,它除了关闭所有的时钟,还把 1.8V 区域的电源也完全关闭了。
从待机模式唤醒,程序会从启动文件开始执行(相当于复位了)。
待机模式有四种唤醒方式,分别是== WKUP(PA0) 引脚的上升沿==, RTC 闹钟事件,== NRST 引脚的复位==和 IWDG(独立看门狗) 复位。

-
睡眠模式、停止模式以及待机待机模式,若备份域电源正常供电,备份域内的RTC都可以正常运行,备份域内的寄存器的数据会被保存,不受功耗模式影响。
-
在进入待机模式后,除了被使能了的用于唤醒的 I/O,其余 I/O 都进入高阻态。
5、实验设计
5.1 睡眠模式
// main.c文件
#include "stm32f10x.h"
#include "bsp_key.h"
#include "bsp_exti.h"
#include "bsp_systick.h"
#include "usart.h"char str[10] = {0};int main(void)
{EXTI_KEY1_Config();EXTI_KEY2_Config();USART_Config();printf("\r\n 睡眠前 \r\n");__WFI();printf("\r\n 唤醒后 \r\n");printf("\r\n str:%s \r\n", str);while(1){printf("\r\n 睡眠前 \r\n");__WFI();printf("\r\n 唤醒后 \r\n");printf("\r\n str:%s \r\n", str);}}
// stm32f10x_it.c
extern char str[10];
void EXTI0_IRQHandler(void)
{if(EXTI_GetFlagStatus(EXTI_Line_KEY1) != RESET){//LED_G_TOGGLE();strcpy(str, "按键1中断");}EXTI_ClearFlag(EXTI_Line_KEY1);
}// 这里的中断名称不要写成 EXTI4_IRQHandler
void EXTI15_10_IRQHandler(void)
{if(EXTI_GetFlagStatus(EXTI_Line_KEY2) != RESET){//LED_B_TOGGLE();strcpy(str, "按键2中断");}EXTI_ClearFlag(EXTI_Line_KEY2);
}void USART1_IRQHandler(void)
{uint8_t ucTemp;if(USART_GetFlagStatus(DEBUG_USARTx, USART_IT_RXNE) != RESET){strcpy(str, "串口中断");ucTemp = USART_ReceiveData(DEBUG_USARTx);USART_SendData(DEBUG_USARTx, ucTemp);}
}

注意:不建议在中断服务函数中添加打印函数,可能会影响系统的运行速度。
- 可以在中断服务函数中把要打印的数据赋值给变量,在主函数中打印。
在 USART1_IRQHandler 中断服务函数中,如果将函数内容改为:
void USART1_IRQHandler(void)
{uint8_t ucTemp;if(USART_GetFlagStatus(DEBUG_USARTx, USART_IT_RXNE) != RESET){strcpy(str, "串口中断");}
}
在串口上无法看到打印的数据,原因:
-
没有清除接受中断标志位,中断标志位会一直保持在置位状态,导致中断服务函数一直被反复触发,程序一直执行中断服务函数,无法正常执行主函数逻辑。
-
执行了USART_ReceiveData函数会自动清除RXNE标志位。
5.2 停止模式
// main.c文件
#include "stm32f10x.h"
#include "bsp_key.h"
#include "bsp_exti.h"
#include "bsp_rccclkconfig.h"
#include "bsp_systick.h"
#include "usart.h"char str[10] = {0};static void SYSCLKConfig_STOP(void);int main(void)
{EXTI_KEY1_Config();EXTI_KEY2_Config();USART_Config();printf("\r\n 睡眠前 \r\n");SysTick_Delay_ms(500);PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);/* 恢复 HSE 时钟 */SYSCLKConfig_STOP();printf("\r\n 唤醒后 \r\n");printf("\r\n str:%s \r\n", str);while(1){}}/*** @brief 从停止模式唤醒后配置系统时钟:启用HSE、PLL并选择PLL作为系统时钟源。* @param 无* @retval 无*/
static void SYSCLKConfig_STOP(void)
{/* After wake-up from STOP reconfigure the system clock *//* 使能 HSE */RCC_HSEConfig(RCC_HSE_ON);/* 等待 HSE 准备就绪 */while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET){}/* 使能 PLL */RCC_PLLCmd(ENABLE);/* 等待 PLL 准备就绪 */while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}/* 选择PLL作为系统时钟 */RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/* 等待PLL被选择为系统时钟 */while(RCC_GetSYSCLKSource() != 0x08){}
}

- 进入了停止模式,退出时如果没有恢复HSE时钟,系统的时钟可能会与进入停止模式的时钟不同,导致一些其他问题,如串口发送错误:

5.3 待机模式
// main.c文件
#include "stm32f10x.h"
#include "bsp_exti.h"
#include "bsp_rccclkconfig.h"
#include "bsp_systick.h"
#include "usart.h"char str[10] = {0};static void SYSCLKConfig_STOP(void);int main(void)
{USART_Config();printf("\r\n 睡眠前 \r\n");SysTick_Delay_ms(500);// 进入待机模式必须开启PWR时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);// 使能 PA0 引脚上升沿唤醒PWR_WakeUpPinCmd(ENABLE);PWR_EnterSTANDBYMode();printf("\r\n 唤醒后 \r\n");printf("\r\n str:%s \r\n", str);while(1){}}

注意:
-
1、进入待机模式时必须开启PWR时钟;
-
2、使用PA0引脚上升沿唤醒,调用PWR_WakeUpPinCmd(ENABLE)即可;
-
3、PA0 引脚上升沿唤醒与复位键唤醒效果相同,系统都会从头开始运行。
5.4 PVD检测
PVD会产生EXTI16中断。
// main.c文件
#include "stm32f10x.h"
#include "bsp_exti.h"
#include "bsp_led.h"
#include "bsp_rccclkconfig.h"
#include "bsp_systick.h"
#include "usart.h"
#include "bsp_pvd.h"int main(void)
{PVD_Config();USART_Config();while(1){}}
// bsp_pvd.c文件
#include "bsp_pvd.h"static void EXTI_PVD_NVIC_Config(void)
{NVIC_InitTypeDef NVIC_InitStruct;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStruct.NVIC_IRQChannel = PVD_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStruct);
}void PVD_Config(void)
{EXTI_InitTypeDef EXTI_InitStruct;// 配置 NVIC EXTI_PVD_NVIC_Config();// 开启 PWR 时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);/* 选择EXTI的信号源 */EXTI_InitStruct.EXTI_Line = EXTI_Line16;/* EXTI为中断模式 */EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;/* 上升沿中断 */EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;/* 使能中断 */EXTI_InitStruct.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStruct);// 3.3V 引脚 的电压低于2.6V会产生中断,其中3.3V引脚与STM32的VDD引脚相连PWR_PVDLevelConfig(PWR_PVDLevel_2V6);PWR_PVDCmd(ENABLE);
}
// bsp_pvd.h文件
#ifndef __BSP_PVD_H
#define __BSP_PVD_H#include "stm32f10x.h"void PVD_Config(void);#endif /* __BSP_PVD_H */
// stm32f10x_it.c文件
void PVD_Handler(void)
{if(PWR_GetFlagStatus(PWR_FLAG_PVDO) == SET){// 此处做电压下降的紧急处理LED_B(ON);}EXTI_ClearITPendingBit(EXTI_Line16);
}

PVD监控VDD的引脚电压,当VDD引脚电压低于设定值时产生PVD中断。
另外,
-
进入睡眠模式、停止模式、待机模式后,不能使用调试功能。
-
进入低功耗模式后,程序下载不进去,解决方法:
-
1、退出低功耗模式再下载(SWD、SCK引脚没有被更改为其他模式);
-
2、接RST复位引脚或按复位按键;
-
相关文章:
[STM32 - 野火] - - - 固件库学习笔记 - - -十一.电源管理系统
一、电源管理系统简介 电源管理系统是STM32硬件设计和系统运行的基础,它不仅为芯片本身提供稳定的电源,还通过多种电源管理功能优化功耗、延长电池寿命,并确保系统的可靠性和稳定性。 二、电源监控器 作用:保证STM32芯片工作在…...
DBO优化最近邻分类预测matlab
蜣螂优化算法(Dung Beetle Optimizer,简称 DBO)作为一种新兴的群智能优化算法,于 2022 年末被提出,其灵感主要来源于蜣螂的滚球、跳舞、觅食、偷窃以及繁殖等行为。 本次使用的数据为 Excel 格式的分类数据集。该数据…...
【深入理解FFMPEG】命令行阅读笔记
这里写自定义目录标题 第三章 FFmpeg工具使用基础3.1 ffmpeg常用命令3.1.13.1.3 转码流程 3.2 ffprobe 常用命令3.2.1 ffprobe常用参数3.2.2 ffprobe 使用示例 3.3 ffplay常用命令3.3.1 ffplay常用参数3.3.2 ffplay高级参数3.3.4 ffplay快捷键 第4章 封装与解封装4.1 视频文件转…...
图形化数据报文转换映射工具
目录 概要整体架构流程技术名词解释技术细节小结 概要 在当今数字化时代,数据的处理和分析是企业、科研机构以及各类组织日常运营的核心环节。数据来源广泛,格式多样,常见的数据格式包括XML(可扩展标记语言)和JSON&a…...
智能体0门槛开发
分享一个智能体开发流程。 2025 年啊,好多专家还有行业报告都觉得这是智能体(AI Agent)应用的头一年。相关的应用在商业、工业、消费等好些领域都到了关键的时候,这意味着从实验室走向大规模实际应用的重要转变。而且呢࿰…...
ssh密钥登录GitHub时一直提示“Error: Permission denied (publickey)”
起因 环境:Windows10 背景:之前就是按照官方说明创建个rsa密钥,在git后台添加上,就行了,近期怎么添加怎么失败,总是“Error: Permission denied (publickey)”的提示! 尝试 各种尝试…...
mapbox加载geojson,鼠标移入改变颜色,设置样式以及vue中的使用
全国地图json数据下载地址 目录 html加载全部代码 方式一:使用html方式加载geojson 1. 初始化地图 2. 加载geojson数据 设置geojson图层样式,设置type加载数据类型 设置线条 鼠标移入改变颜色,设置图层属性,此处是fill-extru…...
考研机试题:打印日期
描述 给出年分m和一年中的第n天,算出第n天是几月几号。 输入描述: 输入包括两个整数y(1<y<3000),n(1<n<366)。 输出描述: 可能有多组测试数据,对于每组数据, 按 yyyy-mm-dd的格式将输入中对应的日期打印出来。 …...
OpenHarmonyOS 3.2 编译生成的hap和app文件的名称如何配置追加版本号?
找了一圈发现官方的文档都是最新的,3.2很多API都不支持,比如获取OhosAppContext,通过OhosAppContext来获取应用版本号,最终是通过读取app.json5的文件内容来读取版本号,最终修改entry下的hvigorfile.ts如下,…...
【openwrt】openwrt odhcpd配置介绍
odhcpd odhcpd是一个嵌入式DHCP/DHCPv6/RA服务器和NDP中继的进程,odhcpd是一个守护进程,用于服务和中继IP管理协议,以配置客户端和下游路由器。它试图遵循IPv6家用路由器的RFC 6204要求。odhcpd为DHCP、RA、无状态SLAAC和有状态DHCPv6、前缀委派提供服务器服务,并可用于在没…...
基于神经网络的视频编码NNVC(1):帧内预测
在H.266/VVC发布后,基于传统编码框架提升压缩率越来越难,随着深度学习的发展,研究人员开始尝试将神经网络引入编码器。为此,JVET工作组在2020年成立AHG11小组来专门进行基于神经网络的视频编码的研究。 为了方便研究,工…...
Android开发,待办事项提醒App的设计与实现
文章目录 1. 研究目的2. 主要内容3. 运行效果图4. 涉及到的技术点5. 开发环境6. 关于作者其它项目视频教程介绍 1. 研究目的 当今,随着时代的发展和计算机的普及,人们开始利用网络来记录并管理日常的事务,时下这方面的软件数不胜数。各种日程管理软件就是将每天的工作和事务安…...
豆瓣Top250电影的数据采集与可视化分析(scrapy+mysql+matplotlib)
文章目录 豆瓣Top250电影的数据采集与可视化分析(scrapy+mysql+matplotlib)写在前面数据采集(Visual Studio Code+Navicat)1.观察网页信息2.编写Scrapy代码(Visual Studio Code)2.1 创建Scrapy项目`doubanProject`2.2 创建爬虫脚本`douban.py`2.3 修改`douban.py`的代码2…...
MySQL索引——让查询飞起来
文章目录 索引是什么??硬件理解MySQL与存储 MySQL 与磁盘交互基本单位索引的理解B vs B聚簇索引 VS 非聚簇索引索引操作创建主键索引唯一索引的创建普通索引的创建全文索引的创建查询索引删除索引 在现代数据库应用中,查询性能是决定系统响应…...
Springboot集成Elasticsearch8.0(ES)版本,采用JAVA Client方式进行连接和实现CRUD操作
本文章介绍了 springboot t集成Elasticsearch8.0(ES)版本,如何通过 AVA Client方式进行连接和实现CRUD操作 在ES7.15版本之后,ES官方将高级客户端 RestHighLevelClient标记为弃用状态。同时推出了全新的 Java API客户端 Elasticsearch Java API Client,该客户端也将在 Ela…...
【Linux】APT 密钥管理迁移指南:有效解决 apt-key 弃用警告
引言 随着 Debian 11 和 Ubuntu 22.04 版本的推出,APT 的密钥管理方式发生了重大的变化。apt-key 命令被正式弃用,新的密钥管理机制要求使用 /etc/apt/keyrings/ 或 /etc/apt/trusted.gpg.d/ 来存储和管理密钥。这一变化对管理员和普通用户来说至关重要…...
洛谷P1143 进制转换
题目链接:P1143 进制转换 - 洛谷 | 计算机科学教育新生态 题目难度:普及— 解题思路:本题先将输入的数转为10进制,然后取模,最后倒着输出就好了,最后直接上代码 #include<bits/stdc.h> using namespa…...
99.12 金融难点通俗解释:毛利率
目录 0. 承前1. 简述2. 比喻:冰淇淋店赚钱2.1 第一步:准备材料2.2 第二步:卖冰淇淋2.3 第三步:计算毛利率 3. 生活中的例子3.1 好的毛利率3.2 一般的毛利率3.3 差的毛利率 4. 小朋友要注意4.1 毛利率高不一定好4.2 毛利率低不一定…...
HUMANITY’S LAST EXAM (HLE) 综述:人工智能领域的“最终考试”
论文地址:Humanity’s Last Exam 1. 背景与动机 随着大型语言模型(LLMs)能力的飞速发展,其在数学、编程、生物等领域的任务表现已超越人类。为了系统地衡量这些能力,LLMs 需要接受基准测试(Benchmarks&…...
C++从入门到实战(二)C++命名空间
C从入门到实战(二)C命名空间 前言一、C的第一个程序二、命名空间(一)为什么需要命名空间(二)定义命名空间(三)使用命名空间1.通过命名空间限定符:2.使用 using 声明&…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

