【GD32篇】驱动AD7616完成数据采集

2023-10-26

1.AD7616介绍

1.1 概述:

         AD7616 是一款 16 DAS(数据采集系统) ,支持对 16 个通道进行双路同步采样。 AD7616 采用 5 V 单电源供电,可以处理 ±10 V ±5 V 和±2.5 V 真双极性输入信号 ,同时每对通道均能以高达 1 MSPS的吞吐速率和 90.5 dB SNR 采样。利用片内过采样模式可实现更高的SNR 性能(过采样率 (OSR) 2 时, SNR 为92 dB)。输入箝位保护电路可以耐受高达±21 V 的电压。无论以何种采样频率工作 AD7616 的模拟输入阻抗均为 1 MΩ 。它采用单电源工作方式,具有片内滤波和高输入阻抗,因此无需驱动运算放大器和外部双极性电源。该器件均内置模拟输入箝位保护、一个双路 16 位电荷再分配 SAR 模数转换器 (ADC) 、一个灵活的数字滤波器、 2.5 V基准电压源和基准电压缓冲器以及高速串行和并行接口。 AD7616 兼容串行外设接口 (SPI)/QSPI/DSP/MICROWIRE

1.2 产品特性:

16 通道 双路 同步采样输入
可独立选择的通道输入范围
        真双极性 ±10 V ±5 V ±2.5 V
5 V 单模拟电源 V DRIVE 电源电压 2.3 V 3.6 V
完全集成的数据采集解决方案
        模拟输入箝位保护
        具有 1 MΩ 模拟输入阻抗的输入缓冲器
        一阶抗混叠模拟滤波器
        片内精密基准电压及基准电压缓冲器
        双通道 16 位逐次逼近型寄存器 (SAR)ADC
        吞吐速率 2×1 MSPS
        通过数字滤波器提供过采样功能
        灵活的序列器 支持突发模式
灵活的并行 / 串行接口
        SPI/QSPI/MICROWIRE/DSP 兼容
        可选循环冗余校验 (CRC) 错误检查
硬件 / 软件配置
性能
        信噪比 (SNR) 92 dB 500 kSPS 2 倍过采样
        信噪比 (SNR) 90.5 dB (1 MSPS)
        总谐波失真 (THD) −103 dB
        ±1 LSB INL( 典型值 ), ±0.99 LSB DNL 最大值
        模拟输入通道提供 8 kV ESD 额定值
片内自检测功能
80 引脚 LQFP 封装

1.3 引脚配置:

注: 引脚的功能配置详情需查看AD7616数据手册

1.4 时序图

图1.所有接口的通用时序图
图2.复位时序图
参数表1
图3.并行读取时序图
参数表2

        本次学习只使用了AD7616硬件模式下并行接口读取数据,而对于AD7616软件模式、串行接口、并行接口写操作未作介绍。

2.解析数据手册

2.1 引脚连接

35 REFSEL GND DI 使用外部基准电压
36 RESET PB11 DI 复位输入,低有效
37 SEQEN +3.3V DI 通道序列器使能
38 HW_RNGSEL1 GND DI 硬件模式 模拟输入范围±2.5V
39 HW_RNGSEL0 +3.3V DI
40 SER/PAR GND DI 并行接口选择输入
41-48 DB0-7 PD0-PD7 O/I 并行输出
53-60 DB8-15 PD8-PD15
61 WR/BURST +3.3V DI 突发模式使能
62 SCLK/RD PE9 DI 并行数据读取控制输入 如果CS,RD均为逻辑低电平,则使能输出总线
63 CS PE10 DI 片选
64-66 CHSEL0-2 +3.3V DI
67 BUSY
PE12 DO 输出繁忙 CONVST 上升沿之后,此引脚变为逻辑高电平,表示转换过程已开始。 
BUSY 输出保持高电平,直到当前选定通道的转换过程完成为止。BUSY 下降沿表示转换数据正被锁存至输出数据寄存器,稍后便可供读取。数据必须在 BUSY 变为低电平之后读取。当 BUSY 信号为高电平时,CONVST 的上升沿不起作用。
68 CONVST PE11 DI 通道组A/B的转换开始输入 在序列器模式下,当突发模式或过采样模式使能时,为了执行所需数量的转换,只需 CONVST 从低电平变为高电平一次。

注意:未与GPIO连接的引脚,已经与开发板焊死,写代码时不需要为其配置。

2.2工作模式

工作模式(硬件模式或软件模式) 在AD7616退出完全复位时配置 当 RESET 引脚从低电平变为高电平时,HW_RNGSELx 引脚的逻辑电平决定工作模式。HW_RNGSELx引脚具有双重功能。如果 HW_RNGSELx = 0b00,则 AD7616 进入软件模式。 HW_RNGSELx 的任何其它 组合都会将 AD7616 配置为硬件模式 。配置软件模式后,便会忽略 HW_RNGSELx 信号的逻辑电平。配置一种工作模式后,要退出该工作模式并设置另一种工作模式,需要通过RESET 引脚执行完全复位。若选择硬件模式,则所有后续器件配置都是通过引脚控制进行。硬件模式下禁止访问片内寄存器。在软件模式下,接口和基准电压配置必须通过引脚控制进行,但所有后续器件配置只能通过寄存器进行。

2.3数字接口

数字接口选择(并行或串行) 在AD7616退出完全复位时配置 。当RESET 引脚从低电平变为高电平时, SER/PAR 信号的逻辑电平配置该接口。若SER/PAR 信号设为 0 ,则使能并行接口。若SER/PAR 信号设为 1 ,则选择串行接口。

2.4复位功能

AD7616 有两种复位模式:完全或部分。复位模式选择取决于复位低电平脉冲的长度。部分复位要求RESET 引脚保持低电平40 ns到 500 ns 。释放 RESET 50 ns 之后,器件即完全可用,可以启动转换。完全复位要求RESET 引脚保持低电平至少 1.2 μs 。释放RESET 15 ms 之后,器件完成重新配置,可以启动转换。部分复位会重新初始化下列模块
序列器
数字滤波器
SPI
两个 SAR ADC
部分复位完成时,会丢弃当前转换结果。部分复位不会影响软件模式下设置的寄存器值,或硬件和软件模式下存储用户配置的锁存器。部分复位之后,软件模式下需要执行一次伪转换。完全复位会将器件复位至默认上电状态。 AD7616 退出完全复位时 会配置如下内容
硬件模式 或软件模式
内部 / 外部基准电压源
接口类型   (本文为并行接口)
上电时,一旦 V CC V DRIVE 电源均稳定下来,便可释放 RESET信号。完全复位后释放RESET 引脚时, HW_RNGSELx 、REFSEL、 SER/PAR DB4/SER1W 引脚的逻辑电平决定器件配置。
若选择硬件模式,则当RESET 引脚在完全复位模式下从低电平变为高电平时,CRC BURSTEN SEQEN OSx 信号所决定的功能也会被锁存。完成功能配置后,便会忽略这些信号 的变化。在硬件模式下,模拟输入范围(HW_RNGSELx 信号)可在完全或部分复位期间或正常工作期间配置,但硬件/软件模式选择需要完全复位才能重新配置,同时此设置会被锁存。在硬件模式下,退出完全和部分复位时均会查询CHSELx 和HW_RNGSELx引脚,以便执行如下操作
确定要获取哪一个初始模拟输入通道对进行转换。
配置序列器的初始设置。
选择模拟输入电压范围。

2.5 *序列器

AD7616 有一个高度可配置的片内序列器。序列器的功能和配置取决于 AD7616 的工作模式。 在硬件模式下,序列器只能按顺序工作,总是从通道V0A和V0B开始转换,然后依次转换后续各通道,直至配置的最后一个通道。
在硬件模式下,序列器由 SEQEN 引脚和 CHSELx 引脚配置。当 AD7616 退出完全复位时,序列器要么使能,要么禁用。
图4
当序列器使能时, CHSELx 引脚的逻辑电平决定选择哪些通 道在序列中进行转换。
图5

 2.6 *突发序列器

        突发模式下不需要为转换序列中的每个步骤产生一个CONVST脉冲。一个CONVST 脉冲就能转换序列中的每个步 骤。
        突发序列器是一个配合序列器工作的额外特性。若使能突发功能,则一个CONVST脉冲就能启动序列器中配置的所有通道的转换。使用突发功能时,无需为转换序列中的每个步骤产生一个CONVST 脉冲,若禁用突发功能则不然。
硬件突发序列器:
        将BURST 引脚置 1 ,就会在硬件模式下使能突发模式。还要将SEQEN 引脚置 1 以使能序列器。
        在硬件模式下,突发序列器由BURST SEQEN CHSELx 引脚配置。 AD7616 退出完全复位时,突发序列器要么使能,要么禁用。当释放RESET 引脚时, SEQEN 引脚和 BURST 引脚的逻辑电平决定突发序列器是使能还是禁用。释放RESET 引脚后,该功能便固定下来,要退出该功能并设置另一种配置,需要通过RESET 引脚执行完全复位。
        当突发序列器使能时,CHSELx 引脚的逻辑电平决定选择哪些通道在突发序列中进行转换。释放RESET 引脚时的 CHSELx 引脚状态决定要在序列中转换的通道初始设置。要在复位后重新
配置选定进行转换的通道,请将 CHSELx 引脚设为所需的设置并保持下一个BUSY 脉冲时间。
图6.BURST序列器硬件模式

 3. 驱动代码编写

 3.1 配置引脚功能

        配置AD7616引脚功能时需要注意,BUSY引脚类型为DO(只具备输出功能),而对于主芯片(GD32)来说,只需要配置为输入模式即可。而AD7616数据总线DB0-DB15为数字输出,对于主芯片而言并非模拟输入,而是数字输入(因为AD7616通过模拟输入引脚采集模拟数据,芯片内部已经将模拟量转换为数字量)。

//GPIO引脚初始化
void AD7616_PinInit(void)
{
	gpio_init(GPIOE,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_9|\
						GPIO_PIN_10|GPIO_PIN_11);//通用推挽输出
	gpio_init(GPIOE,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,GPIO_PIN_12);//浮空输入
	gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_11);//通用推挽输出
	
	gpio_init(GPIOD,GPIO_MODE_IPU|GPIO_MODE_IPD,GPIO_OSPEED_50MHZ,GPIO_PIN_ALL);//PD所有引脚为上下拉输入
}
//配置BUSY引脚外部中断
void AD7616_BUSY_ExtiConfig(void)
{
	gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOE,GPIO_PIN_SOURCE_12);//选择gpio引脚中断源
	exti_init(EXTI_12,EXTI_INTERRUPT,EXTI_TRIG_FALLING);//下降沿触发
	exti_interrupt_flag_clear(EXTI_12);//清除中断标志位
	exti_interrupt_enable(EXTI_12);//启用中断线
}

3.2 AD7616初始化配置

  本文使用的主芯片(GD32F10x)时钟频率为108MHZ,

而延时函数AD7616_Delay_9ns(uint32_t ns)只是通过while循环做空操作。

/*
	\brief:	AD7616复位功能配置
	\param:	mode : 复位模式
				AD7616_ALL_RESER :完全复位
				AD7616_PART_RESER :部分复位
	\retval:	none
*/
void AD7616_Reser(uint8_t mode)
{
	switch(mode)
	{
		case AD7616_ALL_RESER: //完全复位
			 AD7616_RESET_0;
			 AD7616_Delay_9ns(140);
			 AD7616_RESET_1;
			 delay_1ms(15);
			 break;
		case AD7616_PART_RESER: //部分复位
			 AD7616_RESET_0;
			 delay_1us(40);
			 AD7616_RESET_1;
			 AD7616_Delay_9ns(5);
			 break;
		default:
			 break;
	}
}

//AD7616初始化
void AD7616_Init(void)
{
	AD7616_PinInit();//引脚初始化
	AD7616_BUSY_ExtiConfig();//配置BUSY引脚外部中断
	//AD7616_RESET_1;
	//AD7616_Reser(AD7616_PART_RESER);//部分复位
	AD7616_Reser(AD7616_ALL_RESER);//完全复位
    //未使能输出总线
	AD7616_RD_1;
	AD7616_CS_1;
    AD7616_CONVST_0;//拉低CONVST电平
}

3.3启动一次转换

//AD值转换为实际温度值
float AD7616_ad_TO_temp(uint16_t i,const uint16_t ad)
{
	return (float)(AD7616_CH_member[i].A*ad*ad + AD7616_CH_member[i].B*ad + AD7616_CH_member[i].C);
}
/*
	AD7616转换函数
*/
void EXTI10_15_IRQHandler(void)
{
	if(RESET!=exti_interrupt_flag_get(EXTI_12))
	{
		exti_interrupt_flag_clear(EXTI_12);//清除中断标志位
		uint16_t i;
        AD7616_CONVST_0;
		for(i=0;i<AD7616_CHANNEL_VAL;i++)
		{
			//printf("BUSY=%d\n",gpio_input_bit_get(GPIOE,GPIO_PIN_12));//启动转换后BUSY为低电平
            AD7616_CS_0;
			AD7616_RD_0;				//低电平时间>30ns
			AD7616_Data[i]=AD7616_GET_DATA();//读取数据
			AD7616_RD_1;				//高电平时间>10ns
			AD7616_CS_1;
			AD7616_Delay_9ns(3);
		}
		AD7616_READ_STATE=AD7616_STATE_READABLE;//可读
		//AD7616_CONVST_0;
	}
}
//启动转换
void AD7616_StartConvst(void)
{
	memset(AD7616_Data,0,AD7616_CHANNEL_VAL);//清空缓存
	//AD7616_CONVST_0;
	//AD7616_Delay_9ns(1);
	AD7616_CONVST_1;
	//printf("BUSY=%d\n",gpio_input_bit_get(GPIOE,GPIO_PIN_12));//未启动转换时BUSY为高电平
}
/*
	\brief:	启动多次转换,并求取各通道AD平均值
	\param:	*ad 接收AD值的地址
				count 启动次数
	\retval:	ERROR 超时    SUCCESS 成功转换
*/

ErrStatus AD7616_Convst_Average(const uint32_t count)
{
	uint32_t i,j;
	uint32_t sum[AD7616_CHANNEL_VAL]={0};
	for(i=0;i<count;i++)
	{
		AD7616_READ_STATE=AD7616_STATE_UNREADABLE;//不可读
		AD7616_StartConvst();//开始转换
		j=0;
		while(AD7616_READ_STATE!=AD7616_STATE_READABLE)//等待转换完成
		{
			AD7616_Delay_9ns(1);
			j++;
			if(j==500000) return ERROR;//超时
		}
		for(j=0;j<AD7616_CHANNEL_VAL;j++)
		{
			sum[j]+=AD7616_Data[j];
		}
	}
	//取平均值
	for(i=0;i<AD7616_CHANNEL_VAL;i++)
	{
		AD7616_AD[i]=sum[i]/count;
		AD7616_Temp[i]=AD7616_ad_TO_temp(i,AD7616_AD[i]);//转换温度
	}
	return SUCCESS;
}

3.4 头文件

#ifndef _AD7616_H_
#define _AD7616_H_

#include "gd32f10x.h"
#include "flash.h"
#include <string.h>
#include <stdlib.h>
/*
	Pin:
	RD 	-- PE9		
	CS   	-- PE10		片选
	CONVST 	-- PE11		
	BUSY 	-- PE12     
	RESET	-- PB11     
	DB0~DB15 -- PD0~PD15
*/
/* Pin define */
#define AD7616_RESET_0 	gpio_bit_reset(GPIOB,GPIO_PIN_11)
#define AD7616_RESET_1 	gpio_bit_set(GPIOB,GPIO_PIN_11)
#define AD7616_RD_0 	gpio_bit_reset(GPIOE,GPIO_PIN_9)
#define AD7616_RD_1 	gpio_bit_set(GPIOE,GPIO_PIN_9)
#define AD7616_CS_0		gpio_bit_reset(GPIOE,GPIO_PIN_10)
#define AD7616_CS_1		gpio_bit_set(GPIOE,GPIO_PIN_10)
#define AD7616_CONVST_0 gpio_bit_reset(GPIOE,GPIO_PIN_11)
#define AD7616_CONVST_1 gpio_bit_set(GPIOE,GPIO_PIN_11)
#define AD7616_BUSY_1	gpio_bit_set(GPIOE,GPIO_PIN_12)
#define AD7616_BUSY_LEVEL() gpio_input_bit_get(GPIOE,GPIO_PIN_12)
#define AD7616_INPUT_DB(x) 	gpio_input_bit_get(GPIOD,BIT(x))//数据引脚0-15
#define AD7616_GET_DATA() gpio_input_port_get(GPIOD)			//获取PE端口值

#define AD7616_CHANNEL_VAL 16

#define AD7616_ALL_CH 16
#define AD7616_V0A 0
#define AD7616_V0B 1
#define AD7616_V1A 2
#define AD7616_V1B 3
#define AD7616_V2A 4
#define AD7616_V2B 5
#define AD7616_V3A 6
#define AD7616_V3B 7
#define AD7616_V4A 8
#define AD7616_V4B 9
#define AD7616_V5A 10
#define AD7616_V5B 11
#define AD7616_V6A 12
#define AD7616_V6B 13
#define AD7616_V7A 14
#define AD7616_V7B 15

#define AD7616_ALL_RESER 0   //完全复位
#define AD7616_PART_RESER 1  //部分复位
#define AD7616_AD_GET_COUNT 6//转换次数
#define AD7616_STATE_UNREADABLE 0  //转换开始
#define AD7616_STATE_READABLE 1 //可读
/*     parameter     */

/*
	AD7616结构体参数
	temp=A*x*x + B*x + C
*/
typedef struct 
{
	uint32_t number;//通道编号
	float A;        
	float B;
	float C;
}AD7616_parameter;
extern AD7616_parameter AD7616_CH_member[AD7616_CHANNEL_VAL];
extern uint16_t AD7616_Data[AD7616_CHANNEL_VAL];//AD值
extern uint16_t AD7616_AD[AD7616_CHANNEL_VAL];//AD平均值
extern float AD7616_Temp[AD7616_CHANNEL_VAL];//温度值


/* function */
void AD7616_Init(void);
void AD7616_StartConvst(void);//启动转换
ErrStatus AD7616_Convst_Average(const uint32_t count);//启动多次转换并取平均值

#endif

3.5实验结果

         未接温度传感器时,所有通道输出最大值0x7FFF(第15位为符号位)。

图6.16通道AD值

         接入一个热敏电阻时,采集到的AD值便随温度改变,可通过校准,把AD值转换为实际温度。

图7

 4.总结

        本文为学习AD7616采集数据所做,数据手册很长,并不是单看时序图就能完成驱动编写,但看懂了数据手册之后,就会发现代码挺简单的。需要注意的便是BUSY引脚,它只有输出状态,不要被(手动模式)干扰。在CONVST引脚上升沿时,BUSY便会自动变为高电平,数据转换完成时,BUSY变为低电平。

 本文中没有提供主函数代码,需要读取数据时,直接调用

ErrStatus AD7616_Convst_Average(const uint32_t count);启动多次转换函数,然后直接从数组中依次读取数据(AD值或温度值)即可。校准值需要自己实际测量写入。

最后,文章中可能存在着问题,欢迎各位大佬不吝赐教。

                                                                                                                                2022年11月29日

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【GD32篇】驱动AD7616完成数据采集 的相关文章

随机推荐

  • 哈工大OS实验五---基于内核栈切换的进程切换

    基于内核栈切换的进程切换 实验目的 将linux 0 11中采用的TSS切换部分去掉 取而代之的是基于堆栈的切换程序 写成一段基于堆栈切换的代码 要实现基于内核栈的任务切换 主要完成如下三件工作 重写switch to 将重写的switch
  • Mysql高级部分系列(四)

    1 数据库的设计规范 1 1 为什么不使用自增ID 1 1 1 自增ID的问题 自增ID做主键 简单易懂 几乎所有数据库都支持自增类型 只是实现上各自有所不同而已 自增ID除了简单 其他都是缺点 总体来看存在以下几方面的问题 1 1 1 1
  • idea 部署git总结

    idea 部署git总结 github密匙快捷获取方法 idea将本地项目上传到远程仓库GitHub 报错 error src refspec master does not match any Everything up to date
  • 【线程池上篇】4种常用线程池介绍

    一 线程池介绍 概念 使用原因 线程池就是提前创建好一些线程放在一起的集合 线程池的工作模式时拿到任务后在自己的池子里找看谁闲着 这个活就让谁去干 多线程模式下 系统需要不断地启动和关闭新线程 这个过程不但消耗资源而在存在线程间过渡的不安全
  • C 程序结构

    原文链接 https www runoob com cprogramming c program structure html 在我们学习 C 语言的基本构建块之前 让我们先来看看一个最小的 C 程序结构 在接下来的章节中可以以此作为参考
  • 通过python技术获取甲流分布数据

    近期 多地学校出现因甲流导致的班级停课 儿科甲流患者就诊量呈数倍增长 此轮甲流为何如此严重 感染甲流之后会出现哪些症状 经过专家的介绍甲流之所以这么严重有这些原因导致的 一 疫情完全放开后很多孩子不戴口罩了 预防流感的作用会下降 二是 免疫
  • background-position的向右对齐用法

    一直只知道background position x轴位置 y轴位置 如果靠近左边偏移7px就写成background position 7px 20px 这样的 但是像右要怎么办 以前我是傻傻的给父容器计算了宽度 然后就向左偏移固定的宽度
  • 为什么推荐科研工作使用git

    为什么推荐科研工作使用git 每个人都会犯错 而使用Git 的最大好处就在于 几乎在所有的情况下你都能 撤消 你的错误操作 比如如果你忘记了把一个小小的改动包含进来 因此你要改正你的上个提交 又或者你想要撤销一个完整的提交 因为这个功能有可
  • 【C/C++】获取计算机CPUID序列号

    1 GetGPUId h文件 pragma once include
  • 【解决报错】c#使用ManagedWifi报错出现“不能作为非托管结构进行封送处理;无法计算有意义的大小或偏移量。”

    最近在做C 上位机wifi通信的时候使用了MangedWifi库 但这个库并没有想象中好用 遇到了不少问题 首先网上流传的例程又不能运行 再接着当wifi断开或连接时会异常退出的bug 通过反反复复的调试后 我最终确认了错误的来源 发现是M
  • 微信公众号 config:fail,Error: 系统错误,错误码:1

    微信公众号开发 微信开发者工具 打开调试模式 出现config fail Error 系统错误 错误码 1 查看一下wx config是否成功渲染了 重新赋值 修改后的代码如下 chooseImage var this this 新增代码块
  • 生产环境lvm磁盘扩容!!!

    一次就好 亲身体验生产环境lvm磁盘扩容 这一天体验了真正的生产环境 三急 中午客户打电话说报表几个小时没更新了 是不是你们系统有问题啊 于是开始排除发现磁盘空间满了 需要进行扩容 咱又没有扩容经验潜心研究一下午 终于得出结论 以下将描述我
  • 如何将计算机的硬盘分割,电脑硬盘如何快速分区

    电脑硬盘一般有2个盘或者4个盘 怎样自己增添一个硬盘 或者来均分电脑那300G或者500G的硬盘空间呢 今天学习啦小编给大家介绍下电脑硬盘如何快速分区吧 电脑硬盘快速分区方法一 1 点击我的电脑 点击鼠标右键 选择管理项 2 打开后选择磁盘
  • Python基础教程,Python入门教程(非常详细)

    Python 英文本意为 蟒蛇 直到 1989 年荷兰人 Guido van Rossum 简称 Guido 发明了一种面向对象的解释型编程语言 后续会介绍 并将其命名为 Python 才赋予了它表示一门编程语言的含义 图 1 Python
  • C# TCPclient 服务器保持长连接的一种办法(变相的心跳包功能)

    本文章向大家介绍C TCPclient 服务器保持长连接的一种办法 变相的心跳包功能 主要包括C TCPclient 服务器保持长连接的一种办法 变相的心跳包功能 使用实例 应用技巧 基本知识点总结和需要注意事项 具有一定的参考价值 需要的
  • neo4j从安装到远程访问一气呵成

    从安装到远程访问配置 安装Java JDK JDK下载 JDK配置环境 安装Neo4j Neo4j下载 系统变量设置 通过控制台启动 Neo4j 注册 Neo4j 服务 启动 Neo4j 服务 停止 Neo4j 服务 重启 Neo4j 服务
  • 【千律】C++基础:类的派生与继承

    include
  • postman环境设置

    本来是想在另一篇博客基础上接着写的 但是考虑到不想搞太长 干脆分开写 看起来更直接清楚一下 使用postman调接口 经常会遇到不同的的环境 但是接口是一样的 不想添加太多没用的请求 因为除了同一个接口请求要写多遍 更重要的是环境地址和端口
  • gprmax3.0安装、GPU加速(cuda)配置、通过python使用gprmax的问题

    gprmax3 0安装 GPU加速 cuda 配置 通过python使用gprmax的问题 一 安装过程 二 通过NVIDIA CUDA使用GPU加速功能 三 通过VS2019或VScode操纵gprmax 鉴于网上其他教程版本较低 本篇记
  • 【GD32篇】驱动AD7616完成数据采集

    1 AD7616介绍 1 1 概述 AD7616 是一款 16 位 DAS 数据采集系统 支持对 16 个通道进行双路同步采样 AD7616 采用 5 V 单电源供电 可以处理 10 V 5 V 和 2 5 V 真双极性输入信号 同时每对通