stm32f4 adc dma07的ADC真的不够精准吗

画了个STM32F407
100脚的最小系统板,求指导_altiumdesigner吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:9,349贴子:
画了个STM32F407
100脚的最小系统板,求指导
原理图PCB预览PCB顶层PCB底层3D试图正面3D视图背面
报考一级消防师要求,学尔森13年考培经验为您解答,更有百度信贷分期付学费.
这个原理设计,布局隔离,布线都已经很不错了。只是顶层为黄色,底层为绿色让我看着有点不习惯
提两个优化意见吧:1、晶振的线能走顶层能布得下最好不要走过孔,晶振外壳接地;2、覆铜的地顶面和底面多打一些过孔,按隔离来,最后模拟地和数字地还是要单点共地的。
直插晶振如何做接地,是多画一圈焊盘吗?电装要焊接外壳?如果是要外壳这样接地的话,假贴片晶振如何接地?
楼主能发下这个文件吗?想学习下。。。
楼主能发下这个文件吗?我也想学习下Q
直插晶振接到在晶振旁边在放一个焊盘就OK了,在有些系统里面晶振不接地经常出问题
一般来说晶振的两根线大体上线长要接近,靠近单片机、晶振周围最好铺地线过孔
报考二级消防师要求,学尔森13年考培经验为您解答,更有百度信贷分期付学费.
楼主能发我一份吗?f407的元件·库哪找的?
楼主,能不能分享一下?
贴吧热议榜
使用签名档&&
保存至快速回贴博客访问: 215973
博文数量: 57
博客积分: 167
博客等级: 入伍新兵
技术积分: 1157
注册时间:
一个算是正常的中国码农!
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
STM32F407_ADC查询模式配置介绍
1.ADC对应管脚介绍
|---管脚------对应ADC----||---管脚------对应ADC----|
ADC123_IN0 || & PA1
ADC123_IN1 |
ADC123_IN2 || & PA3
ADC123_IN3 |
ADC12_IN4 &|| & PA5
ADC12_IN5 &|
ADC12_IN6 &|| & PA7
ADC12_IN7 &|
ADC12_IN8 &|| & PB1
ADC12_IN9 &|
ADC12_IN14 || & PC5
ADC12_IN15 |
ADC123_IN10|| & PC1
ADC123_IN11|
ADC123_IN12|| & PC3
ADC123_IN13|
ADC3_IN9 & || & PF4
ADC3_IN14 &|
ADC3_IN15 &|| & PF6
ADC3_IN4 & |
ADC3_IN5 & || & PF8
ADC3_IN6 & |
ADC3_IN7 & || & PF10 ADC3_IN8 & |
2.配置查询模式如下
void ADC_Configuration(void)
GPIO_InitTypeDef GPIO_InitS
ADC_InitTypeDef &ADC_InitS
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
//初始化GPIOA的Pin_0为模拟量输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_DeInit();
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; &
//精度为12位 & & & & &&
ADC_InitStructure.ADC_ScanConvMode = DISABLE; &
//扫描转换模式失能,单通道不用
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; &
//连续转换使能
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_N //不用外部触发,软件触发转换
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_R
//数据右对齐,低字节对齐
ADC_InitStructure.ADC_NbrOfConversion = 1; & &
//规定了顺序进行规则转换的ADC通道的数目
ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles);//ADC,通道,1转换,所选通道的采样周期
ADC_Cmd(ADC1, ENABLE); &
ADC_SoftwareStartConv(ADC1);
& &//软件启动转换
unsigned short GetADCValue(void)
return ADC_GetConversionValue(ADC1);
3.其他具体配置介绍如下
通道选择:
可以把转换组织成两组:规则组和注入组。在任意多个通道上以任意顺序进行的一系列
转换构成成组转换。例如,可以如下顺序完成转换:通道 3、通道 8、通道 2、通道 2、通道
0、通道 2、通道 2、通道 15。
规则组由多达 16 个转换组成。规则通道和它们的转换顺序在 ADC_SQRx 寄存器中选择。
规则组中转换的总数应写入 ADC_SQR1 寄存器的 L[3:0]位中。
注入组由多达 4 个转换组成。注入通道和它们的转换顺序在 ADC_JSQR 寄存器中选择。
注入组里的转换总数目应写入 ADC_JSQR 寄存器的 L[1:0]位中。?如果 ADC_SQRx 或 ADC_JSQR
寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉冲将发送到 ADC 以转换新
选择的组。
单次转换模式:
单次转换模式下,ADC 只执行一次转换。该模式既可通过设置 ADC_CR2 寄存器的 ADON
位(只适用于规则通道)启动也可通过外部触发启动(适用于规则通道或注入通道),这 时 CONT
一旦选择通道的转换完成:
如果一个规则通道被转换:
─转换数据被储存在 16 位 ADC_DR 寄存器中
─EOC(转换结束)标志被设置?─?如果设置了 EOCIE,则产生中断。
如果一个注入通道被转换:
─转换数据被储存在 16 位的 ADC_DRJ1 寄存器中
─JEOC(注入转换结束)标志被设置?─?如果设置了 JEOCIE 位,则产生中断。
然后 ADC 停止
连续转换模式:
在连续转换模式中,当前面 ADC 转换一结束马上就启动另一次转换。此模式可通过外部触
发启动或通过设置 ADC_CR2 寄存器上的 ADON 位启动,此时 CONT 位是 1。??
每个转换后:
如果一个规则通道被转换:
─?转换数据被储存在 16 位的 ADC_DR 寄存器中
─?EOC(转换结束)标志被设置
─?如果设置了 EOCIE,则产生中断。
注入通道不能被用于连续转换模式,唯一的例外是当规则通道配置为连续转换后,注入通道
配置为自动转换。
扫描模式:
此模式用来扫描一组模拟通道。
扫描模式可通过设置 ADC_CR1 寄存器的 SCAN 位来选择。一旦这个位被设置,ADC 扫描
所有被 ADC_SQRX 寄存器(对规则通道)或 ADC_JSQR(对注入通道)选中的所有通道。在每个组
的每个通道上执行单次转换。在每个转换结束时,同一组的下一个通道被自动转换。如果设
置了 CONT 位,转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道
继续转换。
如果设置了 DMA 位,在每次 EOC 后,DMA 控制器把规则组通道的转换数据传输到 SRAM
中。而注入通道转换的数据总是存储在 ADC_JDRx 寄存器中。
在以下情况中,ADC_SR 寄存器的 EOC 位将被设置:
在每个规则组序列结束后,如果 EOCS 位被清 0
在每个规则通道转换结束,如果 EOCS 位设置为 1
注入通道转换结束数据总是存放在 ADC_JDRx 寄存器中
注入通道管理:
清除 ADC_CR1 寄存器的 JAUTO 位,并且设置 SCAN 位,即可使用触发注入功能。
1.?利用外部触发或通过设置 ADC_CR2 寄存器的 ADON 位,启动一组规则通道的转换。
2.?如果在规则通道转换期间产生一外部注入触发或者 JSWSTART 位被设置,当前转换被
复位,注入通道序列被以单次扫描方式进行转换。
3.?然后,恢复上次被中断的规则组通道转换。如果在注入转换期间产生一规则事件,
注入转换不会被中断,但是规则序列将在注入序列结束后被执行。
注:?当使用触发的注入转换时,必须保证触发事件的间隔长于注入序列。例如:序列长度
为 30 个 ADC 时钟周期(即 2 个具有 3 个时钟间隔采样时间的转换),触发之间最小的间隔必
须是 31 个 ADC 时钟周期。
如果设置了 JAUTO 位,在规则组通道之后,注入组通道被自动转换。这可以用来转换
在 ADC_SQRx 和 ADC_JSQR 寄存器中设置的多至 20 个转换序列。
在此模式里,必须禁止注入通道的外部触发。
如果除 JAUTO 位外还设置了 CONT 位,规则通道至注入通道的转换序列被连续执行。
间断模式:
此模式通过设置 ADC_CR1 寄存器上的 DISCEN 位激活。它可以用来执行一个短序列的 n 次转
换(n<=8),此转换是 ADC_SQRx 寄存器所选择的转换序列的一部分。数值 n 由 ADC_CR1 寄存
器的 DISCNUM[2:0]位给出。
一个外部触发信号可以启动 ADC_SQRx 寄存器中描述的下一轮 n 次转换,直到此序列所
有的转换完成为止。总的序列长度由 ADC_SQR1 寄存器的 L[3:0]定义。
n=3,被转换的通道?=?0、1、2、3、6、7、9、10
第一次触发:转换的序列为?0、1、2
第二次触发:转换的序列为?3、6、7
第三次触发:转换的序列为?9、10,并产生 EOC 事件
第四次触发:转换的序列?0、1、2??
注:?当以间断模式转换一个规则组时,转换序列结束后不自动从头开始。?当所有子组
被转换完成,下一次触发启动第一个子组的转换。在上面的例子中,第四次触发重新转换第
一子组的通道?0、1 和 2?
此模式通过设置 ADC_CR1 寄存器的 JDISCEN 位激活。在一个外部触发事件后,该模式
按通道顺序逐个转换 ADC_JSQR 寄存器中选择的序列。?
?一个外部触发信号可以启动 ADC_JSQR 寄存器选择的下一个通道序列的转换,直到序
列中所有的转换完成为止。总的序列长度由 ADC_JSQR 寄存器的 JL[1:0]位定义。
例如:?n=1,被转换的通道?=?1、2、3
第一次触发:通道 1 被转换
第二次触发:通道 2 被转换
第三次触发:通道 3 被转换,并且产生 EOC 和 JEOC 事件
第四次触发:通道 1 被转换
作者:Flame
阅读(4758) | 评论(0) | 转发(1) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。查看: 7480|回复: 22
关于STM32的ADC稳定性的问题,请原子兄和各位朋友指导
主题帖子精华
初级会员, 积分 80, 距离下一级还需 120 积分
在线时间0 小时
我用STM32采集一个电压数据,感觉波动比较大,
修改了ADC采集为定时采集或连续采集,ADC结果的数据为DMA自动传送或程序读取到后程序自己传送,感觉效果差不多;
加了各种硬件滤波,感觉效果不是很明显。
也请教了网络上的各位朋友,有人说STM32的ADC效果不好,跳变很大;有人说STM32的ADC效果很好,波动可以做到2-3个跳变。
做了一些试验,主要是为了请教各位,看是不是我有什么地方出问题了,还是STM32的ADC就是稳定性不好。
附件中有测试数据和程序,程序是用 MDK 3.80 编译的,如果要用 MDK 4.x 编译,请复制 MDK4版本\USER 目录下的文件,覆盖到 USER 目录下
程序是网络上下载下来的,我自己写的程序结果也差不多。
本次试验的说明
1 板子用的是原子的 ALIENTEK MiniSTM32,我买了6、7块板子,都换过了,结果差不多
2 接线都是负端接 ALIENTEK MiniSTM32 的 GND,电阻分压的正端直接取 MiniSTM32 的 3.3V
3 本次试验是为了看STM32的ADC的稳定性,所以数据没有用软件滤波,
& 我用了软件滤波,波动(最大值-最小值)大概可以降到未滤波前的 10%,基本可以接受。
4 程序我自己写了一些,也换了网络上各位朋友共享的程序,感觉差不多,现在这个是
& 的 3个通道ADC+DMA+串口
5 ADC数据结果
-----------------------------------------------------------------------
(1) 第1次试验的电压是用电阻分压
电压(V) 理论值 最小 最大 平均
PC0 CH10 2.0358 2527 2519 2572
PB0 CH8 2.8600 3550 3548 3614
PB1 CH9 2.4440 3034 3043 3120
-----------------------------------------------------------------------
(2) 第2次试验的电压
CH8 CH9 电压是用电阻分压
CH10 电压是用2节新的干电池连接的
电压(V) 理论值 最小 最大 平均
PC0 CH10 3.188 3957 3917 3988
PB0 CH8 2.8600 3550 3558 3599
PB1 CH9 2.4440 3034 3034 3092 3068.25
-----------------------------------------------------------------------
11:39 上传
点击文件名下载附件
2.64 KB, 下载次数: 228
11:39 上传
点击文件名下载附件
82.88 KB, 下载次数: 467
主题帖子精华
中级会员, 积分 387, 距离下一级还需 113 积分
在线时间0 小时
是你的参考电压波动吧,我测很稳定
主题帖子精华
初级会员, 积分 80, 距离下一级还需 120 积分
在线时间0 小时
回复【2楼】:
---------------------------------
我的参考电压是先用DC-DC把12V转5V或直接从电脑的USB取5v,而后通过&1117&转&3.3V&,电压波动应该不大了。如果这个都算电压波动大,那请教大家在实际中是用什么电压的方案。
还有&&能不能把你的采集程序给一个我参考下,谢谢。
主题帖子精华
在线时间435 小时
考虑几个方面:
1,被测电压的稳定性。
2,参考电压的稳定性。
3,接线方式(GND尽可能靠近VSSA)
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
初级会员, 积分 80, 距离下一级还需 120 积分
在线时间0 小时
回复【4楼】正点原子:
---------------------------------
1,被测电压的稳定性。&
&&&&&1路是用2节新的干电池提供,另外2路是用电阻分压,接线都是负端接&ALIENTEK&MiniSTM32&的&GND,电阻分压的正端直接取&MiniSTM32&的&3.3V
2,参考电压的稳定性。&
&&&&&参考电压,我是用原子板。
3,接线方式(GND尽可能靠近VSSA)
&&&&&原子板,被测电压负端接&ALIENTEK&MiniSTM32&的&GND
主题帖子精华
中级会员, 积分 387, 距离下一级还需 113 积分
在线时间0 小时
回复【3楼】huangxw:
---------------------------------
我是在项目里用的,取出部分出来你在整理也浪费时间,实在想要也可以提取出来给你。原子的实验就很稳定,基本不跳动。我测得是原子板子的3.3V电压,稳定不变,偶尔跳动下,芯片用的是STM32F103C8T6。
主题帖子精华
初级会员, 积分 80, 距离下一级还需 120 积分
在线时间0 小时
回复【6楼】:
---------------------------------
我用了原子的实验,测&3.3V&电压是很稳定,但如果被测电压不是&3.3v,波动也不小。
我做了试验,3.3v很稳定,我用电阻分压(没有用可变电阻无级调整),如果电压下降到接近3.2V时,出现比较大的波动。
我个人认为STM32的ADC饱和电压应该是小于&3.3V,这样测量3.3V电压,即使有波动也是在饱和范围内,所以看不出波动,感觉跳变很小。
我看了网络上的ADC试验都是测量&3.3V&的,&你的项目板子测测&&&3.0V&的信号,看看波动如何可以吗?
主题帖子精华
在线时间435 小时
回复【5楼】huangxw:
---------------------------------
改天我测试下。这两天忙...
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
初级会员, 积分 52, 距离下一级还需 148 积分
在线时间0 小时
电压跳动不是一般的大
主题帖子精华
初级会员, 积分 83, 距离下一级还需 117 积分
在线时间0 小时
我在公司做的板子上使用两路AD(PC0和PC1),PC1不接模拟电压时采集的数据非零但是波动很小,PC0不接模拟电压时采集的电压波动很大,不知道为什么。
主题帖子精华
中级会员, 积分 387, 距离下一级还需 113 积分
在线时间0 小时
回复【6楼】:
---------------------------------
你测的是电源极限值,你试用个电位器一端接开发板的3.3。另一端接地,调电位器,试试还稳定不稳定?反正我测试极为稳定
主题帖子精华
中级会员, 积分 387, 距离下一级还需 113 积分
在线时间0 小时
回复【8楼】正点原子:
---------------------------------
老大,这个试验请你抽空一定要给个结论。
主题帖子精华
中级会员, 积分 387, 距离下一级还需 113 积分
在线时间0 小时
回复【11楼】dongbaohui:
---------------------------------错了一个字,极不稳定
主题帖子精华
初级会员, 积分 102, 距离下一级还需 98 积分
在线时间0 小时
回复【8楼】正点原子:
---------------------------------
原子哥,为什么我单独用ADC采集数据然后通过串口显示在电脑上时,ADC采集的数据波动在15以内,但是当我把FATFS文件系统添加到ADC程序中后(把数据存入SD卡),采集到的数据却有120几的波动呢?
主题帖子精华
在线时间435 小时
回复【14楼】Mars_man:
---------------------------------
可能是其他操作干扰了ADC输入引脚的电压吧。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
初级会员, 积分 102, 距离下一级还需 98 积分
在线时间0 小时
回复【15楼】正点原子:
---------------------------------
好!我明天试试换个引脚,我的FATFS是参考您的F4,FATFS实验里面的程序,我用的ADC输入引脚是PA6,不知道是不是程序吧这个脚给干扰。
主题帖子精华
高级会员, 积分 811, 距离下一级还需 189 积分
在线时间120 小时
解决方案在这里:分享:STM32F407的ADC真的不够精准吗?教你设置STM32F407的ADC参数使其精度高于千分之一
/posts/list/51312.htm
主题帖子精华
初级会员, 积分 158, 距离下一级还需 42 积分
在线时间1 小时
你用了滤波电路了吗?用了基本跳动一个字
主题帖子精华
中级会员, 积分 285, 距离下一级还需 215 积分
在线时间46 小时
回复【15楼】正点原子:
---------------------------------
原子哥,AD的稳定性测了吗?
我用它来做示波器的采样,极不稳定啊。
主题帖子精华
在线时间435 小时
回复【19楼】n85gzj:
---------------------------------
我测试还行啊,呵呵
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
中级会员, 积分 261, 距离下一级还需 239 积分
在线时间6 小时
遇到同样的问题。。。请问楼主解决了没?
主题帖子精华
初级会员, 积分 187, 距离下一级还需 13 积分
在线时间50 小时
不要怀疑片子问题 多从自己的软硬件上找问题
主题帖子精华
初级会员, 积分 85, 距离下一级还需 115 积分
在线时间13 小时
我的四路ADC转换出现楼主同样的问题,我的输入电压很稳(电压源),5位半的表最后面的数字只跳动上下2数字,但ADC后的数字从串口输出变化老大了,TL431做基准稳定在3.246V(表量数字不跳);捉急啊;
Powered by查看: 1966|回复: 5
stm32f407的ADC采样率设置奇怪现象
主题帖子精华
新手上路, 积分 41, 距离下一级还需 9 积分
在线时间0 小时
从407的手册描述来看,采样率可以通过两种方式来改变,一种是改变那个采样的时钟周期数,一种是改变ADC的时钟预分频系数,但是我在代码里做测试,采样时钟周期数不变的情况下,预分频系数设置为4和8的两种情况下,采集1分钟得到的数据一样多,不知道怎么回事了,请大家帮忙分析一下,下面是我的初始化代码,数据主要是ADC3的DMA数据,ADC1可以先不考虑:
void ADC_Configuration(void)
GPIO_InitTypeDef & & &
ADC_InitTypeDef & & & &
ADC_CommonInitTypeDef &
DMA_InitTypeDef
NVIC_InitTypeDef & & & & &s_NVIC_I
& //************************ADC功能公共配置*********************************//
//时钟配置
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC |
& & & & & & & & & & RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOG |&
& & & & & & & & & & RCC_AHB1Periph_GPIOH | RCC_AHB1Periph_GPIOI, ENABLE);
//***************配置ADC公共工作时钟和工作模式**********************************//
s_ADC_cInit.ADC_Mode = ADC_Mode_I
& s_ADC_cInit.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_8C
& s_ADC_cInit.ADC_DMAAccessMode = ADC_DMAAccessMode_D&
& s_ADC_cInit.ADC_Prescaler = ADC_Prescaler_Div4;
& ADC_CommonInit(&s_ADC_cInit);
//************************ADC1初始化**************************//
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
//设置ADC1通道5(PA.5)的GPIO功能
s_GPIO_Init.GPIO_Pin = GPIO_Pin_5;
s_GPIO_Init.GPIO_Mode = GPIO_Mode_AN;
s_GPIO_Init.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &s_GPIO_Init);
//设置ADC1通道10(PC.0)的GPIO功能
s_GPIO_Init.GPIO_Pin = GPIO_Pin_0;
s_GPIO_Init.GPIO_Mode = GPIO_Mode_AN;
s_GPIO_Init.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &s_GPIO_Init);
//配置ADC1使用参数:8比特1通道单次规则转换
s_ADC_Init.ADC_Resolution = ADC_Resolution_12b;
s_ADC_Init.ADC_ScanConvMode = ENABLE;
s_ADC_Init.ADC_ContinuousConvMode = DISABLE;
s_ADC_Init.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_N
s_ADC_Init.ADC_DataAlign = ADC_DataAlign_R
s_ADC_Init.ADC_NbrOfConversion = 1; &//规则通道数为1
ADC_Init(ADC1, &s_ADC_Init);
/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);
//使能温度传感器
ADC_TempSensorVrefintCmd(ENABLE);
//******************ADC3初始化:使用2通道规则采样DMA*******************//&
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE); & & & & &
//设置ADC3通道12(PC2)的GPIO功能
s_GPIO_Init.GPIO_Pin = GPIO_Pin_2;
s_GPIO_Init.GPIO_Mode = GPIO_Mode_AN;
s_GPIO_Init.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &s_GPIO_Init);
//设置ADC3通道13(PC3)的GPIO功能
s_GPIO_Init.GPIO_Pin = GPIO_Pin_3;
s_GPIO_Init.GPIO_Mode = GPIO_Mode_AN;
s_GPIO_Init.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &s_GPIO_Init);
//配置ADC3使用参数:8比特2通道连续规则转换
s_ADC_Init.ADC_Resolution = ADC_Resolution_8b;
s_ADC_Init.ADC_ScanConvMode = ENABLE;
s_ADC_Init.ADC_ContinuousConvMode = ENABLE;
s_ADC_Init.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_N
s_ADC_Init.ADC_DataAlign = ADC_DataAlign_R
s_ADC_Init.ADC_NbrOfConversion = 2; &//规则通道数为2
ADC_Init(ADC3, &s_ADC_Init);
ADC_RegularChannelConfig(ADC3, ADC_Channel_12, 1, ADC_SampleTime_84Cycles); //采样率57k
ADC_RegularChannelConfig(ADC3, ADC_Channel_13, 2, ADC_SampleTime_84Cycles); &//采样率57k
//配置ADC3使用的DMA功能MA-2/stream-0/channel-2
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
s_DMA_Init.DMA_Channel = DMA_Channel_2;
s_DMA_Init.DMA_PeripheralBaseAddr = ADC3_DR_ADDRESS;
s_DMA_Init.DMA_Memory0BaseAddr = (u32)&ADC_Buff[0];
s_DMA_Init.DMA_DIR = DMA_DIR_PeripheralToM
s_DMA_Init.DMA_BufferSize = ABUF_DEEP; & & & & &&
s_DMA_Init.DMA_PeripheralInc = DMA_PeripheralInc_D
s_DMA_Init.DMA_MemoryInc = DMA_MemoryInc_E&
s_DMA_Init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_B
s_DMA_Init.DMA_MemoryDataSize = DMA_MemoryDataSize_B
s_DMA_Init.DMA_Mode = DMA_Mode_C
s_DMA_Init.DMA_Priority = DMA_Priority_H
s_DMA_Init.DMA_FIFOMode = DMA_FIFOMode_E
s_DMA_Init.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfF
s_DMA_Init.DMA_MemoryBurst = DMA_MemoryBurst_S
s_DMA_Init.DMA_PeripheralBurst = DMA_PeripheralBurst_S
DMA_ClearFlag(DMA2_Stream0,DMA_FLAG_HTIF0);
//清传输一半标志
DMA_ClearFlag(DMA2_Stream0,DMA_FLAG_TCIF0);
//清传输完成标志
DMA_ClearITPendingBit(DMA2_Stream0,DMA_IT_HTIF0);
DMA_ClearITPendingBit(DMA2_Stream0,DMA_IT_TCIF0);
& DMA_ITConfig(DMA2_Stream0,DMA_IT_HT,ENABLE); & &//使能半满/全满传输中断
& DMA_ITConfig(DMA2_Stream0,DMA_IT_TC,ENABLE);
& DMA_Init(DMA2_Stream0, &s_DMA_Init);
DMA_Cmd(DMA2_Stream0, ENABLE); &//使能DAM &
/* Enable ADC3 DMA */
ADC_DMACmd(ADC3, ENABLE);
/* Enable ADC3 */
ADC_Cmd(ADC3, ENABLE);
ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE); &
//使能ADC3的DMA中断
& s_NVIC_Init.NVIC_IRQChannel = DMA2_Stream0_IRQn;
& s_NVIC_Init.NVIC_IRQChannelPreemptionPriority = 0; &//抢占优先级0
& s_NVIC_Init.NVIC_IRQChannelSubPriority = 0; &//相应优先级0
& s_NVIC_Init.NVIC_IRQChannelCmd = ENABLE;
& NVIC_Init(&s_NVIC_Init);
这个问题到现在还是没找到原因,不过我用了替代方法,不用时钟去卡采样率了,我用计时器触发采样的方式解决了
主题帖子精华
新手上路, 积分 41, 距离下一级还需 9 积分
在线时间0 小时
这个问题到现在还是没找到原因,不过我用了替代方法,不用时钟去卡采样率了,我用计时器触发采样的方式解决了
主题帖子精华
在线时间435 小时
帮顶。。。。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
新手上路, 积分 41, 距离下一级还需 9 积分
在线时间0 小时
原子哥,别光顶啊,帮我看看,是我理解手册不对吗?还是怎么回事,实在搞不明白啊
主题帖子精华
新手上路, 积分 41, 距离下一级还需 9 积分
在线时间0 小时
没人注意到这个问题吗?
主题帖子精华
初级会员, 积分 124, 距离下一级还需 76 积分
在线时间1 小时
我用的原子哥的例程,看了看ADC接到通道5时候,测量GND的时候数据会飘到15左右动,但是我自己修改代码为连续方式,而且我的采集速度到了极限,时钟是36MHz,采样时间为3个时钟周期,但是采集到的GND都是0,精度貌似变高了
Powered by}

我要回帖

更多关于 stm32f4定时器触发adc 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信