ADC_GetConversionValue(ADC1); 一定要放在while中,只有这样,采集的ADC电压值才是实时采集的电压值。放在while外面,则采集的电压值为第一次的电压值,且读取的电压值不会变化。对于4096的值来源在于ADC采集的数值是12位ADC,即是2的12次方。 2、中断查询ADC程序 对于中断查询采集ADC程序主要是在ADC.C和main函数中有...
ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_480CYCLES; ADC1_ChanConf.Offset=0; HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf); HAL_ADC_Start_IT(&ADC1_Handler); //必须以中断方式开启 HAL_NVIC_SetPriority(ADC_IRQn,1,0); //中断优先级 HAL_NVIC_EnableIRQ(ADC_IRQn); //开启中断 } void...
ADC_Cmd(ADC1,ENABLE); //复位校准寄存器 ADC_ResetCalibration(ADC1); //等待校准寄存器复位完成 while(ADC_GetResetCalibrationStatus(ADC1)); //ADC校准 ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); //由于没有使用外部触发,所以使用软件触发ADC转换 ADC_SoftwareStartConvCmd(ADC1,...
初始化阶段,开启DMA传输: 传输完成之后产生一个中断: 这时候看数组里面的值: 4、连续转换+DMA+定时器+手动启动 方法4是在方法3的基础上稍微做了一些调整,主要面向的需求是:固定时间间隔的AD采样。比如说,每隔0.1秒,需要连续采样100次。 通常的做法是,使用定时器做一个定时中断,在定时中断里,调用函数: HAL_ADC...
4)定时器触发ADC采样 顾名思义,就是由定时器设定时间,到点就启动ADC采样,这样可以精确控制采样率。 首先设置定时器的计时参数,这里设置为1s(可以不开启定时器中断): ADC的设置中,要关闭连续转换模式,并且设置为定时器触发: 这里如果连续转换不关闭,会自动连续运行,不受定时器触发的控制。所以要disable。
其次建立一个ADC.C和一个ADC.H文件,其中ADC.C中程序为: void ADC1_Init(void) { ADC1_GPIO_Config(); ADC1_Mode_Config(); } static void ADC1_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; //开启外部时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | ...
//转换由软件而 ADC_ExternalTrigConvCmd(ADC1, ENABLE); //使能ADC经外部触发启动转换功能 不知道你是想软件触发还是外部事件触发 ADC_SoftwareStartConvCmd(ADC1, ENABLE);将外部触发使能改成软件触发再测试下。
TCONV = 采样时间 + 12.5个ADC周期,采样时间=n个ADC周期,ADC采用频率最大是14MHZ,由于ADC挂载总线的频率是72MHZ所以进行6分频,采用周期是12MHZ。 ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在...
触发ADC采样完256个样本后产生DMA中断,在中断里置位标志。如何暂停ADC和DMA继续动作,处理玩后又如何...