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

因系统要求需升级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()

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试金典--11.5

题目描述:给定排序后的字符串数组,中间有一些空串,要求找到给定字符串的位置 思路: (1)遍历,最慢的 (2)二分查找,当mid处为空串,就找到最近的非空…

win10 平台VS2019最简安装实现C++/C开发

这两天一直在安装vs2015,总是卡在visual studio 2015 出现安装包丢失或损坏的现象,尽管按照网上很多方法尝试解决,但是一直不行。算了。还是使用最新版的VS 2019安装,没想到很顺利。 下面总结一下在win10平台上最简安装VS2019,实…

Hook的两个小插曲

看完了前面三篇文章后,这里我们来一个小插曲~~~~ 第一个小插曲。是前面文章一个CM精灵的分析。我们这里使用hook代码来搞定。 第二个小插曲,是如今一些游戏,都有了支付上限,比如每天仅仅能花20块钱来购买。好了。以下我们分开叙述…

### C++总结-[类成员函数]

C类中的常见函数。 #author: gr #date: 2015-07-23 #email: forgeruigmail.com 一、constructor, copy constructor, copy assignment, destructor 1. copy constructor必须传引用,传值编译器会报错 2. operator 返回值为引用,为了…

微信小程序和vue双向绑定哪里不一样_个人理解Vue和React区别

本文转载自掘金,作者:binbinsilk,监听数据变化的实现原理不同Vue 通过 getter/setter 以及一些函数的劫持,能精确知道数据变化,不需要特别的优化就能达到很好的性能React 默认是通过比较引用的方式进行的,如…

JS 省,市,区

1 // 纯JS省市区三级联动2 // 2011-11-30 by http://www.cnblogs.com/zjfree3 var addressInit function (_cmbProvince, _cmbCity, _cmbArea, defaultProvince, defaultCity, defaultArea) {4 var cmbProvince document.getElementById(_cmbProvince);5 var cmbCity…

使用极链/AutoDL云服务器复盘caffe安装

继上一次倒腾caffe安装以后,因为博士毕业等原因,旧的服务器已经不能再使用,最近因论文等原因,不得不继续来安装一下我的caffe。这次运气比较好,经历了一晚上和一早上的痛苦之后,最终安装成功了,…

ibatis中使用List作为传入参数的使用方法及 CDATA使用

ibatis中list做回参很简单,resultClass设为list中元素类型,dao层调用: (List)getSqlMapClientTemplate().queryForList("sqlName", paraName); 并经类型转换即可,做入参还需要稍微调整下,本文主要讲list做入参碰到的几…

Samba服务

####################samba####################1.samba作用提供cifs协议实现共享文件2.安装yum install samba samba-common samba-client -ysystemctl start smb nmbsystemctl enable smb nmb3.添加smb用户smb用户必须是本机用户[rootlocalhost ~]# smbpasswd -a student New…

wpf 窗口的返回值_WPF Tips: Window.ShowDialog() 返回 true

Window.ShowDialog() 返回值为bool?。希望在窗口点击OK时返回True。解决方法:ShowDialog()的注释为:// Returns:// A System.Nullable value of type System.Boolean that specifies whether// the activity was accepted (true) or canceled (false). …

CodeForces 543D 树形DP Road Improvement

题意: 有一颗树,每条边是好边或者是坏边,对于一个节点为x,如果任意一个点到x的路径上的坏边不超过1条,那么这样的方案是合法的,求所有合法的方案数。 对于n个所有可能的x,输出n个答案。 分析&am…

理解Javascritp中的引用

Author: bugall Wechat: bugallF Email: 769088641qq.com Github: https://github.com/bugall一: 函数中的引用传递 我们看下下面的代码的正确输出是什么 function changeStuff(a, b, c) {a a * 10;b.item "changed";c {item: "changed"}; …

通过扩展改善ASP.NET MVC的验证机制[实现篇]

通过扩展改善ASP.NET MVC的验证机制[实现篇] 原文:通过扩展改善ASP.NET MVC的验证机制[实现篇]在《使用篇》中我们谈到扩展的验证编程方式,并且演示了本解决方案的三大特性:消息提供机制的分离、多语言的支持和多验证规则的支持,我们现在来看…

canopen和1939区别_CAN 和 CANopen的区别和联系

1、CAN与CANopen的共同点与不同点:CAN只定义了物理层与链路层,而没有定义用户层,用户可根据自己的需要定义一些网络上的通信约定; CANopen是在CAN的基础上定义了用户层,即规定了用户、软件、网络终端等之间用来进行信…

ONOS系统架构演进,实现高可用性解决方案

上一篇文章《ONOS高可用性和可扩展性实现初探》讲到了ONOS系统架构在高可用、可扩展方面技术概况,提到了系统在分布式集群中怎样保证数据的一致性。在数据终于一致性方面,ONOS採用了Gossip协议。这一部分的变化不大,而在强一致性方案的选择方…

Struts2_day01

Java Web开发常用框架 SSH(Struts2 Spring Hibernate)SSM(Struts2 Spring MyBatis)SSI(Struts2 Spring iBatis) 多种框架协同工作 Web层 -- Service层 -- Dao层 Struts2框架: Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MV…

使用 python 开发 Web Service

使用 python 开发 Web Service Python 是一种强大的面向对象脚本语言,用 python 开发应用程序往往十分快捷,非常适用于开发时间要求苛刻的原型产品。使用 python 开发 web service 同样有语言本身的简捷高速的特点,能使您快速地提供新的网络服…

python中输出n开始的5个奇数_送你99道Python经典练习题,练完直接上手做项目,免费送了来拿吧...

学python没练习题怎么行、今天,给大家准备一个项目: 99道编程练习,这些题如果能坚持每天至少完成一道,一定可以帮大家轻松 get Python 的编程技能。目前,这个项目已经获得了 2924 Stars,2468 Forks。首先&a…

java 基础5

一、 什么是数组及其作用? 定义:具有相同数据类型的一个集合 作用:存储连续的具有相同类型的数据 二、 java中如何声明和定义数组 2.1 声明和定义的语法: 数据类型[ ] 数组名;( int[ ] nums ; ) 或 数…

TFS(Team Foundation Server)介绍和入门

在本文的两个部分中,我将介绍Team Foundation Server的一些核心特征,重点介绍在本产品的日常应用中是怎样将这些特性结合在一起使用的。 作为一名软件开发者,在我的职业生涯中,我常常会用到支持软件开发过程的大量开发工具&#x…