ADC -DMA

news2024/12/14 3:55:41

文章目录

  • 前言
  • 一、ADC配置修改
  • 二、配置DMA
  • 三、DMA中断
  • 四、完整参考代码
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

项目需要:
在原有基础上改进,采用DMA中断采集数据


提示:以下是本篇文章正文内容,下面案例可供参考

一、ADC配置修改

1.启动连续转换
2.开启ADC-DMA通道

	/* 使能ADC1对应的DMA */
ADC_DMACmd(ADC1, ENABLE);
在这里插入代码片

二、配置DMA

1.确定DMA的通道 ADC1 在DMA的通道1

在这里插入图片描述

u16 ADCConvertedValue;

#define ADC1_DR_Address ((uint32_t)0x40012400+0x4C)//ADC数据外设基地址

 // * @返回值:无
//  */
void DMA_ADC_Configure(void)
{
	/* 定义DMA初始化结构体 */
	DMA_InitTypeDef  DMA_InitStructure;
	
	/* 打开DMA时钟 */
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
	
	/* 外设基地址 */
	DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
	/* RAM基地址 */
	DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue;
	/* 传输方向,外设为源地址 */
	DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
	
	/* 缓冲区大小,即一次传输的数据量,范围0~65536,此处为1 */
	DMA_InitStructure.DMA_BufferSize = 1;
	/* 外设和RAM地址不自增 */
	DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
	
	/*外设和RAM数据宽度,AD为12位,因此宽度为半字(16位)*/
	DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
	DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
	
	/* 传输模式,循环传送 */
	DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
	/* 优先级高 */
	DMA_InitStructure.DMA_Priority = DMA_Priority_High;
	/* 非内存到内存传输 */
	DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
	
	/* 完成配置 */
	DMA_Init(DMA1_Channel1, &DMA_InitStructure);
	
	/* 允许传输完成中断 */
	DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
	
	/* 开启DMA */
	DMA_Cmd(DMA1_Channel1, ENABLE);			

}


三、DMA中断

开启中断只能仿真,实际不能使用
因为进入中断的频率太高了,导致没时间运行主函数

/**
  * @简介:DMA1通道1中断服务程序
  * @参数: 延时毫秒数
  * @返回值:无
  */
void DMA1_Channel1_IRQHandler(void)
{
	/* 检测DMA1 Channel1 传输完成中断 */
	if(DMA_GetITStatus(DMA1_IT_TC1))
	{
		/* 传输完成标志置1 */
		DMA_ADC_OK = 1;
		/* 清除中断 */
		DMA_ClearITPendingBit(DMA1_IT_GL1);
	}
}


四、完整参考代码

#include "stm32f10x.h"

#include "stdio.h"

__IO uint16_t ADCConvertedValue;

u8 DMA_ADC_OK;



/**
  * @brief  微秒级延时
  * @param  xus 延时时长,范围:0~233015
  * @retval 无
  */
void Delay_us(uint32_t xus)
{
	SysTick->LOAD = 72 * xus;				//设置定时器重装值
	SysTick->VAL = 0x00;					//清空当前计数值
	SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器
	while(!(SysTick->CTRL & 0x00010000));	//等待计数到0
	SysTick->CTRL = 0x00000004;				//关闭定时器
}

/**
  * @brief  毫秒级延时
  * @param  xms 延时时长,范围:0~4294967295
  * @retval 无
  */
void Delay_ms(uint32_t xms)
{
	while(xms--)
	{
		Delay_us(1000);
	}
}
 
/**
  * @brief  秒级延时
  * @param  xs 延时时长,范围:0~4294967295
  * @retval 无
  */
void Delay_s(uint32_t xs)
{
	while(xs--)
	{
		Delay_ms(1000);
	}
} 


void adc1_init()
{
	u16 adc_temp;
	ADC_InitTypeDef ADC_InitStruct;
	GPIO_InitTypeDef  GPIO_InitStruct;
	//1.开启时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA,ENABLE);
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);// 72/6=12
	//2.配置引脚   PA0为模拟输入
			
	GPIO_InitStruct.GPIO_Pin=  GPIO_Pin_0|GPIO_Pin_1;          // 通道0 和通道1 
	GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
	
	GPIO_Init(GPIOA, &GPIO_InitStruct);   //&x
	
	ADC_InitStruct.ADC_ContinuousConvMode= ENABLE;//启动连续转换
	ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right;
	ADC_InitStruct.ADC_ExternalTrigConv=  ADC_ExternalTrigConv_None;
	ADC_InitStruct.ADC_Mode= ADC_Mode_Independent;
	ADC_InitStruct.ADC_NbrOfChannel= 1;
	ADC_InitStruct.ADC_ScanConvMode= ENABLE;
	ADC_Init(ADC1,  &ADC_InitStruct);
	
		/* 使能ADC1对应的DMA */
	ADC_DMACmd(ADC1, ENABLE);
	

	
	ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_1Cycles5);
	
	ADC_Cmd(ADC1, ENABLE);
	
// 复位和校准ADC	
	ADC_ResetCalibration(ADC1);
	while(ADC_GetResetCalibrationStatus(ADC1));  //为0说明复位完成
	ADC_StartCalibration(ADC1);
	while( ADC_GetCalibrationStatus( ADC1)); //为0说明校准完成
	
// 软件触发转换  等待转换完成	
	 ADC_SoftwareStartConvCmd( ADC1, ENABLE);


    while(!ADC_GetFlagStatus( ADC1, ADC_FLAG_EOC) );
	 adc_temp=ADC_GetConversionValue(ADC1);
	  
	  printf("ADC的电压为 %d \r\n",adc_temp);
					
}

#define ADC1_DR_Address ((uint32_t)0x40012400+0x4C)//ADC数据外设基地址
 // * @返回值:无
//  */
void DMA_ADC_Configure(void)
{
	/* 定义DMA初始化结构体 */
	DMA_InitTypeDef  DMA_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure; 
	
	/* 打开DMA时钟 */
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
	
	/* 外设基地址 */
	DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
	/* RAM基地址 */
	DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue;
	/* 传输方向,外设为源地址 */
	DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
	
	/* 缓冲区大小,即一次传输的数据量,范围0~65536,此处为1 */
	DMA_InitStructure.DMA_BufferSize = 1;
	/* 外设和RAM地址不自增 */
	DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
	
	/*外设和RAM数据宽度,AD为12位,因此宽度为半字(16位)*/
	DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
	DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
	
	/* 传输模式,循环传送 */
	DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
	/* 优先级高 */
	DMA_InitStructure.DMA_Priority = DMA_Priority_High;
	/* 非内存到内存传输 */
	DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
	
	/* 完成配置 */
	DMA_Init(DMA1_Channel1, &DMA_InitStructure);
	
	/* 允许传输完成中断 */
	DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
	
	/* 开启DMA */
	DMA_Cmd(DMA1_Channel1, ENABLE);	


//	/* 允许DMA中断 */
//  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//	NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
//	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
//	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
//	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//	NVIC_Init(&NVIC_InitStructure);			

}
void usart1_init()
{

//PA9  TX  PA10 RX   USART1
	
	
	GPIO_InitTypeDef GPIO_InitStruct;
	USART_InitTypeDef USART_InitStruct;
	
	NVIC_InitTypeDef NVIC_InitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1, ENABLE);//1.开时钟
	
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;//发送
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStruct);
	
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;//接收
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStruct);
	
	
	
	USART_InitStruct.USART_BaudRate=115200;
	USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
	USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
	USART_InitStruct.USART_Parity=USART_Parity_No;
	USART_InitStruct.USART_StopBits=USART_StopBits_1;
	USART_InitStruct.USART_WordLength=USART_WordLength_8b;
	
	USART_Init(USART1, &USART_InitStruct);//2.初始化串口 
	
	USART_Cmd(USART1, ENABLE);//3.是能串口
	
	USART_SendData(USART1, '4');
	
	while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)!=1);
	
	
	USART_SendData(USART1, '1');
		while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)!=1);
	
	
	USART_SendData(USART1, 0X41);
		while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)!=1);
	USART_SendData(USART1, 41);
		while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)!=1);
	
	USART_ITConfig(USART1,USART_IT_RXNE,ENABLE );// 4.接受完成中断
	
	
	 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 5.配置中断分组
	 NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;
	 NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0;
	 NVIC_InitStruct.NVIC_IRQChannelSubPriority=0;	 
	 
   NVIC_Init(&NVIC_InitStruct);//配置中断优先级
	

}

int fputc(int ch,FILE *f)
{

	   USART_SendData(USART1, (u8)ch);
	   while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));
	   return ch;
}

u16 ADC_channel_0()
{
     u16 temp;
	ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_1Cycles5);
	// 软件触发转换  等待转换完成	
	 ADC_SoftwareStartConvCmd( ADC1, ENABLE);
     while(!ADC_GetFlagStatus( ADC1, ADC_FLAG_EOC) );
	 temp=ADC_GetConversionValue(ADC1);
	return temp;

}


u16 ADC_channel_1()
{
     u16 temp;
		ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_1Cycles5);
	// 软件触发转换  等待转换完成	
	 ADC_SoftwareStartConvCmd( ADC1, ENABLE);
     while(!ADC_GetFlagStatus( ADC1, ADC_FLAG_EOC) );
	 temp=ADC_GetConversionValue(ADC1);
	return temp;

}


//ch:通道值 0~3
u16 Get_Adc(u8 ch)   
{
  	//设置指定ADC的规则组通道,一个序列,采样时间
	ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );	//ADC1,ADC通道,采样时间为239.5周期	  			    
  
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);		//使能指定的ADC1的软件转换启动功能	
	 
	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

	return ADC_GetConversionValue(ADC1);	//返回最近一次ADC1规则组的转换结果
}

u16 Get_Adc_Average(u8 ch,u8 times)
{
	u32 temp_val=0;
	u8 t;
	for(t=0;t<times;t++)
	{
		temp_val+=Get_Adc(ch);
		Delay_ms(5);
	}
	return temp_val/times;
} 	 

 


int main()
{
	u16 ad_temp;
	usart1_init();
	printf("串口初始化成功 \r\n");	
	
	adc1_init();//复位一次读取一次电压
	DMA_ADC_Configure();


	while(1)
	{
		
		if(DMA_ADC_OK || 1)
		{
				printf("ADC_channel_0的电压为 %d \r\n",ADCConvertedValue);
			  DMA_ADC_OK=0;
			Delay_ms(1000);
		
		}
	
//			ad_temp=ADC_channel_0();
//		
//		  printf("ADC_channel_0的电压为 %d \r\n",ad_temp);
		
//		 ad_temp=ADC_channel_1();
//		
//		  printf("ADC_channel_1的电压为 %d \r\n",ad_temp);
		
		
	
	}


}

/**
  * @简介:DMA1通道1中断服务程序
  * @参数: 延时毫秒数
  * @返回值:无
  */
void DMA1_Channel1_IRQHandler(void)
{
	/* 检测DMA1 Channel1 传输完成中断 */
	if(DMA_GetITStatus(DMA1_IT_TC1))
	{
		/* 传输完成标志置1 */
		DMA_ADC_OK = 1;
		/* 清除中断 */
		DMA_ClearITPendingBit(DMA1_IT_GL1);
	}
}






//#include "stm32f10x.h"
//int main(void)
//{
 1.//时钟
 2.//功能配置   
//    //LED0  PA8
// //   sbit led0=P1^0;
//    
//    /*
//    
//1. PC5 上拉输入   
//2. 时钟  
//3.数据寄存器    
//    
//    
//    
//    */
//    
//    GPIO_InitTypeDef GPIO_InitStructure;
//    
//    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);
//    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
//    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
//    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//    GPIO_Init(GPIOA, & GPIO_InitStructure);
//    
//    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
//    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
//    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//    GPIO_Init(GPIOD, & GPIO_InitStructure);
// //key0  
//    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
//    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
//    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//    GPIO_Init(GPIOC, & GPIO_InitStructure); 
//    
//     //key1  
//    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
//    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
//    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//    GPIO_Init(GPIOA, & GPIO_InitStructure); 


//    
//    while(1)       
//    {
//             if(GPIO_ReadInputDataBit( GPIOC, GPIO_Pin_5)==0)
//             {
//              
//                    GPIO_ResetBits(GPIOA, GPIO_Pin_8);   //亮          
//                  
//             }
//             else
//             {
//                    GPIO_SetBits(GPIOA, GPIO_Pin_8);//灭
//                
//             
//             }
//             if(GPIO_ReadInputDataBit( GPIOA, GPIO_Pin_15)==0)
//             {
//              
//                    
//                    GPIO_ResetBits(GPIOD, GPIO_Pin_2);
//             }
//             else
//             {
//              
//                    GPIO_SetBits(GPIOD, GPIO_Pin_2);
//             
//             }
//             
//             
//             
//    }
//}



在这里插入图片描述


未完,持续更新中

总结

学习使人快乐!
音乐使人愉悦!
日积月累使人充实和自信!

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

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

相关文章

Referer头部在网站反爬虫技术中的运用

网站数据的安全性和完整性至关重要。爬虫技术&#xff0c;虽然在数据收集和分析中发挥着重要作用&#xff0c;但也给网站管理员带来了挑战。为了保护网站数据不被恶意爬取&#xff0c;反爬虫技术应运而生。本文将探讨HTTP头部中的Referer字段在反爬虫技术中的应用&#xff0c;并…

docker搭建haproxy实现负载均衡

华子目录 获取haproxy镜像建立haproxy容器的数据卷获取haproxy的配置文件编写yaml文件运行测试 获取haproxy镜像 [rootdocker-node1 ~]# docker pull haproxy:2.3建立haproxy容器的数据卷 conf目录为数据卷 [rootdocker-node1 ~]# mkdir /var/lib/docker/volumes/conf/获取h…

阿里云数据库MongoDB版助力极致游戏高效开发

客户简介 成立于2010年的厦门极致互动网络技术股份有限公司&#xff08;以下简称“公司”或“极致游戏”&#xff09;&#xff0c;是一家集网络游戏产品研发与运营为一体的重点软件企业&#xff0c;公司专注于面向全球用户的网络游戏研发与运营。在整个产业链中&#xff0c;公…

深入探索前端调试神器vConsole

深入探索前端调试神器vConsole 在前端开发过程中&#xff0c;调试工具的重要性不言而喻。而vConsole作为一款轻量级的、可嵌入的JavaScript调试面板&#xff0c;为前端开发者提供了一个便捷的调试解决方案。本文将带你深入了解vConsole的基本概念、作用&#xff0c;并通过丰富…

子网划分实例

看到有人问这个问题&#xff1a; 想了一下&#xff0c;这是一个子网划分的问题&#xff1a; 处理方法如图&#xff1a; 这是一个子网划分的问题 设备1用三层交换机&#xff0c;端口设置为路由模式&#xff0c;设备2和设备3为傻瓜交换机模式 设备2和设备3下挂设备都是26为掩码&…

【机器人】振动分析和控制工具之Bode图

Bode 图完整介绍 Bode 图由两个部分组成&#xff1a; 幅值图 (Magnitude Plot)&#xff1a;描述系统对不同频率输入信号的增益大小&#xff08;幅值响应&#xff09;。相位图 (Phase Plot)&#xff1a;描述系统输出信号相对于输入信号的相位差。 Bode 图的横轴是频率&#x…

Rerender A Video 技术浅析(五):对象移除与自动配色

Rerender A Video 是一种基于深度学习和计算机视觉技术的视频处理工具&#xff0c;旨在通过智能算法对视频进行重新渲染和优化。 一、对象移除模块 1. 目标检测 1.1 概述 目标检测是对象移除的第一步&#xff0c;旨在识别视频中需要移除的对象并生成相应的掩码&#xff08;m…

经典的网络安全技术

以我的理解&#xff0c;“黑客”大体上应该分为“正”、“邪”两类&#xff0c;正派黑客依靠自己掌握的知识帮助系统管理员找出系统中的漏洞并加以完善&#xff0c;而邪派黑客则是通过各种黑客技能对系统进行攻击、入侵或者做其他一些有害于网络的事情&#xff0c;因为邪派黑客…

Figma入门-实战列表页

Figma入门-实战列表页 前言 在之前的工作中&#xff0c;大家的原型图都是使用 Axure 制作的&#xff0c;印象中 Figma 一直是个专业设计软件。 最近&#xff0c;很多产品朋友告诉我&#xff0c;很多原型图都开始用Figma制作了&#xff0c;并且很多组件都是内置的&#xff0c…

什么是Apache日志?为什么Apache日志分析很重要?

Apache是全球最受欢迎的Web服务器软件&#xff0c;支持约30.2%的所有活跃网站。凭借其可靠性、灵活性和强大的功能&#xff0c;Apache数十年来一直是互联网的中坚力量。 一、Apache Web服务器的工作原理 Apache Web服务器的工作原理如下&#xff1a; 接收HTTP请求&#xff1…

基于Mybatis,MybatisPlus实现数据库查询分页功能

基于Mybatis&#xff0c;MybatisPlus实现数据库查询分页功能 目录 基于Mybatis&#xff0c;MybatisPlus实现数据库查询分页功能使用Mybatis插件实现分页数据库准备分页插件配置和使用常用数据&#xff1a; 使用MybatisPlus插件实现分页数据库准备分页插件配置和使用自定义分页查…

Qt 联合Halcon配置

文章目录 配置代码窗口绑定 配置 选择添加库 选择外部库 LIBS -LC:/Program Files/MVTec/HALCON-17.12-Progress/lib/x64-win64/ LIBS -lhalconcpp\-lhdevenginecpp\-lhalconINCLUDEPATH C:/Program Files/MVTec/HALCON-17.12-Progress/include DEPENDPATH C:/Program Fil…

【Linux-ubuntu通过USB传输程序点亮LED灯】

Linux-ubuntu通过USB传输程序点亮LED灯 一,初始化GPIO配置1.使能时钟2.其他寄存器配置 二&#xff0c;程序编译三&#xff0c;USB传输程序 一,初始化GPIO配置 1.使能时钟 使能就是一个控制信号&#xff0c;用于决定时钟信号是否能够有效的传递或者被使用&#xff0c;就像一个…

CountDownLatch阻塞后countDown未执行会如何?

背景 某项目封装了 Kafka 消费者 API&#xff0c;根据传递的消费者线程数&#xff0c;创建 N 个消费者线程同时消费对应 topic 的数据&#xff0c;并在线程启动后收集到全局列表中&#xff0c;方便在程序调用 stop 流程时逐个停止。 主控类在创建 Kafka 消费线程时使用了 Cou…

【热力学与工程流体力学】流体静力学实验,雷诺实验,沿程阻力实验,丘里流量计流量系数测定,局部阻力系数的测定,稳态平板法测定材料的导热系数λ

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…

Ubuntu18安装后基本配置操作

1. 关掉自动更新 不关掉自动更新&#xff0c;会将你的ubuntu系统更新到更高版本&#xff0c;一些配置就不能用了&#xff0c;所以要关掉自动更新。在“软件和更新”中将“自动检查更新”设置为从不。 2. ubuntu换国内源 参考链接换源 按照这个换源这个换源好使 &#xff0c;…

Faiss 要点整理

Faiss能干什么 使用glove.6b.txt在字典中找到近义词&#xff0c;基本步骤包括加载数据、构建索引、进行相似性搜索 import numpy as np import faiss# 加载 GloVe 词向量 def load_glove_embeddings(file_path):embeddings {}with open(file_path, r, encodingutf-8) as f:fo…

得物使用AutoMQ构建海量数据处理的新一代可观测性架构

引言 得物作为全球领先的潮流网购社区&#xff0c;日益增长的用户和数据带来了巨大的技术挑战。当前&#xff0c;得物的可观测性平台每天生成数PB级Trace数据和数万亿条Span记录&#xff0c;要求平台具备高效的实时处理能力和低成本的数据存储解决方案。 传统的存算一体架构将…

硬件成本5元-USB串口采集电表数据完整方案-ThingsPanel快速入门

ThingsPanel开源物联网平台支持广泛的协议&#xff0c;灵活自由&#xff0c;本文介绍ThingsPanel通过串口来采集电表数据&#xff0c;简单易行&#xff0c;成本低廉&#xff0c;适合入门者学习试验&#xff0c;也适合一些特定的应用场景做数据采集。 适用场景&#xff1a; 降低…

数据库同步中间件DBSyncer安装配置及使用

1、介绍 DBSyncer&#xff08;英[dbsɪŋkɜː]&#xff0c;美[dbsɪŋkɜː 简称dbs&#xff09;是一款开源的数据同步中间件&#xff0c;提供MySQL、Oracle、SqlServer、PostgreSQL、Elasticsearch(ES)、Kafka、File、SQL等同步场景。支持上传插件自定义同步转换业务&#xf…