S32K144(14)ADC
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为例来指定触发方案。
- 设置SIM_ADCOPT [ADCxTRGSEL] = 0。
- 选择PDB0通道0作为ADC触发源。
- PDB0预触发器将直接连接到ADC0 ADHWTS端口来控制通道。
- ADC0 COCO信号被直接反馈回PDB0去激活PDB锁定状态。
下图说明了使用PDB触发ADC的典型案例:
1.2、LPIT触发ADC步骤:
LPIT最多支持4个通道,每个通道都有一个触发器和一个预触发器。
- 设置SIM_ADCOPT [ADCxTRGSEL] = 1。选择TRGMUX out作为ADC触发源。
- 配置TRGMUX以选择LPIT触发器作为ADC触发器和预触发器源。TRGMUX只支持每个ADC最多4个预触发器(pre-trigger0-pretrigger3;其他预触发器不能与TRGMUX一起使用)。
- ADC COCO在这种情况下是不需要的。软件必须适应每个ADC转换之间的间隔时间。
- 使用TRGMUX允许使用一个LPIT来同时触发两个adc。这是使用TRGMUX触发代替PDB触发的好处之一。
请注意对于除PDB和LPIT之外的触发器源,需要软件提供ADC预触发器。
1.3、被触发后的选择
可以选择触发启用和触发的任意组合;它们是相互独立的。但是在它被选中之后,就不能动态地更改它了。
定义了更改触发器和启用源(触发器和预触发器源)的步骤。改变触发源可以通过以下两种方法中的任何一种随时完成。
1.3.1、方法1
- 停止当前触发产生单元。
- 等待一个时间周期等于ADC工作时钟的2.5个周期和ADC主机接口时钟的1.5个周期,给锁存最后一个触发器的时间,如果有的话
- 轮询所有0的ADC_SC2[TRGSTLAT]的状态,它将在完成所有查询到那时为止的转换后变为0
- 更改所需源的选择,然后
- 启动新的触发单位
1.3.2、方法2需要立即切换
- 停止当前触发产生单元
- 通过设置ADC_CFG1[CLRLTRG]刷新触发器处理程序块的所有排队触发器,这将刷新除ADC正在处理的触发器(如果有的话)之外的所有排队触发器
- 等待一个时间周期等于ADC工作时钟的总2.5个周期
- 等待ADC_SC2[TRGSTLAT]的状态变为全0
- 更改所需源的选择,然后启动新的触发单位
请注意如果不遵循上述限制,则可能不会报告此流程错过的触发器
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相关推荐
- HI3861学习笔记(14)——ADC接口使用
一.简介 1.1 ADC ADC(Analog-to-Digital Converter),即模拟-数字转换器,可以将连续变化的模拟信号转换为离散的数字信号,进而使用数字电路进行处理,称之为数字信号处 ...
- STM32入门指南(5)—ADC的使用
STM32入门指南(5)-ADC的使用 文章目录 STM32入门指南(5)-ADC的使用 前言 ADC简要介绍 ADC主要特性 ADC通道映射 ADC数据对齐 ADC转换模式 ADC转换时间 ADC配 ...
- getvalue函数怎么使用_Java中的构造函数——通过示例学习Java编程(14)
作者:CHAITANYA SINGH 来源:通过示例学习Java编程(14):Java中的构造函数-方家话题 构造函数是用来初始化新创建的对象的代码块.构造函数类似于java中的实例方法(Instan ...
- C# 学习笔记(14)自己的串口助手----多行发送
C# 学习笔记(14)自己的串口助手----多行发送 在上一篇串口助手的基础上实现多行发送功能.多行发送使用了DataGridView控件实现,打算是可以自由添加行数,但是有一个问题,DataGrid ...
- 深度学习(14)TensorFlow高阶操作三: 张量排序
深度学习(14)TensorFlow高阶操作三: 张量排序 一. Sort, argsort 1. 一维Tensor 2. 多维Tensor 二. Top_k 三. Top-k accuracy(To ...
- 其实python面向对象3分钟就可以入门(14)
本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题.此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课程也将 ...
- 《看聊天记录都学不会C语言?太菜了吧》(14)这么神奇?我写了20行代码竟然一行就可以搞定?
好消息2020年4月13日晚7.30我在CSDN开播,等你来聊天 预约连接:https://live.csdn.net/room/A757291228/MJWK0Gem 本系列文章将会以通俗易懂的对话 ...
- 解读ASP.NET 5 MVC6系列(14):View Component
原文:解读ASP.NET 5 & MVC6系列(14):View Component 在之前的MVC中,我们经常需要类似一种小部件的功能,通常我们都是使用Partial View来实现,因为M ...
- python科赫曲线绘制正方形_Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图...
目录 Python数据处理从零开始----第四章(可视化)①③多变量绘图 Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图 seaborn.heatmapHeat ...
最新文章
- 暖通专业标准规范大全_中高级职称专业分类改革 机械类十大热门专业分享
- linux 编程博客,Linux系统编程博客参考
- 【VB.NET】自定义控件(一)属性说明
- js复制隐藏域中的文字
- 使用js获取ajax对象,JS获取dom 对象 ajax操作 读写cookie函数
- Dynamic Set Up the Web Reference Url To WebService
- APNS(Apple Push Notification Service)远程推送原理解析
- win7蓝屏报错:STOP:0x0000007E
- 软件工程——背单词软件对比
- GEE与Landsat
- hadoop-bigdata-v2.2 版本shell脚本一键部署 master、slaver1、slaver2三个节点源代码.
- 阿里云国际站代充值个人注册与分销商邀约区别
- xcode引入sdk_解决Xcode引入第三方SDK找不到头文件
- 算法竞赛---day1(等差素数列)
- C语言详解系列——函数的认识(4)函数的声明与定义,简单练习题
- macbook自带python保存文件夹_在mac下查找python包存放路径site-packages的实现方法 在Mac系统下python如何安装第三方函数库?...
- 微信小游戏客户端开发环境搭建
- react调试工具与调试方法
- 拾忆Elasticsearch04:Elasticsearch实操
- 网络电话服务器安全认证管理系统,CA 数字证书认证系统建设解决方案