因系统要求需升级ADC的采样方式(以前方式:扫描方式,TIMER2触发ADC软启动,2通道规则序列,DMA传完中断),为了进一步实现两路信号的同步性能,采样STM32 双ADC同步规则转换。(timer2触发ADC软启动,2个单通道规则序列,DMA完成中断)

问题:

1:只能看到ADC1通道的数据。ADC2通道的数据貌似在ADC1_DR中的高16位中无法看到。

============================

//初始化DMA_ADC

void ADCWithDMAInit(void)

{

//DMA init;  Using DMA channel 1

DMA_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_IRQChannel=DMA1_Channel1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

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.408khz

TIM_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()

}

双极型adc与stm32_关于STM32 双ADC同步规则转换两路数据的问题?相关推荐

  1. STM32理论 —— ADC、存储、定时器、时钟、中断

    文章目录 1. ADC 1.1 ADC相关寄存器 1.1.1 ADC 控制寄存器1(ADC_CR1) 1.1.2 ADC 控制寄存器2(ADC_CR2) 1.1.3 ADC 采样时间寄存器(ADC_S ...

  2. STM32多通道ADC采样获取MCP9701模拟温度传感器温度输出数据

    STM32多通道ADC采样获取MCP9701模拟温度传感器温度输出数据 市面上常见的模拟温度传感器有TI的LM35系列,然后使用中并不简便.MCP9701是Microchip公司推出的相似的模拟温度传 ...

  3. 使用HAL库开发STM32:ADC基础使用

    文章目录 目的 基础说明 基础使用 配置选项说明 轮询 单通道 单次 轮询 单通道 连续 轮询 多通道 扫描 中断 单通道 中断 多通道 扫描 DMA 单通道 单轮 DMA 单通道 连续 DMA 多通 ...

  4. stm32双adc电压采集

    ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;    //ADC工做模式:ADC同步规则组模式 ADC_DMACmd(ADC1, ENABLE);  ...

  5. STM32F4系列探究1——三重ADC扫描连续采样+DMA双缓冲区存储

    文章目录 前言 一.STM32F4的ADC理论知识学习 1.基础知识 2.扫描模式与连续模式 3.单ADC模式下双缓存机制的实现 4.三重同步采样模式 二.由定时器触发的单缓冲区模式 1.时钟树配置 ...

  6. STM32双轴摇杆控制空心杯电机

    STM32双轴摇杆控制空心杯电机 双轴摇杆传感器   PS2双轴按键游戏摇杆模块采用PS2游戏手柄上金属按键摇杆电位器.模块特设二路模拟输出和一路数字输出接口.输出值分别对应(×.Y双轴偏移量.其类型 ...

  7. 双极型三极管共集电极、共基极放大电路

    双极型三极管共集电极.共基极放大电路 本文介绍的定义 共集电极放大电路 共基极放大电路 本文介绍的定义 双极型三极管放大电路的接法.共集电极放大电路.射极跟随器.带负载能力.共基极放大电路.改善频率响 ...

  8. HAL库版STM32双轮自平衡车(三) ———代码精讲

    系列文章目录 编码电机测速 HAL库OLED的使用 HAL库版STM32双轮自平衡车(一) ---代码思路和PID基础精讲 HAL库版STM32双轮自平衡车(二) --- CubeMX的配置.原理图接 ...

  9. HAL库版STM32双轮自平衡车(一) ———代码思路和PID基础精讲

    系列文章目录 HAL库版STM32双轮自平衡车(一) ---代码思路和PID的简单介绍(本篇) HAL库版STM32双轮自平衡车(二) --- CubeMX的配置.原理图接线.物料准备 HAL库版ST ...

最新文章

  1. ceph bluestore源码分析:admin_socket实时获取内存池数据
  2. 基于Grafana的监控数据钻取功能应用实践
  3. V4L2学习 二 ----视频打开与保存简单流程
  4. Java里try catch的简单用法
  5. jq 自动滑动轮换(向后插入小块)
  6. intel A20地址线
  7. php array_reduce 降维,使用array_reduce降维
  8. 【物理/数学】概念的理解 —— pivot、position
  9. Vim编辑器显示行号且定义tab键为4个空格
  10. unix操作系统图标大全
  11. amazon linux ami root 密码,Amazon Linux AMI 常见问题
  12. 编译器设计(二)——上下文无关文法及推导
  13. MacBook Pro 上网很慢
  14. 关于DSP的SCI通信学习
  15. 设计师悲剧:你一天内要完成100张海报
  16. 暗黑如何修改服务器爆率,暗黑破坏神百倍爆率补丁
  17. 生活污水处理厂工程脱水车间设计、果汁饮料厂工艺流程及车间平面布置CAD设计、水处理车间工艺图、氯乙烯分离车间平面布置图、乳品车间设备布置图、核桃乳饮料厂工艺流程及车间平面布置CAD设计……
  18. “no source“: Error: command-line: #564: cannot open embedded assembler outpu
  19. 自定义变量的一个有趣案例
  20. MySQL基础教程---创建、查询、备份数据库

热门文章

  1. 解决Button自动刷新页面的问题
  2. GoJs Pictures 官方介绍文档
  3. mysql 主主复制的配置流程
  4. Unity 新手入门 如何理解协程 IEnumerator yield
  5. 面向对象之三大特性:继承,封装,多态
  6. Direct ByteBuffer学习
  7. 【vscode】编译java时报错乱码
  8. node --- 使用express.Router与body-parser
  9. css --- 让不同的浏览器加载不同的CSS
  10. Node --- Basic认证