34_DAC原理及数模转换实验

news2024/11/16 9:19:18

目录

数模转换原理

DAC模块框图

事件选择控制数字模拟转换

DAC转换

DAC数据格式

 选择DAC触发

DAC输出电压计算

硬件连接

DAC配置步骤

实验源码


数模转换原理

STM32的DAC模块(数字/模拟转换模块)是12位数字输入,电压输出型的DAC。DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐或右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式”,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输入参考电压VREF+以获得更精确的转换结果。

STM32的DAC模块主要特点

1.2个DAC转换器:每个转换器对应1个输出通道

2.8位或者12位单调输出

3.12位模式下数据左对齐或者右对齐

4.同步更新功能

5.噪声波形生成

6.三角波形生成

7.双DAC通道同时或者分别转换

8.每个通道都有DMA功能

DAC模块框图

 VDDA和VSSA为DAC模块模拟部分的供电。Vref+则是DAC模块的参考电压。DAC_OUTx就是DAC的输出通道了(对应PA4或者PA5引脚),数值的话是写到DHRx经过一段时间控制逻辑写到DORx里面在又数字至模拟转换器输出模拟电压DAC_OUTx通道,也可以通过触发。

事件选择控制数字模拟转换

 一旦使能DACx通道,相应的GPIO引(PA4或者PA5)就会自动与DAC的模拟输出相连(DAC_OUTx)。为了避免寄生的干扰和额外的功耗,引脚PA4或者PA5在之前应当设置成模拟输入(AIN)。

DAC转换

  不能直接对寄存器DAC_DORx写入数据,任何输出到DAC通道x的数据都必须写入DAC_DHRx寄存器(数据实际写入DAC_DHR8Rx、 DAC_DHR12Lx、 DAC_DHR12Rx、 DAC_DHR8RD、DAC_DHR12LD、或者DAC_DHR12RD寄存器)。

  如果没有选中硬件触发(寄存器DAC_CR1的TENx位置'0'),存入寄存器DAC_DHRx的数据会在一个APB1时钟周期后自动传至寄存器DAC_DORx。

  如果选中硬件触发(寄存器DAC_CR1的TENx位置'1'),数据传输在触发发生以后3个APB1时钟周期后完成。旦数据从DAC_DHRx寄存器装入DAC_DORx寄存器,在经过时间tSETTLING之后,输出即有效,这段时间的长短依电源电压和模拟输出负载的不同会有所变化。

DAC数据格式

根据选择的配置模式,数据照下文所述写入指定的寄存器:

  单DAC通道x,有3种情况:

  8位数据右对齐:用户须将数据写入寄存器DAC_DHR8Rx[7:0]位(实际是存入寄存器DHRx[11:4]位)

  12位数据左对齐:用户须将数据写入寄存器DAC_DHR12Lx[15:4]位(实际是存入寄存器DHRx[11:0] 位)

  12位数据右对齐:用户须将数据写入寄存器DAC_DHR12Rx[11:0]位(实际是存入寄存器DHRx[11:0]位)

  根据对DAC_DHRyyyx寄存器的操作,经过相应的移位后,写入的数据被转存到DHRx寄存器中(DHRx是内部的数据保存寄存器x)。随后,DHRx寄存器的内容或被自动地传送到DORx寄存器,或通过软件触发或外部事件触发被传送到DORx寄存器

 选择DAC触发

如果TENx位被置1, DAC转换可以由某外部事件触发(定时器计数器、外部中断线)。配置控制位TSELx[2:0]可以选择8个触发事件之一触发DAC转换。

  

  每次DAC接口侦测到来自选中的定时器TRGO输出,或者外部中断线9的上升沿,最近存放在寄存器DAC_DHRx中的数据会被传送到寄存器DAC_DORx中。在3个APB1时钟周期后,寄存器DAC_DORx更新为新值。

  如果选择软件触发,一旦SWTRIG位置'1',转换即开始。在数据从DAC_DHRx寄存器传送到DAC_DORx寄存器后, SWTRIG位由硬件自动清'0'。

DAC输出电压计算

数字输入经过DAC被线性地转换为模拟电压输出,其范围为0到VREF+

任一DAC通道引脚上的输出电压满足下面的关系(4096是12位精度转换成十进制):

                                        DAC输出 = VREF * (DOR / 4096)

硬件连接

 

DAC配置步骤

1.开启PA口时钟,设置PA4为模拟输入。

STM32F103ZET6 的DAC通道1在PA4上,所以,我们先要使能PORTA的时钟,然后设置PA4为模拟输入。DAC本身是输出,但是为什么端口要设置为模拟输入模式呢?因为一但使能DACx通道之后,相应的GPIO引脚(PA4或者PA5)会自动与DAC的模拟输出相连,设置为输入,是为了避免额外的干扰。

使能GPIOA时钟:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE ); //使能PORTA时钟

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入

2.使能DAC1时钟。

同其他外设一样,要想使用,必须先开启相应的时钟。STM32的DAC模块时钟是由APB1提供的,所以我们调用函数RCC APB1PeriphClockCmd()设置DAC模块的时钟使能。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); //使能 DAC 通道时钟

3.初始化DAC,设置DAC的工作模式。

该部分设置全部通过DAC_CR设置现,包括: DAC通道1使能、DAC通道1输出缓存关闭、不使用触发、不使用波形发生器等设置。这里DMA初始化是通过函数DAC_Init完成的:

void DAC Init(uint32 t DAC Channel, DAC InitTypeDef* DAC InitStruct);

typedef struct

{

uint32_t DAC_Trigger;  

uint32 t DAC_WaveGeneration;  

uint32_t DAC_LFSRUnmask_TriangleAmplitude;

uint32_t DAC_OutputBuffer;

}DAC_InitTypeDef;

4.使能DAC转换通道

初始化DAC之后,理所当然使能DAC转换通道,库函数方法是:

DAC_Cmd(DAC_Channel_1, ENABLE); //使能 DAC

设置DAC的输出值。

通过前面4个步骤的设置,DAC就可以开始工作了,使用12位右对齐数据格式,所以我们通过设置DHR12R1,就可以在DAC输出引脚(PA4)得到不同的电压值了。库函数的函数是:

DAC_SetChannel1Data(DAC_Align_12b_R, 0);

第一个参数设置对齐方式,可以为12位右对齐

DAC_Align_12b_R, 12位左对齐DAC_Align_12b_L以及8位右对齐DAC_Align_8b_R方式。第二个参数就是DAC的输入值了,初始化设置为0。

实验源码

/**
  ******************************************************************************
  * @file           : user_rcc_config.c
  * @brief          : V1.00
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */

/* Include 包含---------------------------------------------------------------*/
#include "user_rcc_config.h"
/* Typedef 类型----------------------------------------------------------------*/
/* Define  定义----------------------------------------------------------------*/
/* Macro   宏------------------------------------------------------------------*/
/* Variables 变量--------------------------------------------------------------*/
/* Constants 常量--------------------------------------------------------------*/
/* Function  函数--------------------------------------------------------------*/

/*!
	\brief		RCC配置
	\param[in]	none
	\param[out]	none
	\retval 	none
*/
void Rcc_config(void)
{	
	/*使能GPIOA时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	/*使能UART1时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
	/*使能ADC1通道时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE );
	/*使能DAC通道时钟*/
   	RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );	  
	/*设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M*/
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);
	
}

/************************************************************** END OF FILE ****/
 
/**
  ******************************************************************************
  * @file           : user_gpio.c
  * @brief          : V1.00
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */

/* Include 包含---------------------------------------------------------------*/
#include "user_gpio.h"
/* Typedef 类型----------------------------------------------------------------*/
/* Define  定义----------------------------------------------------------------*/
/* Macro   宏------------------------------------------------------------------*/
/* Variables 变量--------------------------------------------------------------*/
/* Constants 常量--------------------------------------------------------------*/
/* Function  函数--------------------------------------------------------------*/

/*!
	\brief		GPIO初始化函数
	\param[in]	none
	\param[out]	none
	\retval 	none
*/
void Gpio_Init(void)
{	
	/*GPIO结构体*/
	GPIO_InitTypeDef GPIO_InitTypeDefstruct;
	
	/*UART1发送引脚配置*/
	GPIO_InitTypeDefstruct.GPIO_Mode  = GPIO_Mode_AF_PP;//推挽复用输出
	GPIO_InitTypeDefstruct.GPIO_Pin   = GPIO_Pin_9;
	GPIO_InitTypeDefstruct.GPIO_Speed =	GPIO_Speed_10MHz;
	/*写入结构体到GPIOA*/
	GPIO_Init(GPIOA,&GPIO_InitTypeDefstruct);
	
	/*UART1接收引脚配置*/
	GPIO_InitTypeDefstruct.GPIO_Mode  = GPIO_Mode_IN_FLOATING;//浮空输入
	GPIO_InitTypeDefstruct.GPIO_Pin   = GPIO_Pin_10;
	GPIO_InitTypeDefstruct.GPIO_Speed =	GPIO_Speed_10MHz;
	/*写入结构体到GPIOA*/	
	GPIO_Init(GPIOA,&GPIO_InitTypeDefstruct);
	
	/*PA1作为模拟通道输入引脚*/                      
	GPIO_InitTypeDefstruct.GPIO_Pin = GPIO_Pin_1;
	GPIO_InitTypeDefstruct.GPIO_Mode = GPIO_Mode_AIN;//模拟输入引脚
	GPIO_Init(GPIOA, &GPIO_InitTypeDefstruct);	
	
	/*PA4作为模拟输入防止干扰,只要配置了DAC PA4就自动会连接DAC的输出*/
	GPIO_InitTypeDefstruct.GPIO_Pin = GPIO_Pin_4;// 端口配置
 	GPIO_InitTypeDefstruct.GPIO_Mode = GPIO_Mode_AIN; //模拟输入
 	GPIO_InitTypeDefstruct.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOA, &GPIO_InitTypeDefstruct);
	GPIO_SetBits(GPIOA,GPIO_Pin_4)	;//PA.4 输出高
		
}

/************************************************************** END OF FILE ****/
 
/**
  ******************************************************************************
  * @file           : user_adc.c
  * @brief          : V1.00
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */

/* Include 包含---------------------------------------------------------------*/
#include "user_adc.h"
/* Typedef 类型----------------------------------------------------------------*/
/* Define  定义----------------------------------------------------------------*/
/* Macro   宏------------------------------------------------------------------*/
/* Variables 变量--------------------------------------------------------------*/
/* Constants 常量--------------------------------------------------------------*/
/* Function  函数--------------------------------------------------------------*/

/*!
	\brief		ADC初始函数
	\param[in]	none
	\param[in]	none
	\retval 	none
*/
void Adc_Init(void)
{	
	/*ADC结构体*/
	ADC_InitTypeDef ADC_InitStructure;
	
	/*复位ADC1*/
	ADC_DeInit(ADC1); 
	/*ADC配置*/
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	//ADC1独立模式
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;	//单通道模式
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;	//单次转换模式
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	//不使用外部触发
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//ADC数据右对齐
	ADC_InitStructure.ADC_NbrOfChannel = 1;	//顺序进行规则转换的ADC通道的数目
	/*写入ADC1里面*/
	ADC_Init(ADC1, &ADC_InitStructure);	
	/*使能ADC1*/
	ADC_Cmd(ADC1, ENABLE);	
	/*使能复位校准*/
	ADC_ResetCalibration(ADC1);
	/*等待复位校准结束*/
	while(ADC_GetResetCalibrationStatus(ADC1));
	/*开启AD校准*/
	ADC_StartCalibration(ADC1);
	/*等待校准结束*/
	while(ADC_GetCalibrationStatus(ADC1));
 
}

/*!
	\brief		获取ADC1通道数值函数
	\param[in]	none
	\param[in]	none
	\retval 	none
*/
uint16_t Get_Adc(uint8_t Channel)
{
	/*ADC1,通道Channel,转换顺序1第一个转换,采样时间239.5个周期*/
	ADC_RegularChannelConfig(ADC1, Channel, 1, ADC_SampleTime_239Cycles5 );
	/*使能ADC1软件转换*/
	ADC_SoftwareStartConvCmd(ADC1,ENABLE);
	/*等待转换结束*/
	while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ) == 0);
	/*返回最近一次ADC1转换结果*/	
	return ADC_GetConversionValue(ADC1);	

}

/*!
	\brief		获取ADC1转换取平均值
	\param[in]	none
	\param[in]	none
	\retval 	none
*/
uint16_t Get_Adc_Average(uint8_t Channel,uint8_t Count)
{
	uint32_t val = 0;
	uint8_t i;
	for(i =0;i<Count;i++)
	{
		val+=Get_Adc(Channel);
		delay_ms(5);
	}

	return val/Count;
}


/************************************************************** END OF FILE ****/
 
/**
  ******************************************************************************
  * @file           : user_dac.c
  * @brief          : V1.00
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */

/* Include 包含---------------------------------------------------------------*/
#include "user_dac.h"
/* Typedef 类型----------------------------------------------------------------*/
/* Define  定义----------------------------------------------------------------*/
/* Macro   宏------------------------------------------------------------------*/
/* Variables 变量--------------------------------------------------------------*/
/* Constants 常量--------------------------------------------------------------*/
/* Function  函数--------------------------------------------------------------*/

/*!
	\brief		DAC初始函数
	\param[in]	none
	\param[in]	none
	\retval 	none
*/
void Dac_Init(void)
{	
	/*DAC结构体*/
	DAC_InitTypeDef DAC_InitType;
	
	/*DAC通道1配置*/
	DAC_InitType.DAC_Trigger=DAC_Trigger_None;	//不使用触发功能 TEN1=0
	DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
	DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置
	DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;	//DAC1输出缓存关闭 BOFF1=1
	/*写入DAC通道1里面*/
    DAC_Init(DAC_Channel_1,&DAC_InitType);	 

	/*使能DAC3*/
	DAC_Cmd(DAC_Channel_1, ENABLE);	
	/*12位右对齐数据格式设置DAC值*/
	DAC_SetChannel1Data(DAC_Align_12b_R, 0);
 
}

/*!
	\brief		设置DAC通道1输出电压函数
	\param[in]	0~3300,代表0~3.3V
	\param[in]	none
	\retval 	none
*/
void Dac1_Set_Vol(uint16_t Vol)
{
	float temp=Vol;
	/*转换成电压对应的数值*/
	temp/=1000;
	temp=temp*4096/3.3;
	/*12位右对齐数据格式设置DAC值*/
	DAC_SetChannel1Data(DAC_Align_12b_R,temp);
}


/************************************************************** END OF FILE ****/
 
/**
  ******************************************************************************
  * @file           : user_uart.c
  * @brief          : V1.00
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */

/* Include 包含---------------------------------------------------------------*/
#include "user_uart.h"
/* Typedef 类型----------------------------------------------------------------*/
/* Define  定义----------------------------------------------------------------*/
/* Macro   宏------------------------------------------------------------------*/
/* Variables 变量--------------------------------------------------------------*/

extern uint16_t USART_RX_STA;
extern uint8_t USART_RX_BUF[200];


/* Constants 常量--------------------------------------------------------------*/
/* Function  函数--------------------------------------------------------------*/
#if 1
#pragma import(__use_no_semihosting)  
/*实现Printf代码*/
struct __FILE 
{ 
	int handle; 

}; 
FILE __stdout;       

void _sys_exit(int x) 
{ 
	x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
	while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;      
	return ch;
}
#endif 




/*!
	\brief		UART1初始化
	\param[in]	none
	\param[out]	none
	\retval 	none
*/

void Uart1_Init(u32 bound)
{
	/*UART结构体*/
	USART_InitTypeDef USART_InitTypeDefstruct;
	
	/*UART结构体配置*/
	USART_InitTypeDefstruct.USART_BaudRate = bound; //波特率
	USART_InitTypeDefstruct.USART_HardwareFlowControl =USART_HardwareFlowControl_None; //不使用硬件流
	USART_InitTypeDefstruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//发送接收使能
	USART_InitTypeDefstruct.USART_Parity = USART_Parity_No; //不使用奇偶校验
	USART_InitTypeDefstruct.USART_StopBits = USART_StopBits_1; //1个停止位
	USART_InitTypeDefstruct.USART_WordLength = USART_WordLength_8b; //8个数据位
	/*写入USART1*/
	USART_Init(USART1,&USART_InitTypeDefstruct);
	
	/*使能串口1*/
	USART_Cmd(USART1,ENABLE);

}


/*!
	\brief		UART1中断服务函数
	\param[in]	none
	\param[out]	none
	\retval 	none
*/

void USART1_IRQHandler(void)
{

}
	

/************************************************************** END OF FILE ****/
 
/**
  ******************************************************************************
  * @file           : user_mian.h
  * @brief          : V1.00
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */

/* Include 包含---------------------------------------------------------------*/
#include "stm32f10x.h"
#include <stdbool.h>
#include "user_gpio.h"
#include "user_delay.h"
#include "user_rcc_config.h"
#include "user_uart.h"
#include "user_adc.h"
#include "user_dac.h"


/* Typedef 类型----------------------------------------------------------------*/
/* Define  定义----------------------------------------------------------------*/
/* Macro   宏------------------------------------------------------------------*/
/* Variables 变量--------------------------------------------------------------*/
//最多一次接收200个字节
uint8_t USART_RX_BUF[200];
//接收状态
//bit15,	接收完成标志
//bit14,	接收到0x0d
//bit13~0,	接收到的有效字节数目
uint16_t USART_RX_STA=0;       //接收状态标记	 
/* Constants 常量--------------------------------------------------------------*/
/* Function  函数--------------------------------------------------------------*/


 int main(void)
 {	
	 /*DAC变量*/
	 uint16_t DAC_V = 0;
	 /*ADC装换转换变量*/
	 uint16_t adc;
	 /*电压*/
	 float Voltage;
	/*配置系统中断分组为2位抢占2位响应*/
	 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	 /*延时函数初始化*/
	 delay_init();
	/*RCC配置*/
	 Rcc_config();
	/*GPIO初始化*/ 
	 Gpio_Init();
	 /*初始化ADC1*/
	 Adc_Init();
	 /*初始化DAC1*/
	 Dac_Init();
	/*USART1初始化*/
	 Uart1_Init(9600);
	/*死循环*/ 
	 while(1){
		 
	 /*获取ADC1通道110次的平均值*/
	 adc = Get_Adc_Average(ADC_Channel_1,10);
	 /*电压是3.3V,12位精度的十进制就是4096,采样数值每一格代表几V电压=3.3/4096*/
	Voltage = adc * (3.3/4096); 
	printf("电压值是:%.1fV\r\n",Voltage);
	Dac1_Set_Vol(DAC_V);
	/*实时变化DAC输出*/
	if(3300!=DAC_V)
	{
		DAC_V+=100;
	}else
	{
		DAC_V= 0 ;
	}
	
    delay_ms(1000);
		 	 
	 }
		

}
 
 /************************************************************** END OF FILE ****/

 

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

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

相关文章

linux安装nginx

1.nginx官网 http://nginx.org/en/download.html 下载安装包&#xff0c;如图所示下载nginx-1.23.2&#xff0c;并上传到指定目录&#xff1a;/usr/local/src/nginx 2.解压 tar -zxvf nginx-1.23.2.tar.gz3.安装nginx&#xff0c; cd /usr/local/src/nginx/nginx-1.23.2 该目录…

Titanic 泰坦尼克数据集 特诊工程 机器学习建模

以下内容为讲课时使用到的泰坦尼克数据集分析、建模过程&#xff0c;整体比较完整&#xff0c;分享出来&#xff0c;希望能帮助大家。部分内容由于版本问题&#xff0c;可能无法顺利运行。 Table of Contents 1 经典又有趣的Titanic问题1.1 目标1.2 解决方法1.3 项目目的2…

Vector-常用CAN工具 - CANoe入门到精通_03

NetWork Node 前面已经介绍了CANoe的基本情况、硬件环境搭建、CANoe软件环境配置&#xff0c;今天我们就来聊一下NetWork Node&#xff0c;在我们的测试工作中&#xff0c;大部分情况我们默认CANoe作为一个Client端&#xff0c;但是有些情况&#xff0c;我们需要实时监测被测件…

Akka 学习(四)Remote Actor

目录一 介绍1.1 Remote Actor1.2 适用场景1.3 踩坑点二 实战2.1 需求2.2 Java 版本2.2.1 效果图2.2.2 实体类2.2.3 服务端Actor 处理2.2.4 服务端配置文件2.2.5 客服端Actor处理2.2.6 客服端配置文件2.2.7 测试2.3 Scala 版本2.3.1 效果2.2.3 服务端Actor处理2.3.4 客户端Actor…

使用 Excel 数据透视表深入研究数据分析

问题 1(文章数据在底部) 为美国选民案例研究创建一个数据透视表,并用它来回答以下问题: A) 有多少个州的选民人口百分比低于 55%?哪些州? 答:有5个州的选民人数低于55%,分别是得克萨斯州、阿肯色州、俄克拉荷马州、夏威夷州和西弗吉尼亚州。 步骤:根据以下结果,创建…

基于jsp+java+ssm的社会保险信息管理系统-计算机毕业设计

项目介绍 课题研究的基本内容及预期目标或成果 用户注册与登录功能&#xff0c;在单位注册功能中有申请管理功能&#xff0c;填写具体信息。 系统管理员&#xff1a; 1&#xff09;个人密码修改&#xff1a;实现了管理员用户密码信息的修改。 2&#xff09;参保人员管理&a…

ORACE dbca创建报错Oracle system identifier(SID) “orcl“

最近项目需要通过备份恢复oracle实例&#xff0c;必须使用orcl&#xff0c;通过dbca创建实例是提示如下报错&#xff1a; 查看日志&#xff0c;$ORACLE_HOME/cfgtoollogs/dbca/dbcaui.log EVERE: [FATAL] A database instance with Oracle system identifier(SID) "orcl&…

零基础入门推荐系统 - 新闻推荐 - 实操2

内容导航: 零基础入门推荐系统 - 新闻推荐 - 实操2比赛数据分析:用户属性分析:训练集和测试集中分别有多少用户&#xff1f;用户城市分布有什么规律&#xff1f;平均每个用户会点击多少个文章&#xff1f;点击来源与文章点击次数是否存在关联&#xff1f;用户行为分析:零基础入…

【车载开发系列】UDS诊断---读取周期标识符($0x2A)

【车载开发系列】UDS诊断—读取周期标识符&#xff08;$0x2A&#xff09; UDS诊断---读取周期标识符&#xff08;$0x2A&#xff09;【车载开发系列】UDS诊断---读取周期标识符&#xff08;$0x2A&#xff09;一.概念定义二.报文格式1&#xff09;请求报文2&#xff09;初始响应3…

[附源码]计算机毕业设计课程在线测评系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

打破信息壁垒,提升业务水平,纷享销客CRM带给木链科技不一样的体验

步入数字化时代&#xff0c;企业业务模式和员工工作方式日新月异&#xff0c;传统协作方式很显然已经难以适应当前的需求&#xff0c;企业亟需一种新的面向信息化的协作方式&#xff0c;以提高工作效率&#xff0c;提升业务水平。 这样的挑战也发生在工业互联网安全企业&#…

Oracle一次获取多个序列值

Oracle一次获取多个序列值SQL 语句一次获取多个序列值获取序列中的多个值connect by level 生成多行数据JDBC 一次获取多个序列值MyBatis 一次获取多个序列值SQL 语句一次获取多个序列值 获取序列中的多个值 创建序列 CREATE SEQUENCE test_user_seq;获取一个序列值 SELECT…

Linux系统(Centos 7)配置DNS客户端

配置DNS客户端 DNS 客户端的配置非常简单&#xff0c;假设本地首选DNS服务器的IP地址为192.168.10.1&#xff0c;备用DNS 服务器的IP地址为192.168.10.2&#xff0c;则 DNS客户端的设置如下。 配置Windows 客户端 打开“Intermet 协议&#xff08;TCP/IP)”属性对话框&a…

8_3、Java基本语法之线程的生命周期与同步

一、线程的生命周期 JDK中用Thread.State类定义了线程的几种状态 要想实现多线程&#xff0c;必须在主线程中创建新的线程对象。Java语言使用Thread类 及其子类的对象来表示线程&#xff0c;在它的一个完整的生命周期中通常要经历如下的五种状态&#xff1a; 新建&#xff1a; …

基于ARIMA、SVM、随机森林销售的时间序列预测

如今DT&#xff08;数据技术&#xff09;时代&#xff0c;数据变得越来越重要&#xff0c;其核心应用“预测”也成为互联网行业以及产业变革的重要力量。最近我们被客户要求撰写关于销售时间序列预测的研究报告&#xff0c;包括一些图形和统计输出。对于零售行业来说&#xff0…

Elsevier(爱思唯尔)LaTex 模板详细说明

Elsevier 模板的使用 官方网站提供的 Latex Instructions&#xff0c;Elsevier 模板下载地址&#xff1a;elsarticle-template.zip [ 如果不了解文档类的作用&#xff0c;可以参考&#xff1a;documentclass ] Elsevier 提供了 3 种自定义的文档类&#xff1a; elsarticle…

大厂软件测试流程完整版

目 1.概述 1.1目的 有效的保证软件质量&#xff1b; 有效的制定不同测试类型&#xff08;软件系统测试、音频主观性测试、Field Trial、专项测试、自动化测试、性能测试、用户体验测试&#xff09;的软件测试计划&#xff1b; 按照计划进行测试&#xff0c;发现软件中存在…

Session | web应用的session机制、session的实现原理

目录 一&#xff1a;web应用的session机制 二&#xff1a;session的实现原理 一&#xff1a;web应用的session机制 &#xff08;1&#xff09;什么是会话&#xff1f; ①会话对应的英语单词&#xff1a;session ②用户打开浏览器&#xff0c;进行一系列操作&#xff0c;然后…

[附源码]计算机毕业设计楼盘销售管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…