STM32处理器AD难度整理

1.STM32的AD变化,任务组可以转换成两组:规则组和注射组。随机序列按随机顺序变换多种渠道构成了一组转换。例如。能够完成转换中,例如按照以下顺序:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。在执行规则通道组扫描转换。换。能够模糊的将注入组的转换理解为AD转换的中断一样,规则通道组的转换是普通转换,然而注入组的转换条件满足的情况下,注入组的转换会打断规则组的转换。假设规则转换已经在执行。为了在注入转换后确保同步,全部的ADC(主和从)的规则转换被停止,并在注入转换结束时同步恢复。

规则转换和注入转换均有外部触发选项,规则通道转换期间有DMA请求产生,而注入转换则无DMA请求,须要用查询或中断的方式保存转换的数据。

2.规则组:此模式通过设置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,依次类推。

注入组:此模式通过设置ADC_CR1寄存器的JDISCEN位激活。

在一个外部触发事件后,该模式按通道顺序逐个转换ADC_JSQR寄存器中选择的序列。

一个外部触发信号能够启动ADC_JSQR寄存器选择的下一个通道序列的转换。直到序列中全部的转换完毕为止。总的序列长度由ADC_JSQR寄存器的JL[1:0]位定义。

样例: n=1,被转换的通道 = 1、2、3 第一次触发:通道1被转换 第二次触发:通道2被转换 第三次触发:通道3被转换,而且产生EOC和JEOC事件 第四次触发:通道1被转换。也是依次类推。

3.STM32的ADC的工作模式:

单次转换模式:转换一次则停止;

连续转换模式:转换完一次后即開始下一次转换。

扫描模式:扫描一组模拟通道。

间断模式:每触发一次。转换序列中n个通道。

4.由于规则通道转换的值储存在一个仅有的数据寄存器中。所以当转换多个规则通道时须要使用DMA,这能够避免丢失已经存储在ADC_DR寄存器中的数据。仅仅有在规则通道的转换结束时才产生DMA请求,并将转换的数据从ADC_DR寄存器传输到用户指定的目的地址。

注:  仅仅有ADC1和ADC3拥有DMA功能。由ADC2转化的数据能够通过双ADC模式,利用ADC1的DMA功能传输。

5.双ADC模式

(1)同步注入模式:此模式转换一个注入通道组。外部触发来自ADC1的注入组多路开关(由ADC1_CR2寄存器的JEXTSEL[2:0]选择)。它同一时候给ADC2提供同步触发。

注意:  不要在2个ADC上转换同样的通道(两个ADC在同一个通道上的採样时间不能重叠)。

(2)同步规则模式:此模式在规则通道组上运行。外部触发来自ADC1的规则组多路开关(由ADC1_CR2寄存器的EXTSEL[2:0]选择),它同一时候给ADC2提供同步触发。

(3)高速交叉模式:此模式仅仅适用于规则通道组(通常为一个通道)。外部触发来自ADC1的规则通道多路开关。

外部触发产生后:

A.ADC2马上启动而且

B.ADC1在延迟7个ADC时钟周期后启动

注意:最大同意採样时间<7个ADCCLK周期。避免ADC1和ADC2转换同样通道时发生两个採样周期的重叠。

(4)慢速交叉模式:此模式仅仅适用于规则通道组(仅仅能为一个通道)。

外部触发来自ADC1的规则通道多路开关。外部触发产生后:

A.ADC2马上启动而且

B.ADC1在延迟14个ADC时钟周期后启动

C.在延迟第二次14个ADC周期后ADC2再次启动,如此循环。

(5)交替触发模式:此模式仅仅适用于注入通道组。

外部触发源来自ADC1的注入通道多路开关。

A.当第一个触发产生时,ADC1上的全部注入组通道被转换。

B.当第二个触发到达时。ADC2上的全部注入组通道被转换。

C.如此循环……

(6)独立模式:此模式里。双ADC同步不工作,每一个ADC接口独立工作。

(7)混合的规则/注入同步模式:规则组同步转换能够被中断,以启动注入组的同步转换。

(8)混合的同步规则+交替触发模式:规则组同步转换能够被中断,以启动注入组交替触发转换。 显示了一个规则同步转换被交替触发所中断。

(9)混合同步注入+ 交叉模式:一个注入事件能够中断一个交叉转换。这样的情况下。交叉转换被中断,注在开始转换,在注射序列的一端插入,交叉转换恢复。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-10-12 16:31:34

STM32处理器AD难度整理的相关文章

STM32处理器的AD难点整理

1.STM32的AD转换,可以将转换任务组织为两个组:规则组和注入组.在任意多个通道上以任意顺序进行的一系列转换构成成组转换.例如,可以如下顺序完成转换:通道3.通道8.通道2.通道2.通道0.通道2.通道2.通道15.在执行规则通道组扫描转换时,如有例外处理则可启用注入通道组的转换.可以模糊的将注入组的转换理解为AD转换的中断一样,规则通道组的转换是普通转换,然而注入组的转换条件满足的情况下,注入组的转换会打断规则组的转换.如果规则转换已经在运行,为了在注入转换后确保同步,所有的ADC(主和从

64脚和小于64脚的STM32进行AD时注意,参照电源处理方法(转)

源:64脚和小于64脚的STM32进行AD时注意,参照电源处理方法 请注意,ADC_IN17上没有内部基准,将其说成基准电压概念不对. 所以横线以下的理解不对,如果将其做为参考,则其电压假定按1.2V计算,实际测量的数字量是1271~1275,按此推算: 1.2/1275=VDD/4095, 所以VDD=3.85V,很明显供电压换算出来的值与实际3.3V不符,所以不有用其做为参考. 实际上,可以通用ADC_IN1采集某参考源的电压,其它通道按此进行比例换算. ------------------

STM32的AD通道干扰问题

今天调试STM32F103的ADC,使用ADC1单次转换模式进行两通道AD采样,发现两路通道存在烦扰问题.相关AD操作代码如下: void adc_start_convert(uint8_t ch) { ADC1->SMPR2 = (ADC1->SMPR2 & 0XFFFFFFF8) | 7; ADC1->SQR3 = (ADC1->SQR3 & 0XFFFFFFE0) | ch; ADC_SoftwareStartConvCmd(ADC1, ENABLE); }

STM32架构相关

整理了一下STM32相关的底层结构,有助于消化理解 先上几张图片(主要参照STM3210x系列) 1.芯片结构组成图: 2.STM32内部结构: 3.Cortex-M3模块结构图: 4.STM3210X内部结构: 桥: 四个主动单元 : M3内核的ICode总线(I-bus).DCode总线(D-bus). 系统总线(S-bus).DMA(DMA1.DMA2.以太网DMA) 四个被动单元 : 内部SRAM.内部闪存.FSMC.AHB到APB桥 ICode总线 :         将M3内核的指令

STM32学习要点

我想说,为了学习单片机而去学习单片机的思路不对. 你问,如何系统地入门学习stm32? 本身就是一个错误的问题.假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习. 你要考虑的是, 我可以用STM32实现什么? 为什么使用STM32而不是8051? 是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO? 是51的功耗太大,电池挺不住?是51的功能太弱,而你要使用SPI.I2C.ADC.DMA? 是51的内存太小而你要存储的东西太多? 当你需要使

自学stm32的一些个人经验

1.首先我们先看看与STM32相关的文档 我们假定大家已经对STM32的书籍或者文档有一定的理解.如不理解,请立即阅读STM32的文档,以获取最基本的知识点. 如果你手上拥有ST官方主推的STM32神舟系列的板子,那么光盘都会配好这些文档,STM32的学习与ARM9的学习有一个很大的区别.ARM9的学习 一般是需要购买书籍的.比如三星的S3C2440,官方的文档都是英文的,大部分工程师只能去看国内出版的书籍.英文好的同学,请不要以为 你很牛,可以只看英文文档.毕竟你是中国人,你最熟悉的,理解最好

过来人和你谈谈如何学STM32?

1.首先我们先看看与STM32相关的文档 我们假定大家已经对STM32的书籍或者文档有一定的理解.如不理解,请立即阅读STM32的文档,以获取最基本的知识点. 如果你手上拥有ST官方主推的STM32神舟系列的板子,那么光盘都会配好这些文档,STM32的学习与ARM9的学习有一个很大的区别.ARM9的学习 一般是需要购买书籍的.比如三星的S3C2440,官方的文档都是英文的,大部分工程师只能去看国内出版的书籍.英文好的同学,请不要以为 你很牛,可以只看英文文档.毕竟你是中国人,你最熟悉的,理解最好

预处理器

本文是对C++预处理器的学习整理,参考了网站www.learncpp.com相关章节的内容. 一.概述 代码在编译之前需要通过预处理器进行预处理,预处理器运行时,逐行扫描代码寻找预处理指令.预处理指令是以#开头.换行符结尾(不是分号:)的代码. 预处理器主要实现一下三个功能: 1. include 2. macro define 宏定义. 3. 条件编译 二.include 故名思意,#include用于包含头文件,预处理器在遇到#include 指令时,将相应头文件的内容复制到指令所在的位置.

STM32F10X入门指南---AD转换

首先,点击下面的链接下载我们需要使用的代码.链接 1.添加必要的文件: 之前我们说过,有三个文件是必须添加的,这三个文件分别是:startup_stm32f10x_xd.s ,stm32f10x_rcc.c ,system_stm32f10x.c.其中,前面的xd是根据你的芯片的容量来选择的.这三个文件都可以在千帆提供的代码中找到.文件路径:Core.rar\Core\STM32\Source\Must . 另外,如果想操作IO口,必须添加千帆的一个库文件DeviceBase.cpp.文件路径: