深度解读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、放大器参数评估工具为设计电路加快检查3886
  2. 2、ISE11.4对XC6SLX150进行开发时遇到的困难和挑战1425
  3. 3、如何解决开关电源中的传导骚扰问题5011
  4. 4、嵌入式导航系统是在怎样的设计下实现的830
  5. 5、高速同步MOSFET驱动器LTC4449的性能特点及适用范围164
  6. 6、智诺IMS3000P人脸识别系统在社会治安防控体系中的应用3855
  7. 7、列式存储是数据分析性能杀手锏589
  8. 8、城市轨道交通站台屏蔽门系统的功能特点及应用优势1855
  9. 9、皮尔磁:靠这两个字,轻松搞定CE认证2728
  10. 10、高精度数模转换器TQ6124芯片的性能特点、结构与应用分析1317
全部评论(0)
我也有话说
0
收藏
点赞
顶部