深度解读STM32数据保存与毁灭

一、认识ADC兼进一步看懂STM的库

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]位中。

 它们有什么区别:

l 不同的组转换后保存数据的地方不一样,产生的中断标志不一样。

l 在扫描模式下,规则组会有能力把各通道数据通过DMA传给SRAM,而注入组的数据总是存在在ADC_JDRx中。

还有其他的一些区别,这里暂不一一罗列。

ST为什么这么样来设计AD转换,肯定是有理由的,但是我不知道,因此,我也就难以深入地理解AD转换的各种模式。这也就是说,对于知识的理解,要把它放在其应用背景中去学习才能学得好。因此,其他知识积累得越多,学起来也就越快,这也就是所谓的“功底”问题。某人功底深厚,意味着他见多识广,遇到的事情多,能够很快找到处理某件事情的“原型”。当然,也有一些人抽象学习能力极强,就算找不到“原型”,他也能学得很好。基本上,这类人的科学素养更高一些,在工程师、工科类学生中并不多见。

闲话少说,下面来看怎么样来使用AD转换器?

以一段源程序为例分别来解读,同时进一步理解STM32中有关符号的含义,相信以后再读库源程序,定能更上一层楼。

为看得清楚一些,以下代码用一种颜色表示。

/* ADC1 开始准备配置*/

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

/*设置ADC-》CR1的19:16,确定ADC工作模式,一共有10种工作模式

#define ADC_Mode_Independent ((uint32_t)0x00000000) 0000:独立模式

#define ADC_Mode_RegInjecSimult ((uint32_t)0x00010000) 0001:混合的同步规则+注入同步模式

#define ADC_Mode_RegSimult_AlterTrig ((uint32_t)0x00020000) 0010:混合的同步规则+交替触发模式

#define ADC_Mode_InjecSimult_Fas  TI nterl ((uint32_t)0x00030000) 0011:混合同步注入+快速交替模式

#define ADC_Mode_InjecSimult_SlowInterl ((uint32_t)0x00040000) 0100:混合同步注入+慢速交替模式

#define ADC_Mode_InjecSimult ((uint32_t)0x00050000) 0101:注入同步模式

#define ADC_Mode_RegSimult ((uint32_t)0x00060000) 0110:规则同步模式

#define ADC_Mode_Fas  TI nterl ((uint32_t)0x00070000) 0111:快速交替模式

#define ADC_Mode_SlowInterl ((uint32_t)0x00080000) 1000:慢速交替模式

#define ADC_Mode_AlterTrig ((uint32_t)0x00090000) 1001:交替触发模式

*/

ADC_InitStructure.ADC_ScanConvMode = ENABLE;

/* ADC_ScanConvMode在stm32f10x_adc.h中定义如下:

alState ADC_ScanConvMode;

这个参数用来指定转换是扫描(多通道模式)还是单个转换(单通道模式),该参数可以被设置为DISABLE或者ENABLE。

在数据手册中,SCAN位是这样描述的:扫描模式

该位由软件设置和清除,用于开启或关闭扫描模式。在扫描模式中,由ADC_SQRx或ADC_JSQRx寄存器选中的通道被转换。

0:关闭扫描模式

1:使用扫描模式

注:如果分别设置了EOCIE或JEOCIE位,只在最后一个通道转换完毕才会产生EOC或JEOC中断。

这样,如果一次需要对多个通道进行转换,这位就必须设置为ENABLE。

*/

ADC_InitStructure.ADC_Con  TI nuousConvMode = ENABLE;

/* alState ADC_Con  TI nuousConvMode;

这个参数用来指定转换是连续进行还是单次进行,它可以设置为ENABLE或者DISABLE。

这两个参数中出现了alState数据类型,那么它是什么呢,顺滕摸瓜,可以看到它的的定义如下:

typedef enum {DISABLE = 0, ENABLE = !DISABLE} alState;

因此,它相当于是一个位变量,我的理解,DISPABLE=0这个没有问题,ENABLE=!DISABLE是否应该确切的是1??否则下面的设置就会有问题。

用这两个符号来对寄存器中的位进行设置的话,还需要提供位置信息,如下面的代码所示:

tmpreg1 |= (uint32_t)(ADC_InitStruct-》ADC_DataAlign | ADC_InitStruct-》ADC_ExternalTrigConv |

((uint32_t)ADC_InitStruct-》ADC_ContinuousConvMode 《《 1));

这个《《1就是位置信息,CONT是CON2寄存器的位1

这样,我们看STM32的库又能多看懂一点了。

用于设定CON2的CONT位(位1):是否连续转换

该位由软件设置和清除。如果设置了此位,则转换将连续进行直到该位被清除。

深度解读STM32数据保存与毁灭_设计制作_测量仪表
33
150
0
48

相关资讯

  1. 1、《王者军团》新英雄“飞翎射手”登场4185
  2. 2、燃爆!邓紫棋全新单曲《穿越火线》全球首发1728
  3. 3、《战无止境OL》我妻由乃详解我的心意你懂吗2032
  4. 4、《十二战纪》本命测试在即精美手办曝光2673
  5. 5、蓝港《黎明之光》手游新职业即将诞生813
  6. 6、《巴啦啦魔法变身2》新版甜美来袭超多美衣换不停1189
  7. 7、《幻姬骑士团》宿命的牵绊人气阵容盘点4936
  8. 8、谁是你的爱?《武动乾坤》“土豆粉丝节”代言人公布2119
  9. 9、电竞战队EDG直播《时空召唤》首秀精彩非凡2731
  10. 10、《我的战争》S国精锐T-70游戏内外全解析4428
全部评论(0)
我也有话说
0
收藏
点赞
顶部