网站建设常用单词,网站建设最新,淘宝网页设计招聘,WordPress插件引入因系统要求需升级ADC的采样方式(以前方式#xff1a;扫描方式#xff0c;TIMER2触发ADC软启动#xff0c;2通道规则序列#xff0c;DMA传完中断)#xff0c;为了进一步实现两路信号的同步性能#xff0c;采样STM32 双ADC同步规则转换。(timer2触发ADC软启动#xff0c;2…因系统要求需升级ADC的采样方式(以前方式扫描方式TIMER2触发ADC软启动2通道规则序列DMA传完中断)为了进一步实现两路信号的同步性能采样STM32 双ADC同步规则转换。(timer2触发ADC软启动2个单通道规则序列DMA完成中断)问题1只能看到ADC1通道的数据。ADC2通道的数据貌似在ADC1_DR中的高16位中无法看到。//初始化DMA_ADCvoid ADCWithDMAInit(void){//DMA init; Using DMA channel 1DMA_InitTypeDef DMA_InitStructure;/* 允许 DMA1 */RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);/* DMA1 channel1 configuration ----------------------------------------------*/DMA_DeInit(DMA1_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr ADC1_DR_Address;DMA_InitStructure.DMA_MemoryBaseAddr (uint32_t)VOLT_SIGNAL;DMA_InitStructure.DMA_DIR DMA_DIR_PeripheralSRC;DMA_InitStructure.DMA_BufferSize 1;DMA_InitStructure.DMA_PeripheralInc DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc DMA_MemoryInc_Enable;DMA_InitStructure.DMA_PeripheralDataSize DMA_PeripheralDataSize_Word;// 全字节DMA_InitStructure.DMA_MemoryDataSize DMA_MemoryDataSize_Word; // 全字节DMA_InitStructure.DMA_Mode DMA_Mode_Circular;DMA_InitStructure.DMA_Priority DMA_Priority_High;DMA_InitStructure.DMA_M2M DMA_M2M_Disable;DMA_Init(DMA1_Channel1, DMA_InitStructure);/* Enable DMA1 channel1 *///DMA_Cmd(DMA1_Channel1, ENABLE);DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE); //DMA1传输完成中断DMA_Cmd(DMA1_Channel1, ENABLE); //正式允许DMA}void ADC_Config(void){ADC_InitTypeDef ADC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;// TIM_OCInitTypeDef TIM_OCInitStructure;// DMA_InitTypeDef DMA_InitStructure;ADCWithDMAInit();//DMA 中断设置NVIC_InitStructure.NVIC_IRQChannelDMA1_Channel1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority0;NVIC_InitStructure.NVIC_IRQChannelSubPriority0;NVIC_InitStructure.NVIC_IRQChannelCmdENABLE;NVIC_Init(NVIC_InitStructure);/*******************TIM**************/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE); //GPIOAC时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //timer2时钟TIM_TimeBaseStructure.TIM_Period 7031; //1.408khzTIM_TimeBaseStructure.TIM_Prescaler 9;TIM_TimeBaseStructure.TIM_ClockDivision 0x0;TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up;//TIM_TimeBaseStructure.TIM_RepetitionCounter 0;TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure);/* Enable the TIM2 global Interrupt */NVIC_InitStructure.NVIC_IRQChannel TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 6;NVIC_InitStructure.NVIC_IRQChannelSubPriority 6;NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE;NVIC_Init(NVIC_InitStructure);//使能Time2 更新中断。即溢出中断//TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);/* Configure and enable ADC interrupt *///NVIC_InitStructure.NVIC_IRQChannel ADC1_2_IRQn;//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 0;//NVIC_InitStructure.NVIC_IRQChannelSubPriority 0;//NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE;//NVIC_Init(NVIC_InitStructure);/*******************ADC**************/RCC_ADCCLKConfig(RCC_CFGR_ADCPRE_DIV6);//ADC时钟PLCK2的6分频 12M。ADC最大时钟不能超过14M!RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_ADC2, ENABLE);//A口有1个通道GPIO_InitStructure.GPIO_Pin GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStructure);ADC_InitStructure.ADC_Mode ADC_Mode_RegSimult; //ADC1工作在独立模式 同步规则模式ADC_InitStructure.ADC_ScanConvMode DISABLE; //使能模数转换工作在扫描模式(多通道)ADC_InitStructure.ADC_ContinuousConvMode 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_InitStructure中指定的参数初始化外设ADC1的寄存?//ADC_Init(ADC2, ADC_InitStructure);/* Enable ADC1 EOC interrupt *///ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);//设置指定ADC的规则组通道设置它们的转化顺序和采样时间(取最大值)//增加通道到规则队列中ADC_RegularChannelConfig(ADC1, ADC_Channel_1 , 1, ADC_SampleTime_239Cycles5); //PA1//C口有1个通道GPIO_InitStructure.GPIO_Pin GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOC,GPIO_InitStructure);ADC_InitStructure.ADC_Mode ADC_Mode_RegSimult; //ADC1工作在独立模式 同步规则模式ADC_InitStructure.ADC_ScanConvMode DISABLE; //使能模数转换工作在扫描模式(多通道)ADC_InitStructure.ADC_ContinuousConvMode DISABLE; //模数转换工作在正常模式ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; //软启动触发启动ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; //ADC数据右对齐ADC_InitStructure.ADC_NbrOfChannel 1; //顺序进行规则转换的ADC通道的数目\ADC_Init(ADC2, ADC_InitStructure); //根据ADC_InitStructure中指定的参数初始化外设ADC1的寄存?ADC_RegularChannelConfig(ADC2, ADC_Channel_12 , 1, ADC_SampleTime_239Cycles5);//PC2/* Enable ADC2 external trigger conversion */ADC_ExternalTrigConvCmd(ADC2, ENABLE);/* Enable ADC1 DMA*/ADC_DMACmd(ADC1, ENABLE);/* Enable ADC1 external trigger *///ADC_ExternalTrigConvCmd(ADC1, ENABLE);/* Enable ADC1 */ADC_Cmd(ADC1, ENABLE);/* Enable ADC2 */ADC_Cmd(ADC2, ENABLE);/* Enable ADC1 reset calibaration register */ADC_ResetCalibration(ADC1);/* Check the end of ADC1 reset calibration register */while(ADC_GetResetCalibrationStatus(ADC1));/* Start ADC1 calibaration */ADC_StartCalibration(ADC1);/* Check the end of ADC1 calibration */while(ADC_GetCalibrationStatus(ADC1));/* TIM1 counter enable */TIM_Cmd(TIM2, ENABLE);/* TIM1 main Output Enable *///TIM_CtrlPWMOutputs(TIM2, ENABLE);//for()}