STM32F4XX的12位ADC采集数值超过4096右对齐模式设置失败

文章目录

  • 一、前言
  • 二、问题1:数值超过4096
  • 三、问题1的排错过程
  • 四、问题2:右对齐模式设置失败
  • 五、问题2的解决方法
    • 5.1 将ADC_ExternalTrigConv设置为0
    • 5.2 使用ADC_StructInit()函数

一、前言

最近在学习STM32的ADC功能,遇到了一个奇怪的问题。
使用芯片:STM32F407ZGT6
使用函数:库函数
使用代码:正点原子的例程《实验16 ADC实验》
串口工具:VOFA

二、问题1:数值超过4096

博主直接使用了正点原子的程序,如下面所示,使用的12位的ADC1,端口是PA5

//初始化ADC															   
void  Adc_Init(void)
{    GPIO_InitTypeDef  GPIO_InitStructure;ADC_CommonInitTypeDef ADC_CommonInitStructure;ADC_InitTypeDef       ADC_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟//先初始化ADC1通道5 IO口GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PA5 通道5GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化  RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE);	  //ADC1复位RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);	//复位结束	 ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA失能ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//预分频4分频。ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz ADC_CommonInit(&ADC_CommonInitStructure);//初始化ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//关闭连续转换ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐	ADC_InitStructure.ADC_NbrOfConversion = 1;//1个转换在规则序列中 也就是只转换规则序列1 ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化ADC_Cmd(ADC1, ENABLE);//开启AD转换器	
}

为了容易查看数值,博主将adc.h和adc.c移植到了串口打印的程序之中,这样子可以在电脑的串口工具查看相对于的数值。
主函数的代码如下,将ADC采集到的原始数值和转化为电压之后的数值用串口打印出来

adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均
temp=(float)adcx*(3.3/4096);          //获取计算后的带小数的实际电压值,比如3.1111
printf("%d,%f\n",adcx,temp);

从下面的结果可以看出超过我们的12位ADC的最大值4096(2^12=4096)。

在这里插入图片描述

三、问题1的排错过程

首先,博主将ADC检测引脚接到3.3V,出现了下面的状况:ADC采集到的数值很大,接近于65535,也就是2^16。

在这里插入图片描述
这让博主想到应该是ADC设置模型的时候设置为左对齐模型,查看了代码(如下)后发现设置的是右对齐模式

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐

根据《STM32F407参考手册》P255可以得到下面结论:

  • 右对齐:将采集到的数据放在低12位
  • 左对齐:将采集到的数据放在高12位

在这里插入图片描述

为了验证是否真的是左对齐,博主先假设其位左对齐,根据上面的知识可以知道,想要实现右对齐,只需要将采集到的数值向右移动四位即可,因此,博主将主函数改为如下的代码:

adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均
adcx = adcx >> 4;
temp=(float)adcx*(3.3/4096);          //获取计算后的带小数的实际电压值,比如3.1111
printf("%d,%f\n",adcx,temp);

结果如下图所示,左边是浮空状态下的数值,右边是将ADC检测引脚接到3.3V的数值,可以看出结果小于4096。

在这里插入图片描述
综上可得:虽然代码设置了右对齐,但是实际上是左对齐。

四、问题2:右对齐模式设置失败

为了探究对齐模式设置失败的问题,博主先学习了ADC的寄存器,在《STM32F407参考手册》P276里面找到对齐模式的设置存在于寄存器ADC_CR2里面的第11位,名称是ALIGN
在这里插入图片描述
在这里插入图片描述

打开Keil的调试模式,查看到代码运行过ADC的初始化ADC_Init(ADC1, &ADC_InitStructure)之后,低11位的ALIGN居然是打勾的,也就是1,代表就是左对齐!!!

在这里插入图片描述

为了进一步研究问题所在,博主进入函数ADC_Init(),查看到给CR2(就是前面学习到设置对齐模式的寄存器)赋值的是tmpreg1 ,可以看到tmpreg1和四个值进行了 或操作 ,根据之前的博客《STM32需要的基本知识——位运算》可知,如果这四个值的第11位是1的话,那么或操作之后整个CR2的第11位就是1。

  tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_DataAlign | \ADC_InitStruct->ADC_ExternalTrigConv | ADC_InitStruct->ADC_ExternalTrigConvEdge | \((uint32_t)ADC_InitStruct->ADC_ContinuousConvMode << 1));/* Write to ADCx CR2 */ADCx->CR2 = tmpreg1;

接下来便进一步调试查看这四个值的数值,查看对应的二进制:

  • ADC_DataAlign:0x00000000
  • ADC_ExternalTrigConv:0x0501BD00
  • ADC_ExternalTrigConvEdge :0x00000000
  • ADC_ContinuousConvMode:0x00

在这里插入图片描述
ADC_ContinuousConvMode << 1 = 0x00 << 1 = 0x00
ADC_ExternalTrigConv:0x0501BD00= 0101 0001 0000 1011 1101 0000 0000
可以看到第11位是1,那么根据上面的结论可以知道tmpreg1的第11位也是1,即整个CR2的第11位就是1。
也就是说是因为ADC_ExternalTrigConv导致我们设置的对齐模式位左对齐。
进一步回顾正点原子的ADC初始化代码(如下)可以发现,确实没有对这一项进行初始化。
至于为什么他没有初始化,这个博主就不得而知了。

  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA失能ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//预分频4分频。ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz ADC_CommonInit(&ADC_CommonInitStructure);//初始化ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//关闭连续转换ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐	ADC_InitStructure.ADC_NbrOfConversion = 1;//1个转换在规则序列中 也就是只转换规则序列1 ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化

综上可得:右对齐模式设置失败的原因是没对ADC_InitStructure.ADC_ExternalTrigConv进行初始化设置。

五、问题2的解决方法

知道了问题所在,博主目前研究两种解决方法:
第一种:将ADC_ExternalTrigConv设置为0;
第二种:使用ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);初始化ADC_ExternalTrigConv;

5.1 将ADC_ExternalTrigConv设置为0

既然是ADC_ExternalTrigConv不为零导致的,那直接将其设置为0,即添加代码

  ADC_InitStructure.ADC_ExternalTrigConv = 0;//添加这一行

ADC的完整代码如下:

//初始化ADC															   
void  Adc_Init(void)
{    GPIO_InitTypeDef  GPIO_InitStructure;ADC_CommonInitTypeDef ADC_CommonInitStructure;ADC_InitTypeDef       ADC_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟//先初始化ADC1通道5 IO口GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PA5 通道5GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化  RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE);	  //ADC1复位RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);	//复位结束	 ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA失能ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//预分频4分频。ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz ADC_CommonInit(&ADC_CommonInitStructure);//初始化ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//关闭连续转换ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐	ADC_InitStructure.ADC_NbrOfConversion = 1;//1个转换在规则序列中 也就是只转换规则序列1 //====================================================//ADC_InitStructure.ADC_ExternalTrigConv = 0;//添加这一行//====================================================//ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化ADC_Cmd(ADC1, ENABLE);//开启AD转换器	
}

5.2 使用ADC_StructInit()函数

从上面的代码可以看出 ADC_ExternalTrigConv 是结构 ADC_InitTypeDef 的一个成员,那看看有没有官方自带的初始化函数。

ADC_InitTypeDef       ADC_InitStructure;
ADC_InitStructure.ADC_ExternalTrigConv = 0

stm32f4xx_adc.h里面看到有对结构体进行初始化的函数,且有对 ADC_InitTypeDef 进行初始化的。

/* Initialization and Configuration functions *********************************/
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);
void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);
void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);
void ADC_CommonStructInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);

stm32f4xx_adc.c进一步研究该函数的代码:

/*** @brief  Fills each ADC_InitStruct member with its default value.* @note   This function is used to initialize the global features of the ADC ( *         Resolution and Data Alignment), however, the rest of the configuration*         parameters are specific to the regular channels group (scan mode *         activation, continuous mode activation, External trigger source and *         edge, number of conversion in the regular channels group sequencer).  * @param  ADC_InitStruct: pointer to an ADC_InitTypeDef structure which will *         be initialized.* @retval None*/
void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct)
{/* Initialize the ADC_Mode member */ADC_InitStruct->ADC_Resolution = ADC_Resolution_12b;/* initialize the ADC_ScanConvMode member */ADC_InitStruct->ADC_ScanConvMode = DISABLE;/* Initialize the ADC_ContinuousConvMode member */ADC_InitStruct->ADC_ContinuousConvMode = DISABLE;/* Initialize the ADC_ExternalTrigConvEdge member */ADC_InitStruct->ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;/* Initialize the ADC_ExternalTrigConv member */ADC_InitStruct->ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;/* Initialize the ADC_DataAlign member */ADC_InitStruct->ADC_DataAlign = ADC_DataAlign_Right;/* Initialize the ADC_NbrOfConversion member */ADC_InitStruct->ADC_NbrOfConversion = 1;
}

其中的 ADC_ExternalTrigConv_T1_CC1 确实设置的是0。

#define ADC_ExternalTrigConv_T1_CC1                ((uint32_t)0x00000000)
#define ADC_ExternalTrigConv_T1_CC2                ((uint32_t)0x01000000)
#define ADC_ExternalTrigConv_T1_CC3                ((uint32_t)0x02000000)
#define ADC_ExternalTrigConv_T2_CC2                ((uint32_t)0x03000000)
#define ADC_ExternalTrigConv_T2_CC3                ((uint32_t)0x04000000)
#define ADC_ExternalTrigConv_T2_CC4                ((uint32_t)0x05000000)
#define ADC_ExternalTrigConv_T2_TRGO               ((uint32_t)0x06000000)
#define ADC_ExternalTrigConv_T3_CC1                ((uint32_t)0x07000000)
#define ADC_ExternalTrigConv_T3_TRGO               ((uint32_t)0x08000000)
#define ADC_ExternalTrigConv_T4_CC4                ((uint32_t)0x09000000)
#define ADC_ExternalTrigConv_T5_CC1                ((uint32_t)0x0A000000)
#define ADC_ExternalTrigConv_T5_CC2                ((uint32_t)0x0B000000)
#define ADC_ExternalTrigConv_T5_CC3                ((uint32_t)0x0C000000)
#define ADC_ExternalTrigConv_T8_CC1                ((uint32_t)0x0D000000)
#define ADC_ExternalTrigConv_T8_TRGO               ((uint32_t)0x0E000000)
#define ADC_ExternalTrigConv_Ext_IT11              ((uint32_t)0x0F000000)

所以加一行对结构体的初始化即可:

ADC_StructInit(&ADC_InitStructure);

完整代码如下:

//初始化ADC															   
void  Adc_Init(void)
{    GPIO_InitTypeDef  GPIO_InitStructure;ADC_CommonInitTypeDef ADC_CommonInitStructure;ADC_InitTypeDef       ADC_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟//先初始化ADC1通道5 IO口GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PA5 通道5GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化  ADC_DeInit();//ADC复位ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA失能ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//预分频4分频。ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz ADC_CommonInit(&ADC_CommonInitStructure);//初始化ADC_StructInit(&ADC_InitStructure);ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//关闭连续转换ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐	ADC_InitStructure.ADC_NbrOfConversion = 1;//1个转换在规则序列中 也就是只转换规则序列1 ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化ADC_Cmd(ADC1, ENABLE);//开启AD转换器	
}

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

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

相关文章

(一)Spring Cloud 直击微服务作用、架构应用、hystrix降级

直击微服务作用 微服务架构: 遇到了什么问题? 将单体架构拆分成微服务架构后,如果保证多个服务(项目)正常运行? 哪个技术可以解决这个问题? 微服务技术 服务治理: 服务管理,维护服务与服务之间的关系 这个技术如何使用? netflix/网…

【研究僧毕业总结】第1024个创作日

目录 前言1. 机缘2. 收获3. 憧憬 前言 收到这封来信&#xff0c;代表从创作至今刚好满足1024天 1024&#xff0c;程序员的记忆 1. 机缘 从学生到社会&#xff0c;都在需求一个记录笔记的软件&#xff0c;而作为程序员&#xff0c;CSDN可云同步又可直接在云平台上看到 选择了…

基于图像合成和注意力的深度神经网络从计算机断层扫描灌注图像中自动分割缺血性脑卒中病变

Automatic ischemic stroke lesion segmentation from computed tomography perfusion images by image synthesis and attention-based deep neural networks 基于图像合成和注意力的深度神经网络从计算机断层扫描灌注图像中自动分割缺血性脑卒中病变背景贡献实验Comparison o…

静态电压继电器 JY-11A 辅助电压110VDC 额定电压100VAC 安装方式 板前接线

JY-10系列集成电路电压继电器 JY-11A集成电路电压继电器 JY-12A集成电路电压继电器 JY-11C集成电路电压继电器 JY-11D集成电路电压继电器 JY-12B集成电路电压继电器 JY-12C集成电路电压继电器 JY-12D集成电路电压继电器 1概述 JY系列集成电路电压继电器用于发电机、变…

大漠插件7.2353

工具名称:大漠插件7.2353 更新时间2023-12-29更新内容/v7.23531. FindPicSim优化,防止有些时候会找不到图2. 增加接口TerminateProcessTree3. 解决AsmCall 模式6在部分WIN11下无法正常生效的BUG/ 工具简介:大漠 综合 插件 (dm.dll)采用vc6.0编写&#xff0c;识别速度超级快&…

免费分享一套微信小程序扫码点餐(订餐)系统(uni-app+SpringBoot后端+Vue管理端技术实现) ,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序扫码点餐(订餐)系统(uni-appSpringBoot后端Vue管理端技术实现) &#xff0c;分享下哈。 项目视频演示 【免费】微信小程序扫码点餐(订餐)系统(uni-appSpringBoot后端Vue管理端技术实现) Java毕…

java: 5-4 while循环 + do while循环

文章目录 1. while循环1.1 基本语法1.2 流程图1.3 上手练习1.4 细节1.5 练习题 2. do while 循环2.1 基本语法2.2 流程图2.3 上手练习2.4 细节2.5 练习题 【老韩b站视频笔记p126-p132】 1. while循环 1.1 基本语法 1.2 流程图 1.3 上手练习 输出 10 句 你好,韩顺平教育。 pu…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷①

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷1 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷1 模块一 …

CANoe中的AutoSequence

简单介绍&#xff1a; AutoSequence是一种简单的&#xff0c;快速的类似脚本的一个可视化自动脚本插件。使用起来非常方便&#xff0c;甚至在很多时候能够代替一些简单的脚本。 1&#xff1a;Automation工程的创建 &#xff08;1.1&#xff09;打开Automation插件,双击这个插…

【LLM 论文阅读】NEFTU N E: LLM微调的免费午餐

指令微调的局限性 指令微调对于训练llm的能力至关重要&#xff0c;而模型的有用性在很大程度上取决于我们从小指令数据集中获得最大信息的能力。在本文中&#xff0c;我们提出在微调正向传递的过程中&#xff0c;在训练数据的嵌入向量中添加随机噪声&#xff0c;论文实验显示这…

开源C语言库Melon:Cron格式解析

本文介绍开源C语言库Melon的cron格式解析。 关于 Melon 库&#xff0c;这是一个开源的 C 语言库&#xff0c;它具有&#xff1a;开箱即用、无第三方依赖、安装部署简单、中英文文档齐全等优势。 Github repo 简介 cron也就是我们常说的Crontab中的时间格式&#xff0c;格式如…

2024年1月9日学习总结

目录 学习目标学习内容联邦学习基础&#xff1a;why, what, howwhy&#xff1f;what&#xff1f;how&#xff1f; 联邦学习的例子——CIFAR-10数据集&#xff08;分类问题&#xff09;1、import libararies2、hyper-parameters3、加载并且划分数据4、创建神经网络模型5、helper…

JMeter之Windows安装

JMeter之Windows安装 一、安装JDK二、安装JMeter1、下载JMeter2、配置环境变量3、验证JMeter 三、扩展知识1、汉化 一、安装JDK 略 二、安装JMeter 1、下载JMeter 官网地址&#xff1a;https://jmeter.apache.org/download_jmeter.cgi 放到本地目录下 2、配置环境变量 变量…

2024PMP考试新考纲-【过程领域】近期典型真题和超详细解析

前面的文章&#xff0c;华研荟讲解了三十多道PMP新考纲下的【人员People领域】的近年真题&#xff0c;这篇文章开始为大家分享【过程Process领域】的新考纲下的真题&#xff0c;进一步帮助大家体会和理解新考纲下PMP的考试特点和如何应用知识来解题&#xff0c;并且举一反三&am…

thinkphp学习06-连接数据库与模型初探

新建数据库 CREATE DATABASE tp6stu01 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;创建表和数据 DROP TABLE IF EXISTS tp_user; CREATE TABLE tp_user (id mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 自动编号,username varchar(20) CHARACTER SET utf8 COLL…

Web APIs知识点讲解

学习目标: 能获取DOM元素并修改元素属性具备利用定时器间歇函数制作焦点图切换的能力 一.Web API 基本认知 1.作用和分类 作用: 就是使用 JS 去操作 html 和浏览器分类&#xff1a;DOM (文档对象模型)、BOM&#xff08;浏览器对象模型&#xff09; 2.DOM DOM(Document Ob…

SpringBoot-开启Admin监控服务

SpringBoot-Admin是一个用于管理和监控SpringBoot应用程序的开源项目。它提供了一个易于使用的Web界面&#xff0c;可以实时监控应用程序的健康状况、性能指标、日志和环境配置等信息。通过Actuator模块来收集和暴露应用程序的监控信息&#xff0c;使用Web Socket或者Server-Se…

C#PDF转Excel

組件 Spire.Pdf.dll, v7.8.9.0 【注意&#xff1a;版本太低的没有此功能】 在Visual Studio中找到参考&#xff0c;鼠标右键点击“引用”&#xff0c;“添加引用”&#xff0c;将本地路径debug文件夹下的dll文件添加引用至程序。 界面图&#xff1a; 1个label&#xff0c;1…

Uibot (RPA设计软件)微信群发助手机器人————课前材料二

(本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~&#xff09; 紧接着小北的前两篇博客&#xff0c;友友们我们即将开展新课的学习~RPA 培训前期准备指南——安装Uibot(RPA设计软件&#xff09;-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/1…

【QML COOK】- 005-粒子系统(ParticleSystem)

1. 编辑main.qml import QtQuick import QtQuick.ParticlesWindow {width: 800height: 800visible: truetitle: qsTr("Hello World")color: "#000000"MouseArea {id: mouseAreaanchors.fill: parentonClicked: {hahaEmitter.pulse(2000)}}ParticleSystem {…