您的位置 首页 嵌入式

STM32之ADC

ADC是多少位的?12位ADC有多少个?1个、2个或多至3个,视不同的器件而不同;每个又有多个通道。关于通道的名堂:1033通道选择有16个多路

ADC是多少位的?

12位
ADC有多少个?
1个、2个或多至3个,视不同的器材而不同;每个又有多个通道。
关于通道的名堂:
10.3.3通道挑选
有16个多路通道。能够把转化分红两组:规矩的和注入的。在恣意多个通道上以恣意次序进行的一系列转化构成成组转化。例如,能够如下次序完结转化:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。
规矩组由多达16个转化组成。规矩通道和它们的转化次序在ADC_SQRx寄存器中挑选。规矩组中转化的总数写入ADC_SQR1寄存器的L[3:0]位中。
注入组由多达4个转化组成。注入通道和它们的转化次序在ADC_JSQR寄存器中挑选。注入组里的转化总数目有必要写入ADC_JSQR寄存器的L[1:0]位中。
它们有什么差异:
不同的组转化后保存数据的当地不一样,发生的中止标志不一样。
在扫描形式下,规矩组会有才干把各通道数据经过DMA传给SRAM,而注入组的数据总是存在在ADC_JDRx中。
还有其他的一些差异,这儿暂不逐个罗列。
ST为什么这么样来规划AD转化,肯定是有理由的,可是我不知道,因而,我也就难以深化地了解AD转化的各种形式。这也便是说,关于常识的了解,要把它放在其运用布景中去学习才干学得好。因而,其他相关常识积累得越多,这儿学起来也就越快,这也便是所谓的“功底”问题。或人功底深沉,意味着他见多识广,遇到的工作多,能够很快找到处理某件工作的“原型”。当然,也有一些人笼统学习才干极强,就算找不到“原型”,他也能学得很好。基本上,这类人的科学素养更高一些,在工程师、工科类学生中并不多见。
闲话少说,下面来看怎么样来运用AD转化器?
以一段源程序为例分别来解读,一起进一步了解STM32中有关符号的意义,信任今后再读库源程序,定能更上一层楼。
为看得清楚一些,以下代码用蓝色表明,而在这段代码的注释中刺进的一些代码则用赤色表明。从数据手册上摘抄下来的内容则用黄底来表明(原本数据手册摘抄部分用贴图是最好的,可是宣布博文时贴图太痛苦了,,,偷点懒)。
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
经过前面一系列的设置,总算能够履行ADC_Init函数了。履行完了还不可,还要指定通道转化次序,采样时刻等,接下持续。
ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 1, ADC_SampleTime_55Cycles5);
if (Rank < 7)//这个Rand便是第三个参数
{
tmpreg1 = ADCx->SQR3;
tmpreg2 = SQR3_SQ_Set << (5 * (Rank - 1));
SQR3的值如下:
//#define SQR3_SQ_Set((uint32_t)0x0000001F)
之所以用5去乘,看下图中的表格:ADC_SQ3中SQ1~SQ6每个都是占5位。
这下了解了:假如这个Rank是1,那么tmpreg2这个变量第[4:0]这5位将会是11111(即SQR3_SQ_Set的初始值:0x0000001f),假如Rank是2,那么tmpreg2这个变量的第[9:5]将会是11111,即tmpreg2将等于:0x000003e0,依此类推。
tmpreg1 &= ~tmpreg2;
tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 1));
tmpreg1 |= tmpreg2;
ADCx->SQR3 = tmpreg1;
}
*/
第四个参数是采样时刻设定,代码如下:
tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel);
tmpreg1 |= tmpreg2;
ADCx->SMPR2 = tmpreg1;
接下来还有两件事要做,第一件是答应DMA传输
ADC_DMACmd(ADC1, ENABLE);
第二件是翻开ADC1开端转化。
ADC_Cmd(ADC1, ENABLE);
这两件工作都不费事,所以就不再剖析了。
至此一次ADC转化装备结束。很费事……或许功能强大的副产品便是费事吧,没有办法。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/258307.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部