历史上的今天
今天是:2025年02月14日(星期五)
2020年02月14日 | 深度解读STM32数据保存与毁灭
2020-02-14 来源:elecfans
一、认识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]位中。
它们有什么区别:
不同的组转换后保存数据的地方不一样,产生的中断标志不一样。
在扫描模式下,规则组会有能力把各通道数据通过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_FasTInterl ((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_FasTInterl ((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_ConTInuousConvMode = ENABLE;
/* alState ADC_ConTInuousConvMode;
这个参数用来指定转换是连续进行还是单次进行,它可以设置为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芯片的一款智能台灯
史海拾趣
|
最新版本的keil软件--uvision4beta1及其使用手记 上传一份最新版本的KEIL 51 软件vision4beta1,看起来很不错的,这个是没有PJ的版本,如果你的机子上装有注册过的uvision3,那直接安装就可以使用,无需另外注册!!刚下载下来,简单打开看了下,就拿出来和大家分享了,里边有一份网上找的使用手记 ...… 查看全部问答> |
|
首先我一直关注学校有个2+2的项目,是去明尼苏达双城校区的。不过我大概了解到,一年所有的费用大概在20万左右,不知道你觉得是大概一个怎样的数目? 然后我家的情况不是特别好,只能这样说,最多够支付我一年的学费,也就是20万。而且我估计是家 ...… 查看全部问答> |
|
我用的stm32F103VC控制器外接一个TJA1050CAN收发器,加一个CAN分析仪(确定可用USBCAN-II(iTEK公司的))进行测试,至于stm32的CAN测试程序,首先采用回环模式,使能CAN接收中断,调试发现,可以进入接收中断,而且接收的数据与发送的数 ...… 查看全部问答> |
|
收到板子后就开始装软件,软件装了两次,第一次不知道为什么没装成功,第二次直接安装到C盘 ,安装类型选的全部,装好后可以用了。 我是听大学的老师说起PSoC的,感觉挺不错的就申请了一套板子,打算用到公司的方案上。 &n ...… 查看全部问答> |
|
2014 C2000研讨会课程汇总 https://www.eeworld.com.cn/traini ... ex&a=lists&catid=25 TI C2000是业界公认的最适合各种对实时性要求高的场合 工业应用是TI近几年明确的最重要的发展应用,即把工业应用作为其公司发展战略的重中之重, 因此C20 ...… 查看全部问答> |




