* Adc.c * Created on: 2025年9月12日 */
#define length 1 void adc_Init(void)//滤波 每个通道4.31微秒 整体约为25.86微秒 GPIO_InitTypeDef GPIO_InitStructure={0}; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_ADC1 , ENABLE ); //使能GPIOA时钟和ADC GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // GPIO_Init(GPIOB, &GPIO_InitStructure);
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //多通道模式下开启扫描模式 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //设置转换不是由外部触发启动,软件触发启动 ADC_InitStructure.ADC_NbrOfChannel = length; //规则转换的ADC通道的数目 ADC_Cmd(ADC1, ENABLE); //使能ADC1
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束
while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束 //ADC DMA模式配置 { RCC_AHBPeriphClockCmd( RCC_AHBPeriph_DMA1, ENABLE ); //使能开启DMA时钟
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->RDATAR; //配置外设地址为ADC数据寄存器地址 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //配置数据源为外设,即DMA传输方式为外设到存储器 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//设置DMA外设递增模式关闭 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //设置外设数据大小为半字,即两个字节 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //设置DMA模式为循环传输模式 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //因为此DMA传输方式为外设到存储器,因此禁用存储器到存储器传输方式 DMA_Cmd(DMA1_Channel1 , ENABLE); //使能DMA void ADC_DMA_CONF(void) adc_Init();
// 配置 ADC 通道转换顺序为1,第一个转换,采样时间为55.5个时钟周期 // 使能ADC DMA 请求 // 由于没有采用外部触发,所以使用软件触发ADC转换 } 之前用这个代码的时候测量的有好几个adc通道 能够刷新 这次只用了一个PB0通道 值感觉只有第一次上电时采集的那一个 我循环一秒打印一次值不变 重新上电后重新开始变一次 后面还是一样
|