当前位置: 首页 > news >正文

烟台高新区建设局网站/怎么样推广自己的公司

烟台高新区建设局网站,怎么样推广自己的公司,电影网站域名,网页培训哪个机构好1)实验平台:正点原子APM32E103最小系统板 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第三…

1)实验平台:正点原子APM32E103最小系统板
2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban

第三十三章 单通道ADC采集实验

本章介绍使用APM32E103模数转换器(ADC)进行带通道的电压采集。通过本章的学习,读者将学习到单通道ADC的使用。
本章分为如下几个小节:
33.1 硬件设计
33.2 程序设计
33.3 下载验证

33.1 硬件设计
33.1.1 例程功能

  1. ADC1采集通道1(PA1)上的电压,并在LCD上显示ADC转换后电压的数字量和换算后的模拟量
  2. LED0闪烁,指示程序正在运行
    33.1.2 硬件资源
  3. LED
    LED0 - PB5
  4. 正点原子 2.8/3.5/4.3/7/10寸TFTLCD模块(仅限MCU屏,16位8080并口驱动)
  5. ADC1
    通道1 - PA1
    33.1.3 原理图
    本章实验使用的ADC1为APM32E103的片上资源,因此没有对应的连接原理图。
    33.2 程序设计
    33.2.1 Geehy标准库的ADC驱动
    本章实验将使用ADC1的通道1(PA1引脚)采集外部输入电压的模拟量,并将其转换为数字量,其具体的步骤如下:
    ①:配置ADC
    ②:使能ADC
    ③:配置ADC规则通道
    ④:启动转换规则通道
    ⑤:等待规则通道转换结束
    ⑥:读取规则通道的转换结果
    在Geehy标准库中对应的驱动函数如下:
    ①:配置ADC
    该函数用于配置ADC的各项参数,其函数原型如下所示:
    void ADC_Config(ADC_T* adc, ADC_Config_T* adcConfig);
    该函数的形参描述,如下表所示:
    形参 描述
    adc 指向ADC外设结构体的指针
    例如:ADC1、ADC2等(在apm32e10x.h文件中有定义)
    adcConfig 指向ADC配置结构体的指针
    需自行定义,并根据ADC的配置参数填充结构体中的成员变量
    表33.2.1.1 函数ADC_Config()形参描述
    该函数的返回值描述,如下表所示:
    返回值 描述
    无 无
    表33.2.1.2函数ADC_Config()返回值描述
    该函数使用ADC_Config_T类型的结构体变量传入ADC外设的配置参数,该结构体的定义如下所示:
typedef enum
{
/* 独立模式 */
ADC_MODE_INDEPENDENT              = ((uint32_t)0x00000000), 
/* 组合的常规同时和注入同时模式 */ADC_MODE_REG_INJEC_SIMULT		   = ((uint32_t)0x00010000),
/* 组合的常规同时和交替触发模式 */
ADC_MODE_REG_SIMULT_ALTER_TRIG    = ((uint32_t)0x00020000),
/* 组合注入同时和快速交织模式 */
ADC_MODE_INJEC_SIMULT_FAST_TNTERL = ((uint32_t)0x00030000),
/* 组合注入同步和慢速交织模式 */
ADC_MODE_INJEC_SIMULT_SLOW_INTERL = ((uint32_t)0x00040000),
/* 注入同时模式 */
ADC_MODE_INJEC_SIMULT             = ((uint32_t)0x00050000),
/* 常规同时模式 */
ADC_MODE_REG_SIMULT               = ((uint32_t)0x00060000),
/* 快速交错模式 */
ADC_MODE_FAST_INTERL              = ((uint32_t)0x00070000),
/* 慢速交错模式 */
ADC_MODE_SLOW_INTERL              = ((uint32_t)0x00080000),
/* 备用触发模式 */ADC_MODE_ALTER_TRIG               = ((uint32_t)0x00090000) 
} ADC_MODE_T;typedef enum
{ADC_EXT_TRIG_CONV_TMR1_CC1  = ((uint32_t)0x00000000), /* 定时器1的CC1事件 */ADC_EXT_TRIG_CONV_TMR1_CC2  = ((uint32_t)0x00020000), /* 定时器1的CC2事件 */
ADC_EXT_TRIG_CONV_TMR2_CC2  = ((uint32_t)0x00060000), /* 定时器2的CC2事件 */
/* 定时器3的TRGO事件 */ADC_EXT_TRIG_CONV_TMR3_TRGO = ((uint32_t)0x00080000),
ADC_EXT_TRIG_CONV_TMR4_CC4  = ((uint32_t)0x000A0000), /* 定时器4的CC4事件 */
/* EINT线11的TRGO事件 */ADC_EXT_TRIG_CONV_EINT11_T8_TRGO  = ((uint32_t)0x000C0000),ADC_EXT_TRIG_CONV_TMR1_CC3  = ((uint32_t)0x00040000), /* 定时器1的CC3事件 */ADC_EXT_TRIG_CONV_None      = ((uint32_t)0x000E0000), /* 无事件 */ADC_EXT_TRIG_CONV_TMR3_CC1  = ((uint32_t)0x00000000), /* 定时器3的CC1事件 */
ADC_EXT_TRIG_CONV_TMR2_CC3  = ((uint32_t)0x00020000), /* 定时器2的CC3事件 */
ADC_EXT_TRIG_CONV_TMR8_CC1  = ((uint32_t)0x00060000), /* 定时器8的CC1事件 */
/* 定时器8的TRGO事件 */ADC_EXT_TRIG_CONV_TMR8_TRGO = ((uint32_t)0x00080000),ADC_EXT_TRIG_CONV_TMR5_CC1  = ((uint32_t)0x000A0000), /* 定时器5的CC1事件 */ADC_EXT_TRIG_CONV_TMR5_CC3  = ((uint32_t)0x000C0000)  /* 定时器5的CC3事件 */
} ADC_EXT_TRIG_CONV_T;typedef enum
{ADC_DATA_ALIGN_RIGHT = 0x00000000,                    /* 右对齐 */ADC_DATA_ALIGN_LEFT  = 0x00000800                     /* 左对齐 */
} ADC_DATA_ALIGN_T;typedef struct
{ADC_MODE_T          mode;uint8_t             scanConvMode;		/* 扫描模式 */uint8_t             continuosConvMode;	/* 连续转换模式 */ADC_EXT_TRIG_CONV_T externalTrigConv;	/* 启动规则组转换的外部事件 */ADC_DATA_ALIGN_T    dataAlign;			/* 数据对齐方式 */uint8_t             nbrOfChannel;		/* 规则通道序列长度 */
} ADC_Config_T;
该函数的使用示例,如下所示:
#include "apm32e10x.h"
#include "apm32e10x_adc.h"void example_fun(void)
{ADC_Config_T adc_init_struct;/* 配置ADC1 */adc_init_struct.mode = ADC_MODE_INDEPENDENT;adc_init_struct.scanConvMode = DISABLE;adc_init_struct.continuosConvMode = DISABLE;adc_init_struct.externalTrigConv = ADC_EXT_TRIG_CONV_None;adc_init_struct.dataAlign = ADC_DATA_ALIGN_RIGHT;adc_init_struct.nbrOfChannel = 1;ADC_Config(ADC_ADCX, &adc_init_struct);
}

②:使能ADC
该函数用于使能ADC,其函数原型如下所示:
void ADC_Enable(ADC_T* adc);
该函数的形参描述,如下表所示:
形参 描述
adc 指向ADC外设结构体的指针
例如:ADC1、ADC2等(在apm32e10x.h文件中有定义)
表33.2.1.3 函数ADC_Enable()形参描述
该函数的返回值描述如下表所示
返回值 描述
无 无
表33.2.1.4 函数ADC_Enable()返回值描述
该函数的使用示例,如下所示:

#include "apm32e10x.h"
#include "apm32e10x_adc.h"void example_fun(void)
{/* 使能ADC1 */ADC_Enable(ADC1);
}
③:配置ADC规则通道
该函数用于配置ADC规则通道,其函数原型如下所示:
void ADC_ConfigRegularChannel(	ADC_T* adc,uint8_t channel,uint8_t rank,uint8_t sampleTime);

该函数的形参描述,如下表所示:
形参 描述
adc 指向ADC外设结构体的指针
例如:ADC1、ADC2等(在apm32e10x.h文件中有定义)
channel ADC通道
例如:ADC_CHANNEL_0、ADC_CHANNEL_1等(在apm32e10x_adc.h文件中有定义)
rank 转换顺序
sampleTime ADC通道的采样周期
例如:ADC_SAMPLETIME_3CYCLES
ADC_SAMPLETIME_15CYCLES等(在apm32e10x_adc.h文件中有定义)
表33.2.1.5 函数ADC_ConfigRegularChannel()形参描述
该函数的返回值描述,如下表所示:
返回值 描述
无 无
表33.2.1.6 函数ADC_ConfigRegularChannel()返回值描述
该函数的使用示例,如下所示:

#include "apm32e10x.h"
#include "apm32e10x_adc.h"void example_fun(void)
{/* 使能ADC1通道1的规则通道 */ADC_ConfigRegularChannel(ADC1, ADC_CHANNEL_1, 1, ADC_SAMPLETIME_480CYCLES);
}

④:启动转换规则通道
该函数用于启动转换规则通道,其函数原型如下所示:
void ADC_EnableSoftwareStartConv(ADC_T* adc);
该函数的形参描述,如下表所示:
形参 描述
adc 指向ADC外设结构体的指针
例如:ADC1、ADC2等(在apm32e10x.h文件中有定义)
表33.2.1.7 函数ADC_EnableSoftwareStartConv ()形参描述
该函数的返回值描述,如下表所示:
返回值 描述
无 无
表33.2.1.8 函数ADC_EnableSoftwareStartConv ()返回值描述
该函数的使用示例,如下所示:

#include "apm32e10x.h"
#include "apm32e10x_adc.h"void example_fun(void)
{ADC_EnableSoftwareStartConv(ADC1); /* 使能ADC1转换规则通道 */
}

⑤:读取ADC状态标志
该函数用于读取ADC的状态标志,其函数原型如下所示:
uint8_t ADC_ReadStatusFlag(ADC_T* adc, ADC_FLAG_T flag);
该函数的形参描述,如下表所示:
形参 描述
adc 指向ADC外设结构体的指针
例如:ADC1、ADC2等(在apm32e10x.h文件中有定义)
flag 指定的ADC状态标志
例如:ADC_FLAG_AWD、ADC_FLAG_EOC等(在apm32e10x_adc.h文件中有定义)
表33.2.1.9 函数ADC_ReadStatusFlag()形参描述
该函数的返回值描述,如下表所示:
返回值 描述
SET 事件标志发生
RESET 事件标志为发生
表33.2.1.10 函数ADC_ReadStatusFlag()返回值描述
该函数的使用示例,如下所示:

#include "apm32e10x.h"
#include "apm32e10x_adc.h"void example_fun(void)
{uint8_t flag;/* 读取ADC1的转换结束标志 */flag = ADC_ReadStatusFlag(ADC1, ADC_FLAG_EOC)if (flag == SET){/* Do something. */}else{/* Do something. */}
}

⑥:读取规则通道转换结果
该函数用于读取规则通道的转换结果,其函数原型如下所示:
uint16_t ADC_ReadConversionValue(ADC_T* adc);
该函数的形参描述,如下表所示:
形参 描述
adc 指向ADC外设结构体的指针
表33.2.1.11 函数ADC_ReadConversionValue()形参描述
该函数的返回值描述,如下表所示:
返回值 描述
uint16_t类型数据 转换结果
表33.2.1.12 函数ADC_ReadConversionValue()返回值描述
该函数的使用示例,如下所示:

#include "apm32e10x.h"
#include "apm32e10x_adc.h"void example_fun(void)
{uint16_t data;/* 读取规则通道转换结果 */data = ADC_ReadConversionValue(ADC1);/* Do something. */
}

33.2.2 ADC驱动
本章实验的ADC驱动主要负责向应用层提供ADC的初始化和获取ADC转换结果的函数。本章实验中,ADC的驱动代码包括adc.c和adc.h两个文件。
ADC驱动中,对ADC、GPIO的相关宏定义,如下所示:

/* 单通道ADC采集定义 */
#define ADC_ADCX_CHY_GPIO_PORT          GPIOA
#define ADC_ADCX_CHY_GPIO_PIN           GPIO_PIN_1
#define ADC_ADCX_CHY_GPIO_CLK_ENABLE()  do{ RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA); }while(0)#define ADC_ADCX                        ADC1
#define ADC_ADCX_CHY                    ADC_CHANNEL_1
#define ADC_ADCX_CHY_CLK_ENABLE()       do{ RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_ADC1); }while(0)
ADC驱动中,ADC的初始化函数,如下所示:
/*** @brief   初始化ADC* @note    公式:TCONV=采样时间+12.5个周期*          采样时间由 SMPCYCCFGx[2:0]位控制,最小采样周期为1.5个,当*          ADCCLK=14MHz,采样时间为1.5周期:TCONV=1.5l,周期+12.5,周期=14,周期=1us。* @param   无* @retval  无*/
void adc_init(void)
{ADC_Config_T adc_init_struct;GPIO_Config_T gpio_init_struct;/* 使能时钟 */
ADC_ADCX_CHY_CLK_ENABLE();                          /* 使能ADC时钟 */
/* 使能ADC输入引脚端口时钟 */
ADC_ADCX_CHY_GPIO_CLK_ENABLE();                  
/* 设置ADC分频因子6,120MHz/6=20MHz,即6分频得到的ADC输入时钟频率为20MHz */RCM_ConfigADCCLK(RCM_PCLK2_DIV_6);                         /* 配置ADC引脚 */gpio_init_struct.pin = ADC_ADCX_CHY_GPIO_PIN;       /* ADC输入引脚 */
gpio_init_struct.mode = GPIO_MODE_ANALOG;           /* 模拟输入 */
/* 配置ADC输入引脚 */GPIO_Config(ADC_ADCX_CHY_GPIO_PORT, &gpio_init_struct);ADC_Reset(ADC_ADCX);                                /* 复位ADC1 *//* 配置ADC */adc_init_struct.mode = ADC_MODE_INDEPENDENT;        /* ADC工作模式:独立模式 */adc_init_struct.scanConvMode = DISABLE;             /* 禁止扫描模式 */
adc_init_struct.continuosConvMode = DISABLE;        /* 单次转换模式 */
/* 禁止触发检测 */adc_init_struct.externalTrigConv = ADC_EXT_TRIG_CONV_None; adc_init_struct.dataAlign = ADC_DATA_ALIGN_RIGHT;   /* 配置数据对齐方式 */adc_init_struct.nbrOfChannel = 1;                   /* 规则通道序列长度 */ADC_Config(ADC_ADCX, &adc_init_struct);             /* 配置ADC */ADC_Enable(ADC_ADCX);                               /* 使能ADC */ADC_ResetCalibration(ADC_ADCX);                     /* 使能复位校准 */while(ADC_ReadResetCalibrationStatus(ADC_ADCX))     /* 等待复位校准结束 */{ADC_StartCalibration(ADC_ADCX);                 /* 开启AD校准 */}while(ADC_ReadCalibrationStartFlag(ADC_ADCX));      /* 等待校准结束 */
}
从上面的代码中可以看出,ADC的初始化函数中,不仅配置了ADC通用控制寄存器和ADC,该配置了ADC1通道1对应的GPIO引脚,同时也配置了该引脚为模拟模式。
ADC驱动中,获取ADC转换结果的函数,如下所示:
/*** @brief       获得ADC转换后的结果* @param       ch: ADC通道,范围:ADC_CHANNEL_0~ADC_CHANNEL_V_REFINT* @retval      无*/
uint16_t adc_get_result(uint8_t ch)
{
/* 配置指定ADC规则通道 */ADC_ConfigRegularChannel(ADC_ADCX, ch, 1, ADC_SAMPLETIME_239CYCLES5);ADC_EnableSoftwareStartConv(ADC_ADCX);             /* 开始转换规则通道 */while(!ADC_ReadStatusFlag(ADC_ADCX, ADC_FLAG_EOC));/* 等待规则通道转换结束 */return ADC_ReadConversionValue(ADC_ADCX);          /* 返回规则通道的转换结果 */
}/*** @brief       获取通道ch的转换值,取times次,然后平均* @param       ch   : ADC通道,范围:ADC_CHANNEL_0~ADC_CHANNEL_V_REFINT* @param       times: 获取次数* @retval      通道ch的times次转换结果平均值*/
uint16_t adc_get_result_average(uint8_t ch, uint8_t times)
{uint32_t temp_val = 0;uint8_t t;for (t = 0; t < times; t++){temp_val += adc_get_result(ch); /* 获取times次数据 */delay_ms(5);}return temp_val / times;            /* 返回平均值 */
}

以上两个函数都是用于获取ADC转换结果的函数,其中函数adc_get_result()会配置并开启ADC指定通道的规则通道转换,并等待其转换结束后,读取其转换的1次结果;而函数adc_get_result_averagr()则是多次调用啊含糊adc_get_result()获取多次ADC的转换结果,然后进行均值滤波。
33.2.3 实验应用代码
本章实验的应用代码,如下所示:

int main(void)
{uint16_t adcdata;uint16_t voltage;NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_4);  /* 设置中断优先级分组为组4 */sys_apm32_clock_init(15);                         /* 配置系统时钟 */delay_init(120);                                  /* 初始化延时功能 */usart_init(115200);                               /* 初始化串口 */led_init();                                       /* 初始化LED */lcd_init();                                       /* 初始化LCD */adc_init();                                       /* 初始化ADC */lcd_show_string(30, 50, 200, 16, 16, "APM32", RED);lcd_show_string(30, 70, 200, 16, 16, "ADC TEST", RED);lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);lcd_show_string(30, 110, 200, 16, 16, "ADC1_CH1_VAL:", BLUE);lcd_show_string(30, 130, 200, 16, 16, "ADC1_CH1_VOL:0.000V", BLUE); while (1)
{
/* 获取ADC通道1转换且进行均值滤波后的结果 */adcdata = adc_get_result_average(ADC_ADCX_CHY, 10);lcd_show_xnum(134, 110, adcdata, 5, 16, 0, BLUE);/* 显示原始值 */
/* 计算实际电压值(扩大1000倍) */voltage = (adcdata * 3300) / 4095;
/* 显示电压值的整数部分 */lcd_show_xnum(134, 130, voltage / 1000, 1, 16, 0, BLUE);
/* 显示电压值的小数部分(保留三位小数) */lcd_show_xnum(150, 130, voltage % 1000, 3, 16, 0x80, BLUE);LED0_TOGGLE();delay_ms(100);}
}

从上面的代码中可以看出,在进行完包括ADC的所有初始化工作后,便不断地获取ADC1通道1进行5次转换后经过均值滤波后的结果,并将该原始值显示在LCD上,同时还通过该电压的原始值计算出了电压的模拟量,并在LCD上进行显示。
33.3 下载验证
在完成编译和烧录操作后,可以看到LCD上实时刷新显示着ADC1通道1(PA1引脚)采集到电压的数字量和模拟量,此时可以通过杜邦线给PA1引脚接入不同的电压值(注意共地,且输入电压不能超过3.3V,否则可能损坏开发板),可以看到LCD上显示的电压数字量和模拟量也随之改变。

相关文章:

【正点原子STM32连载】第三十三章 单通道ADC采集实验 摘自【正点原子】APM32E103最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子APM32E103最小系统板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第三…...

Linux系统使用docker部署Geoserver(简单粗暴,复制即用)

1、拉取镜像 docker pull kartoza/geoserver:2.20.32、创建数据挂载目录 # 统一管理Docker容器的数据文件,geoserver mkdir -p /mydata/geoserver# 创建geoserver的挂载数据目录 mkdir -p /mydata/geoserver/data_dir# 创建geoserver的挂载数据目录&#xff0c;存放shp数据 m…...

libcurl使用默认编译的winssl进行https的双向认证

双向认证&#xff1a; 1.服务器回验证客户端上报的证书 2.客户端回验证服务器的证书 而证书一般分为&#xff1a;1.受信任的根证书&#xff0c;2不受信任的根证书。 但是由于各种限制不想在libcurl中增加openssl&#xff0c;那么使用默认的winssl也可以完成以上两种证书的双…...

MySQL运维实战(3.3) 管理数据库(database)

作者&#xff1a;俊达 引言 数据库的创建和管理是构建可靠数据的关键&#xff0c;关系到所存储数据的安全与稳定。在 MySQL 这个强大的关系型数据库系统中&#xff0c;数据库的创建与管理需要精准的步骤和妥善的配置。下面&#xff0c;将深入探讨如何使用MySQL 来管理数据库&…...

Web3去中心化存储:重新定义云服务

随着Web3技术的崭露头角&#xff0c;去中心化存储正在成为数字时代云服务的全新范式。传统的云服务依赖于中心化的数据存储架构&#xff0c;而Web3的去中心化存储则为用户带来了更安全、更隐私、更可靠的数据管理方式&#xff0c;重新定义了云服务的未来。 1.摒弃中心化的弊端 …...

纸尿裤行业调研:预计到2024年提高至68.1%

母婴大消费是指围绕孕产妇和0-14岁婴幼童人群&#xff0c;贯穿孕产妇孕产及产后护理周期、婴幼童成长周期的满足其衣、食、住、行、用、玩、教等需求的消费品的总和。 不同产品消费频次各异&#xff0c;纸尿裤是母婴大消费中的最为高频且刚需的易耗品。当前&#xff0c;消费升…...

目标检测数据集 - 行人检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;行人检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如校园行人、街景行人、道路行人、遮挡行人、严重遮挡行人数据&#xff1b;适用实际项目应用&#xff1a;公共场所监控场景下行人检测项目&#xff0c;以及作为…...

重磅!巨匠纺品鉴正式签约“体坛冠军程晨”为品牌形象代言人

2024年&#xff0c;巨匠纺品鉴打响品牌营销开年第一战&#xff0c;携手全国啦啦操冠军程晨&#xff0c;强势开启“冠军品牌、冠军优选、冠军品质”中国年&#xff0c;实现品牌战略全面升级&#xff0c;全力传递"冠军品质"的品牌精神,拓展品牌影响力的深度和广度,为品…...

亚信安慧AntDB超融合框架——数智化时代数据库管理的新里程碑

在信息科技飞速发展的时代&#xff0c;亚信科技AntDB团队提出了一项颠覆性的“超融合”理念&#xff0c;旨在满足企业日益增长的复杂混合负载和多样化数据类型的业务需求。这一创新性框架的核心思想在于融合多引擎和多能力&#xff0c;充分发挥分布式数据库引擎的架构优势&…...

设计模式之命令模式【行为型模式】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某…...

肯尼斯·里科《C和指针》第6章 指针(4)实例

肯尼斯里科《C和指针》第6章 指针&#xff08;1&#xff09;-CSDN博客 肯尼斯里科《C和指针》第6章 指针&#xff08;2&#xff09;-CSDN博客 肯尼斯里科《C和指针》第6章 指针&#xff08;3&#xff09;-CSDN博客 6.12 实例 /* ** 计算一个字符串的长度。 */ #include <…...

diffusers flask streamlit 简洁可视化文生图页面

参考: https://python-bloggers.com/2022/12/stable-diffusion-application-with-streamlit/ https://github.com/LowinLi/stable-diffusion-streamlit 项目结构 本项目很简洁,暂时每次只能返回一张图片;gpu资源T4 16g;测试下来基本也只能支持同时一个人使用 flask:作为…...

ubuntu 使用VNC链接树莓派

ubuntu PC端安装remina sudo apt-add-repository ppa:remmina-ppa-team/remmina-next 然后&#xff0c;运行以下命令来安装 Remmina 软件包&#xff1a; sudo apt update sudo apt install remmina remmina-plugin-rdp remmina-plugin-secret flatpak run -- pkill remmina p…...

水利部:加大北斗、无人机等安全监测新技术的应用推广

水利部&#xff1a;加大北斗、无人机等安全监测新技术的应用推广 近日&#xff0c;水利部召开2023年水库安全管理情况新闻发布会。会上&#xff0c;副部长刘伟平介绍有关情况&#xff0c;并与水利工程建设司、运行管理司、水旱灾害防御司负责人回答记者提问。   为了高质量…...

如何定位和优化程序CPU、内存等性能之巅

摘要 性能优化指在不影响系统运行正确性的前提下&#xff0c;使之运行得更快&#xff0c;完成特定功能所需的时间更短&#xff0c;或拥有更强大的服务能力。本文将介绍性能优化的基本概念以及如何定位和优化程序中的CPU、内存和IO瓶颈。 引言 随着计算机系统的日益复杂和应用…...

一体机旅游景区污水处理设备工艺说明

一体机旅游景区污水处理设备工艺说明 原水浓度&#xff1a;COD≤500mg/L&#xff0c;BOD≤300mg/L&#xff0c;NH3-N≤40mg/L&#xff0c;超过以上浓度需另行设计。 出水标准&#xff1a;COD≤60mg/L&#xff0c;BOD≤20mg/L&#xff0c;NH3-N≤15mg/L&#xff0c;出水要求如更…...

java返回文件时为图片或pdf等设置在线预览或下载

设置Content-Disposition响应头类型 "inline"查看预览 &#xff1b; "attachment"下载&#xff1b; inline&#xff1a;表示回复中的消息体会以页面的一部分或者整个页面的形式展示 attchment&#xff1a;以附件形式被下载到本地&#xff1b;/*** 文件或图…...

微信公众号对接--客服消息

当你关注公众号&#xff0c;然后在公众号里面发送消息&#xff0c;会收到回复&#xff0c;这个就是客服消息 参考文档:接收普通消息 接收事件推送 客服接口-发消息 想要对接客服消息&#xff0c;首先要获取access_token,这个可以参考我之前的文章:对接微信公众号-CSDN博客 回…...

花几分钟整点jmeter花活,轻松超越90%软件测试

jmeter 可以做性能测试&#xff0c;这个很多人都知道&#xff0c;那你知道&#xff0c;jmeter 可以在启动运行时&#xff0c;指定线程数和运行时间&#xff0c;自定义性能场景吗&#xff1f; jmeter 性能测试&#xff0c;动态设定性能场景 平时&#xff0c;我们使用 jmeter 进…...

类脑研究之脑组成及神经系统相关理论!大脑是什么?大脑和脑有什么区别?大脑皮层和脑膜什么关系?人的神经系统有哪些?

目录 1 引言2 神经系统3 脑组成3.1 大脑成分3.2 大脑外部&#xff1a;脑膜3.3 大脑中部&#xff1a;大脑皮层3.4 大脑内部3.5 脑干3.6 小脑 1 引言 为了深入研究类脑&#xff0c;必须了解大脑的结构和机制。从神经系统分级和脑组成两个角度出发&#xff0c;详细介绍了大脑的生…...

【Vue按键修饰符详细介绍】

Vue按键修饰符详细介绍 1. 按键修饰符2. 实现原理3. 使用方法4. 常用的按键修饰符5. 自定义按键修饰符6. 系统修饰键7. 事件修饰符的链式使用8. .exact 修饰符 1. 按键修饰符 Vue.js 中的按键修饰符使得键盘事件处理变得十分简单&#xff0c;它们通常与 v-on 指令&#xff08;…...

url 地址中的敏感信息脱敏处理

url 跳转时&#xff0c;系统自动加密解密处理&#xff0c;适用于调用方不适合加密处理的情况 // 定义一个名为encodeURIUrlParams的函数 encodeURIUrlParams() { // 创建一个URLSearchParams对象&#xff0c;该对象用于处理URL的查询字符串部分 const urlParams new URLS…...

慢速 HTTP 攻击 Slow HTTP Attack

漏洞名称 &#xff1a;Slow Http attack、慢速攻击 漏洞描述&#xff1a;慢速攻击基于HTTP协议&#xff0c;通过精心的设计和构造&#xff0c;这种特殊的请求包会造成服务器延时&#xff0c;而当服务器负载能力消耗过大即会导致拒绝服务。HTTP协议规定&#xff0c;HTTP Reques…...

2024年“计算机视觉处理设计开发工程师”最后几天报考中!

为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国务院印发《关于“十四五”数字经济发展规划》等有关工作的部署要求&#xff0c;深入实施人才强国战略和创新驱动发展战略&#xff0c;加强全国数字化人才队伍建设&#xff0c;持续推进人工智能专业人员…...

基于ssm的教务信息平台的设计与实现+jsp论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统教务信息管理难度大&#xff0c;容错率低&#xff0c;管理…...

哪种护眼灯对眼睛好?五款高品质考研台灯推荐

眼睛是我们感知世界的窗户&#xff0c;眼睛对光的敏感度非常高。长时间接触强光或不适宜的光线环境可能会对眼睛造成伤害。因此&#xff0c;选择一款适合自己的护眼台灯非常重要。护眼台灯能够模拟自然光的光谱&#xff0c;减少眼睛对不良光线的伤害。它具备调节光线亮度&#…...

安防视频云平台/可视化监控云平台ARM版EasyCVR无法下载录像文件,如何解决?

视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。GB28181视频监控/AI智能大数据视频分析EasyCVR平台已经广泛应用在工地…...

如何用Docker部署Nacos服务并结合内网穿透实现公网访问管理界面?

文章目录 1. Docker 运行Nacos2. 本地访问Nacos3. Linux安装Cpolar4. 配置Nacos UI界面公网地址5. 远程访问 Nacos UI界面6. 固定Nacos UI界面公网地址7. 固定地址访问Plik Nacos是阿里开放的一款中间件,也是一款服务注册中心&#xff0c;它主要提供三种功能&#xff1a;持久化…...

Logback框架基本认识

文章目录 一.什么是Logback1.1 初识Logbcak 二.Logbcak的结构三.日志的级别四.配置组件详解4.1 logger 日志记录器属性的介绍如何在配置文件里配置 4.2 appender 附加器 配合日志记录器的输出格式4.2.1 控制台附加器4.2.2 文件附加器4.3.3滚动文件附加器 4.3 Filter: 过滤器&am…...

移动安全-certutil

1 需求 需求1&#xff1a;获取应用文件的MD5 CertUtil -hashfile 文件路径 MD5 2 语法 C:\>certutil -?动词:-dump -- 转储配置信息或文件-dumpPFX -- 转储 PFX 结构-asn -- 分析 ASN.1 文件-decodehex -- 解码十六进制编码的…...