1、简介

开发板S32K144+S32DS+JLINK,裸机版的程序编写

S32K14x包含两个12位ADC模块,ADC0和ADC1

  • 应用程序可能需要ADC的连续采样(4K采样/秒),这可能对CPU有相当大的负载。虽然使用可编程延迟块(PDB)来触发ADC可能会减少一些CPU负载,但当ADC以非常高的速率采样或PDB被绕过时,ADC支持DMA请求功能以获得更高的性能。ADC可以在转换完成时触发DMA(通过DMA请求)。TRGMUX会根据不同的应用需求,使用软件为用户提供更灵活的DMA触发方案,例如,可以在多个ADC转换完成后触发DMA,而不是每次ADC转换完成后触发
  • 双ADC模块支持交错(interleave)采样通道
  • ADC触发源:触发器通过PDB或TRGMUX连接,提供灵活的触发方案,PDB为ADC生成触发器和预触发器(ADC和PDB成对操作,每个PDB通道将有多达8个预触发器用于ADC通道控制,这提供了一个自动触发方案,因此无需CPU参与
  • CMP out、LPIT、RTC和LPTMR能够通过TRGMUX触发每个ADC。LPIT最多支持4个预触发器,这些预触发器只能在每个ADC的ADHWTS0-ADHWTS3上使用。对于其余的外设,需要软件配置来提供预触发器。请参见SIM_ADCOPT[ADCxSWPRETRG]配置软件预触发
  • ADC触发方案。ADC一般支持两种触发方式:默认的触发方案使用PDB触发ADC(建议)。另一个可选的触发方案是使用TRGMUX。请注意对于TRGMUX触发,最多只有4个预触发,SIM_ADCOPT[ADCxTRGSEL]字段用于控制ADC触发源/方案。当ADCxTRGSEL=0时,ADC预触发直接来自PDB。当ADCxTRGSEL=1时,ADC预触发来自TRGMUX,如在LPIT。

注意:在使用TRGMUX时,只有LPIT支持预触发器。对于其他外设,需要使用SIM_ADCOPT[ADCxSWPRETRG]配置软件预触发器

1.1、PDB触发方案是ADC的默认触发方案,

也是建议的触发方式。一个ADC和一个PDB作为一对:PDB0-ADC0, PDB1-ADC1。PDB0和PDB1的触发源可以分别通过TRGMUX_PDB0和TRGMUX_PDB1配置。

这里我们以PDB0-ADC0为例来指定触发方案。

  1. 设置SIM_ADCOPT [ADCxTRGSEL] = 0。
  2. 选择PDB0通道0作为ADC触发源。
  3. PDB0预触发器将直接连接到ADC0 ADHWTS端口来控制通道。
  4. ADC0 COCO信号被直接反馈回PDB0去激活PDB锁定状态。

下图说明了使用PDB触发ADC的典型案例:

1.2、LPIT触发ADC步骤:

LPIT最多支持4个通道,每个通道都有一个触发器和一个预触发器。

  1. 设置SIM_ADCOPT [ADCxTRGSEL] = 1。选择TRGMUX out作为ADC触发源。
  2. 配置TRGMUX以选择LPIT触发器作为ADC触发器和预触发器源。TRGMUX只支持每个ADC最多4个预触发器(pre-trigger0-pretrigger3;其他预触发器不能与TRGMUX一起使用)。
  3. ADC COCO在这种情况下是不需要的。软件必须适应每个ADC转换之间的间隔时间。
  4. 使用TRGMUX允许使用一个LPIT来同时触发两个adc。这是使用TRGMUX触发代替PDB触发的好处之一。

请注意对于除PDB和LPIT之外的触发器源,需要软件提供ADC预触发器。

1.3、被触发后的选择

可以选择触发启用和触发的任意组合;它们是相互独立的。但是在它被选中之后,就不能动态地更改它了。

定义了更改触发器和启用源(触发器和预触发器源)的步骤。改变触发源可以通过以下两种方法中的任何一种随时完成。

1.3.1、方法1

  1. 停止当前触发产生单元。
  2. 等待一个时间周期等于ADC工作时钟的2.5个周期和ADC主机接口时钟的1.5个周期,给锁存最后一个触发器的时间,如果有的话
  3. 轮询所有0的ADC_SC2[TRGSTLAT]的状态,它将在完成所有查询到那时为止的转换后变为0
  4. 更改所需源的选择,然后
  5. 启动新的触发单位

1.3.2、方法2需要立即切换

  1. 停止当前触发产生单元
  2. 通过设置ADC_CFG1[CLRLTRG]刷新触发器处理程序块的所有排队触发器,这将刷新除ADC正在处理的触发器(如果有的话)之外的所有排队触发器
  3. 等待一个时间周期等于ADC工作时钟的总2.5个周期
  4. 等待ADC_SC2[TRGSTLAT]的状态变为全0
  5. 更改所需源的选择,然后启动新的触发单位

请注意如果不遵循上述限制,则可能不会报告此流程错过的触发器

1.4、ADC模块的特点

  • 高达12位分辨率的线性逐次逼近算法
  • 单端12位、10位、8位输出模式
  • 输出为右对齐的无符号格式
  • 单次或连续转换模式
  • 可配置样品时间和转换速度/功率
  • 转换完成/硬件平均完成标志中断
  • 可选软件触发转换/硬件触发AD转换(触发源和通道有相应的PDB模块和TRGMUX配置)
  • 支持可编程自动比较(大于、小于、等于,范围内或超出范围)功能
  • 支持硬件2/4/8/16/32次采样平均输出功能;
  • 外部可选参考电压VREFH/VREFL
  • 自校准功能,保证ADC采样精度,在完成ADC模块初始化后开始ADC采样转换前,必须做自校准(调用S32K SDK ADC组件的相应API函数即可),才能获得TUE=±4LSB 的转换精度
  • ADC的采样保持时间必须设置的足够长,以满足ADC通道间切换时内部采样电容能够真实反映外部信号的最快变化

2、原理图

3、寄存器

3.1、SC1A - aSC1P: ADC Status and Control Register 1

SC1A用于软件和硬件触发模式的操作。

Field

Name

Description

0-5

ADCH

输入通道选择

6

AIEN

转换完成中断使能

7

COCO

转换完成标志

3.2、CFG1: ADC Configuration Register 1

配置寄存器1 (CFG1)选择操作方式、时钟源、时钟分频。

Field

Name

Description

0-1

ADICLK

输入时钟选择

2-3

MODE

选择ADC的分辨率

5-6

ADIV

输入时钟分频

8

CLRLTRG

清除所有锁触发器

3.3、CFG2: ADC Configuration Register 2

CFG2 (Configuration Register 2)在长采样模式下选择长采样时间

Field

Name

Description

0-7

SMPLTS

采样周期选择

3.4、RA - aRP: ADC Data Result Registers

数据结果寄存器(Rn)包含通道ADC转换的结果,下表描述了不同的数据结果寄存器模式的操作。

Field

Name

Description

0-11

D

数据结果

3.5、CV1 - CV2: Compare Value Registers

比较值寄存器(CV1和CV2)包含一个用于比较的比较值

Field

Name

Description

0-15

CV

比较值

3.6、SC2: Status and Control Register 2

状态和控制寄存器2 (SC2)包含ADC模块的转换激活、硬件/软件触发选择、比较功能和电压参考选择

Field

Name

Description

0-1

REFSEL

参考电压选择

2

DMAEN

DMA使能

3

ACREN

配置compare函数,检查被监视的输入的转换结果是否在ACFGT值决定的CV1和CV2的范围之内或之外。

4

ACFGT

配置比较功能,根据ACREN的值对比CV1和CV2的转换结果

5

ACFE

比较功能使能

6

ADTRG

转换触发选择

7

ADACT

转换中标记位

13-14

TRGPRNUM

正在工作的触发器编号

16-19

TRGSTLAT

触发器状态

24-27

TRGSTERR

多路触发器请求出错

对比模式如下:

3.7、SC3: Status and Control Register 3

状态和控制寄存器3 (SC3)控制校准、连续转换、以及ADC模块的硬件平均功能

Field

Name

Description

0-1

AVGS

硬件平均选择

2

AVGE

硬件平均使能

3

ADCO

连续转换模式

4

CAL

ADC校准功能

3.8、BASE_OFS: BASE Offset Register

基偏移寄存器(BASE_OFS)包含校准算法用于确定偏移校准值(OFS)的偏移值。

Field

Name

Description

0-7

BA_OFS

基线偏移误差修正值

3.9、OFS: ADC Offset Correction Register

ADC偏移校正寄存器(OFS)包含校准生成的偏移误差校正值(OFS)

Field

Name

Description

0-15

OFS

偏移误差值

3.10、USR_OFS: USER Offset Correction Register

ADC用户偏移校正寄存器(USR_OFS)包含用户定义的偏移量

Field

Name

Description

0-7

USR_OFS

用户偏移误差修正值

3.11、XOFS: ADC X Offset Correction Register

ADC X偏移校正寄存器(XOFS)包含转换结果错误校正算法中使用的X偏移量

Field

Name

Description

0-5

XOFS

X偏移误差修正值

3.12、YOFS: ADC Y Offset Correction Register

ADC Y偏移校正寄存器(YOFS)包含转换结果错误校正算法中使用的Y偏移量

Field

Name

Description

0-5

YOFS

Y偏移误差修正值

3.13、G: ADC Gain Register

增益寄存器(G)包含整个转换的增益误差校正

Field

Name

Description

0-10

G

增益误差调整因子的整体转换

3.14、UG: ADC User Gain Register

用户增益寄存器(G)包含用户增益误差校正

Field

Name

Description

0-9

UG

用户增益误差调整因子

3.15、CLPS: ADC General Calibration Value Register S

通用校准值寄存器(CLPx)包含由校准函数生成的校准信息

Field

Name

Description

0-6

CLPS

校准值

3.16、CLP3: ADC Plus-Side General Calibration Value Register 3

Field

Name

Description

0-9

CLPS3

校准值

3.17、CLP2: ADC Plus-Side General Calibration Value Register 2

Field

Name

Description

0-9

CLP2

校准值

3.18、CLP1: ADC Plus-Side General Calibration Value Register 1

Field

Name

Description

0-9

CLP1

校准值

3.19、CLP0: ADC Plus-Side General Calibration Value Register 0

Field

Name

Description

0-9

CLP0

校准值

3.20、CLPX: ADC Plus-Side General Calibration Value Register X

Field

Name

Description

0-6

CLPX

校准值

3.21、CLP9: ADC Plus-Side General Calibration Value Register 9

Field

Name

Description

0-6

CLP9

校准值

3.22、CLPS_OFS: ADC General Calibration Offset Value Register S

Field

Name

Description

0-3

CLPS_OFS

电容偏移校正值

3.23、CLP3_OFS: ADC Plus-Side General Calibration Offset Value Register 3

Field

Name

Description

0-3

CLP3_OFS

电容偏移校正值

3.24、CLP2_OFS: ADC Plus-Side General Calibration Offset Value Register 2

Field

Name

Description

0-3

CLP2_OFS

电容偏移校正值

3.25、CLP1_OFS: ADC Plus-Side General Calibration Offset Value Register 1

Field

Name

Description

0-3

CLP1_OFS

电容偏移校正值

3.26、CLP0_OFS: ADC Plus-Side General Calibration Offset Value Register 0

Field

Name

Description

0-3

CLP0_OFS

电容偏移校正值

3.27、CLPX_OFS: ADC Plus-Side General Calibration Offset Value Register X

Field

Name

Description

0-11

CLPX_OFS

电容偏移校正值

3.28、CLP9_OFS: ADC Plus-Side General Calibration Offset Value Register 9

Field

Name

Description

0-11

CLP9_OFS

电容偏移校正值

3.29、SC1AA - SC1Z: ADC Status and Control Register 1

SC1A用于软件和硬件触发模式的操作。

Field

Name

Description

0-5

ADCH

输入通道选择

6

AIEN

转换完成中断使能

7

COCO

转换完成标记

3.30、RAA - RZ: ADC Data Result Registers

数据结果寄存器(Rn)包含通道ADC转换的结果

Field

Name

Description

0-11

D

数据结果

3.31、SIM_ADCOPT: ADC Options Register

此寄存器是那选择ADC触发器,在SIM章节下

Field

Name

Description

0

ADC0TRGSET

ADC0触发器选择

1-3

ADC0SWPRETRG

ADC0软件预触发源

4-5

ADC0PRETRGSEL

ADC0预触发源选择

ADC1从bit 8开始,内容一样

3.32、TRGMUX_ADC0:TRGMUX ADC0 Register

此及寄存器是触发器输入源的选择,其中

Field

Name

Description

SELx

触发器输入源选择

31 LK TRGMUX寄存器上锁

其中SELx定义为:

再后面全是保留位

4、代码编写


#include "S32K144.h"
#include "led.h"
#include "key.h"
#include "uart.h"
#include "clocks.h"
#include "lptmr.h"
#include "lpit.h"
#include "systick.h"
#include "rtc.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "ftm.h"
#include "pdb.h"uint32_t ADC_RawResult;
uint16_t ADC_mVResult;void adc_software_trigger(void)
{PCC->PCCn[PCC_ADC0_INDEX] &=~ PCC_PCCn_CGC_MASK;  /* Disable clock to change PCS */PCC->PCCn[PCC_ADC0_INDEX] |= PCC_PCCn_PCS(1);     /* PCS=1: Select SOSCDIV2 */PCC->PCCn[PCC_ADC0_INDEX] |= PCC_PCCn_CGC_MASK;   /* Enable bus clock in ADC */ADC0->SC1[0] |= ADC_SC1_ADCH_MASK;    /* ADCH=1F: Module is disabled for conversions *//* AIEN=0: Interrupts are disabled */ADC0->CFG1 |= ADC_CFG1_ADIV_MASK| ADC_CFG1_MODE(1); /* ADICLK=0: Input clk=ALTCLK1=SOSCDIV2  *//* ADIV=0: Prescaler=1                  *//* MODE=1: 12-bit conversion                 */ADC0->CFG2 = ADC_CFG2_SMPLTS(12); /* SMPLTS=12(default): sample time is 13 ADC clks  */ADC0->SC2 = 0x00000000;           /* ADTRG=0: SW trigger                             *//* ACFE,ACFGT,ACREN=0: Compare func disabled     *//* DMAEN=0: DMA disabled                             *//* REFSEL=0: Voltage reference pins= VREFH, VREEFL */ADC0->SC3 = 0x00000000;        /* CAL=0: Do not start calibration sequence        *//* ADCO=0: One conversion performed              *//* AVGE,AVGS=0: HW average function disabled         */while(1){/* Initiate new conversion by writing to ADC0_SC1A(ADCH) */ADC0->SC1[0] = ADC_SC1_ADCH(2); /* ADCH = 2: External channel 2 as input *//* Wait for latest conversion to complete */while(((ADC0->SC1[0] & ADC_SC1_COCO_MASK)>>ADC_SC1_COCO_SHIFT) == 0);ADC_RawResult = ADC0->R[0]; /* Read ADC Data Result A (ADC0_RA) */ADC_mVResult = (ADC_RawResult * 5000) / (1<<12); /* Convert to mV (@VREFH = 5V) */}
}
void adc_pdb_trigger(void)
{PCC->PCCn[PCC_ADC0_INDEX] &=~ PCC_PCCn_CGC_MASK;  /* Disable clock to change PCS */PCC->PCCn[PCC_ADC0_INDEX] |= PCC_PCCn_PCS(1);     /* PCS=1: Select SOSCDIV2 */PCC->PCCn[PCC_ADC0_INDEX] |= PCC_PCCn_CGC_MASK;   /* Enable bus clock in ADC *//******************************************************* Initialize ADC0:* External channel 2, hardware trigger,* single conversion, 12-bit resolution** NOTE: ADC0->SC1[4] corresponds to ADC0_SC1E register******************************************************/ADC0->SC1[4] |= ADC_SC1_ADCH_MASK; /* ADCH=1F: Module is disabled for conversions */ADC0->CFG1 |= ADC_CFG1_ADIV_MASK| ADC_CFG1_MODE(1);   /* ADICLK=0: Input clk=ALTCLK1=SOSCDIV2  */ADC0->CFG2 = ADC_CFG2_SMPLTS(12); /* SMPLTS=12(default): sample time is 13 ADC clks  */ADC0->SC2 = ADC_SC2_ADTRG(1); /* ADTRG = 1: HW trigger */ADC0->SC1[4] = ADC_SC1_ADCH(2); /* ADCH = 2: External channel 2 as ADC0 input */ADC0->SC3 = 0x00000000;        /* CAL=0: Do not start calibration sequence        *//* ADCO=0: One conversion performed              *//* AVGE,AVGS=0: HW average function disabled         *//************************************************* Initialize PDB0:* 1 second period, continuous mode* PDB0_CH0 pre-trigger 4 output enabled************************************************/PCC->PCCn[PCC_PDB0_INDEX] |= PCC_PCCn_CGC_MASK; /* Enable bus clock in PDB */PDB0->SC = PDB_SC_PRESCALER(6) /* PRESCALER = 6: clk divided by (64 x Mult factor) */| PDB_SC_TRGSEL(15) /* TRGSEL = 15: Software trigger selected */| PDB_SC_MULT(3) /* MULT = 3: Multiplication factor is 40 */| PDB_SC_CONT_MASK; /* CONT = 1: Enable operation in continuous mode *//* S32K 参考手册 1161页有写PDBn CHn对应的ADCn_SC1寄存器  */PDB0->MOD = 15625;PDB0->CH[0].C1 = (PDB_C1_TOS(0x10) /* TOS = 10h: Pre-trigger 4 asserts with DLY match */| PDB_C1_EN(0x10)); /* EN = 10h: Pre-trigger 4 enabled */PDB0->CH[0].DLY[4] = 15625; /* Delay set to half the PDB period = 9375 */PDB0->SC |= PDB_SC_PDBEN_MASK | PDB_SC_LDOK_MASK; /* Enable PDB. Load MOD and DLY */PDB0->SC |= PDB_SC_SWTRIG_MASK; /* Single initial PDB trigger */while(1){/* Wait for latest conversion to complete */while(((ADC0->SC1[4] & ADC_SC1_COCO_MASK)>>ADC_SC1_COCO_SHIFT) == 0);ADC_RawResult = ADC0->R[4]; /* Read ADC Data Result E (ADC0_RE) */ADC_mVResult = (ADC_RawResult * 5000) / (1<<12); /* Convert to mV (@VREFH = 5V) */}
}
void adc_trgmux_trigger(void)
{PCC->PCCn[PCC_ADC0_INDEX] &=~ PCC_PCCn_CGC_MASK;  /* Disable clock to change PCS */PCC->PCCn[PCC_ADC0_INDEX] |= PCC_PCCn_PCS(1);     /* PCS=1: Select SOSCDIV2 */PCC->PCCn[PCC_ADC0_INDEX] |= PCC_PCCn_CGC_MASK;   /* Enable bus clock in ADC */ADC0->SC1[0] |= ADC_SC1_ADCH_MASK;    /* ADCH=1F: Module is disabled for conversions */ADC0->CFG1 |= ADC_CFG1_ADIV_MASK| ADC_CFG1_MODE(1);   /* ADICLK=0: Input clk=ALTCLK1=SOSCDIV2  */ADC0->CFG2 = ADC_CFG2_SMPLTS(12); /* SMPLTS=12(default): sample time is 13 ADC clks  */ADC0->SC2 = ADC_SC2_ADTRG(1); /* ADTRG = 1: HW trigger */ADC0->SC1[0] = ADC_SC1_ADCH(12); /* ADCH = 12: External channel 12 as ADC0 input */ADC0->SC3 = 0x00000000;         /* CAL=0: Do not start calibration sequence        *//* ADCO=0: One conversion performed              *//* AVGE,AVGS=0: HW average function disabled         *//************************************************* Configure pin PTB5 as TRGMUX_IN0************************************************/PCC->PCCn[PCC_PORTA_INDEX] = PCC_PCCn_CGC_MASK; /* Enable clock gate for PORTB */PORTA->PCR[6] = PORT_PCR_MUX(6); /* Mux = 6: PTB5 as TRGMUX_IN0 *//* Select TRGMUX_IN0 as ADC0 Trigger Mux input source 0 */TRGMUX->TRGMUXn[TRGMUX_ADC0_INDEX] = TRGMUX_TRGMUXn_SEL0(2U);/************************************************* SIM Configurations for ADC triggering:* Pre-trigger source: Software pre-trigger* Trigger select: TRGMUX output***********************************************/SIM->ADCOPT = SIM_ADCOPT_ADC0PRETRGSEL(2) /* ADC0PRETRGSEL = 10b: Software pretrigger */| SIM_ADCOPT_ADC0SWPRETRG(4) /* ADC0SWPRETRG = 100b: SW Pre-trigger 0 */| SIM_ADCOPT_ADC0TRGSEL(1); /* ADC0TRGSEL = 1: TRGMUX output as trigger */while(1){/* Wait for latest conversion to complete */while(((ADC0->SC1[0] & ADC_SC1_COCO_MASK)>>ADC_SC1_COCO_SHIFT) == 0);ADC_RawResult = ADC0->R[0]; /* Read ADC Data Result E (ADC0_RE) */ADC_mVResult = (ADC_RawResult * 5000) / (1<<12); /* Convert to mV (@VREFH = 5V) */}
}
int main(void)
{WDOG_disable();        /* Disable WDOG */SOSC_init_8MHz();      /* Initialize system oscilator for 8 MHz xtal */SPLL_init_160MHz();    /* Initialize SPLL to 160 MHz with 8 MHz SOSC */NormalRUNmode_80MHz(); /* Init clocks: 80 MHz sysclk & core, 40 MHz bus, 20 MHz flash */adc_pdb_trigger();while(1){}return 0;
}

此篇是软件触发->pdb触发->pdb触发in back-to-back mode->TRGMUX触发->LPIT触发

S32K144(14)ADC相关推荐

  1. HI3861学习笔记(14)——ADC接口使用

    一.简介 1.1 ADC ADC(Analog-to-Digital Converter),即模拟-数字转换器,可以将连续变化的模拟信号转换为离散的数字信号,进而使用数字电路进行处理,称之为数字信号处 ...

  2. STM32入门指南(5)—ADC的使用

    STM32入门指南(5)-ADC的使用 文章目录 STM32入门指南(5)-ADC的使用 前言 ADC简要介绍 ADC主要特性 ADC通道映射 ADC数据对齐 ADC转换模式 ADC转换时间 ADC配 ...

  3. getvalue函数怎么使用_Java中的构造函数——通过示例学习Java编程(14)

    作者:CHAITANYA SINGH 来源:通过示例学习Java编程(14):Java中的构造函数-方家话题 构造函数是用来初始化新创建的对象的代码块.构造函数类似于java中的实例方法(Instan ...

  4. C# 学习笔记(14)自己的串口助手----多行发送

    C# 学习笔记(14)自己的串口助手----多行发送 在上一篇串口助手的基础上实现多行发送功能.多行发送使用了DataGridView控件实现,打算是可以自由添加行数,但是有一个问题,DataGrid ...

  5. 深度学习(14)TensorFlow高阶操作三: 张量排序

    深度学习(14)TensorFlow高阶操作三: 张量排序 一. Sort, argsort 1. 一维Tensor 2. 多维Tensor 二. Top_k 三. Top-k accuracy(To ...

  6. 其实python面向对象3分钟就可以入门(14)

    本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题.此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课程也将 ...

  7. 《看聊天记录都学不会C语言?太菜了吧》(14)这么神奇?我写了20行代码竟然一行就可以搞定?

    好消息2020年4月13日晚7.30我在CSDN开播,等你来聊天 预约连接:https://live.csdn.net/room/A757291228/MJWK0Gem 本系列文章将会以通俗易懂的对话 ...

  8. 解读ASP.NET 5 MVC6系列(14):View Component

    原文:解读ASP.NET 5 & MVC6系列(14):View Component 在之前的MVC中,我们经常需要类似一种小部件的功能,通常我们都是使用Partial View来实现,因为M ...

  9. python科赫曲线绘制正方形_Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图...

    目录 Python数据处理从零开始----第四章(可视化)①③多变量绘图 Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图 seaborn.heatmapHeat ...

最新文章

  1. 暖通专业标准规范大全_中高级职称专业分类改革 机械类十大热门专业分享
  2. linux 编程博客,Linux系统编程博客参考
  3. 【VB.NET】自定义控件(一)属性说明
  4. js复制隐藏域中的文字
  5. 使用js获取ajax对象,JS获取dom 对象 ajax操作 读写cookie函数
  6. Dynamic Set Up the Web Reference Url To WebService
  7. APNS(Apple Push Notification Service)远程推送原理解析
  8. win7蓝屏报错:STOP:0x0000007E
  9. 软件工程——背单词软件对比
  10. GEE与Landsat
  11. hadoop-bigdata-v2.2 版本shell脚本一键部署 master、slaver1、slaver2三个节点源代码.
  12. 阿里云国际站代充值个人注册与分销商邀约区别
  13. xcode引入sdk_解决Xcode引入第三方SDK找不到头文件
  14. 算法竞赛---day1(等差素数列)
  15. C语言详解系列——函数的认识(4)函数的声明与定义,简单练习题
  16. macbook自带python保存文件夹_在mac下查找python包存放路径site-packages的实现方法 在Mac系统下python如何安装第三方函数库?...
  17. 微信小游戏客户端开发环境搭建
  18. react调试工具与调试方法
  19. 拾忆Elasticsearch04:Elasticsearch实操
  20. 网络电话服务器安全认证管理系统,CA 数字证书认证系统建设解决方案

热门文章

  1. 转载:程苓峰:跨国B2C,围猎阿里
  2. Linux的hwclock命令笔记221110
  3. python中文版下载安装教程,python最新版本安装教程
  4. C++用两个队列实现栈
  5. 《因为一份赤城的热爱》,庄忻恬、苏洋、陈璐、姜楠和陈嘉华共演
  6. HTTP和FTP的区别
  7. EFCore中的主键
  8. canvas-js实现flyBird游戏
  9. 创建oracle的tablespace
  10. Node.JS调用企业微信API:生成渠道二维码