ADC学习总结

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

ADC介绍12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。ADC转换时间的计算ADC时钟频率越高,转换速度也就越快,但ADC时钟有上限值,不能超过14MHzADC使用若干个ADC_CLK周期对输入电压采样,采样周期数目可以通过ADC_SMPR1和ADC_SMPR2寄存器中的SMP[2:0]位更改。每个通道可以分别用不同的时间采样。总转换时间如下计算:把PCLK2配置为56MHz时,最短采样时间为1us把PCLK2配置为72MHz时,最短采样时间为1.17us因为ADC时钟上线不能超过14MHz,72MHz时最小分频要6分频,此时ADC时钟频率为12MHz,而最小采样时间为1.5TCONV=1.5+12.5=14周期T=14*1/12MHz=1.17usADC的GPIO的配置GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;GPIO_Init(GPIOC,&GPIO_InitStructure);ADC的配置ADC_InitTypeDefADC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//ADC1和ADC2工作在独立模式ADC_InitStructure.ADC_ScanConvMode=DISABLE;//规定了模数转换工作在扫描模式(多通道)模式ADC_ScanConvMode规定了模数转换工作在扫描模式(多通道)还是单次(单通道)模式。可以设置这个参数为ENABLE或者DISABLE。ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//规定了模数转换工作在连续模式ADC_ContinuousConvMode规定了模数转换工作在连续还是单次模式。可以设置这个参数为ENABLE或者DISABLE。ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//转换由软件而不是外部触发启动ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//ADC数据右对齐ADC_InitStructure.ADC_NbrOfChannel=1;//规定了顺序进行规则转换的ADC通道的数目ADC_Init(ADC1,&ADC_InitStructure);ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_55Cycles5);//设置指定ADC的规则组通道,设置它们的转化顺序和采样时间若是多个通道转换着需要配置不同通道转换的顺序例如:ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADC1,ADC_Channel_11,2,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADC1,ADC_Channel_12,3,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADC1,ADC_Channel_13,4,ADC_SampleTime_55Cycles5);ADC_DMACmd(ADC1,ENABLE);//使能或者失能指定的ADC的DMA请求ADC_Cmd(ADC1,ENABLE);//使能ADC1在开始ADC转换之前,需要启动ADC的自校准。ADC有一个内置自校准模式,校准可大幅减小因内部电容器组的变化而造成的准精度误差。在校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差。ADC_ResetCalibration(ADC1);//重置指定的ADC的校准寄存器while(ADC_GetResetCalibrationStatus(ADC1));//获取ADC重置校准寄存器的状态ADC_StartCalibration(ADC1);//开始指定ADC的校准状态while(ADC_GetCalibrationStatus(ADC1));//获取ADC重置校准寄存器的状态ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能或者失能指定的ADC的软件转换启动功能DMA的配置DMA_InitTypeDefDMA_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);DMA_DeInit(DMA1_Channel1);//将DMA的通道x寄存器重设为缺省值DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;//该参数用以定义DMA外设基地址ADC1为0x4001244C//0x4001244C寄存器边界地址0X40012400+ADC规则数据寄存器偏移地址4CHDMA_InitStructure.DMA_MemoryBaseAddr=(u32)&ADC_ConvertedValue;//该参数用以定义DMA内存基地址DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;//外设作为数据传输的来源DMA_InitStructure.DMA_BufferSize=1;//用以定义指定DMA通道的DMA缓存的大小,单位为数据单位。根据传输方向,//数据单位等于结构中参数DMA_PeripheralDataSize或者参数DMA_MemoryDataSize的值。DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外设地址寄存器不变DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Disable;//内存地址寄存器不变DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;//数据宽度为16位DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;//数据宽度为16位DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;//工作在循环缓存模式//注意:当指定DMA通道数据传输配置为内存到内存时,不能使用循环缓存模式。DMA_InitStructure.DMA_Priority=DMA_Priority_High;//DMA通道1拥有非常高优先级DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;//DMA通道1没有设置为内存到内存传输DMA_Init(DMA1_Channel1,&DMA_InitStructure);DMA_Cmd(DMA1_Channel1,ENABLE);

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功