adc内部有哪两个通道组,各自最多可以设置几个通道,各自的stm32f4定时器触发adc方式有哪些

1619人阅读 STM32(25) STM32的每个模块通过内部的模拟多路开关,可以切换到不同的输入并进行转换。STM32特别地加入了多种成组转换的模式,可以由程序设置好之后,对多个模拟通道自动地进行逐个地采样转换。 有2种划分转换组的方式:通道组和注入通道组。通常规则通道组中可以安排最多16个通道,而注入通道组可以安排最多4个通道。 在执行规则通道组扫描转换时,如有例外处理则可启用注入通道组的转换。 一个不太恰当的比喻是:规则通道组的转换好比是程序的正常执行,而注入通道组的转换则好比是程序正常执行之外的一个中断处理程序。 再举一个不一定使用的例子: 假如你在家里的院子内放了5个温度探头,室内放了3个温度探头;你需要时刻监视室外温度即可,但偶尔你想看看室内的温度;因此你可以使用规则通道组 循环扫描室外的5个探头并显示AD转换结果,当你想看室内温度时,通过一个按钮启动注入转换组(3个室内探头)并暂时显示室内温度,当你放开这个按钮后, 系统又会回到规则通道组继续检测室外温度。 从系统设计上,测量并显示室内温度的过程中断了测量并显示室外温度的过程,但程序设计上可以在初始化阶段分别设置好不同的转换组,系统运行中不必再 变更循环转换的配置,从而达到两个任务互不干扰和快速切换的结果。可以设想一下,如果没有规则组和注入组的划分,当你按下按钮后,需要从新配置AD循环扫 描的通道,然后在施放按钮后需再次配置AD循环扫描的通道。 —————————————— 上面的例子因为速度较慢,不能完全体现这样区分(规则组和注入组)的好处,但在工业应用领域中有很多检测和监视探头需要较快地处理,这样对AD转换的分组将简化事件处理的程序并提高事件处理的速度。 规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。 规则组中转换的总数写入ADC_SQR1寄存器的L[3:0]位中。 注入组由多达4个转换组成。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。 注入组里的转换总数目写入ADC_JSQR寄存器的L[1:0]位中& 如果规则转换已经在运行,为了在注入转换后确保同步,所有的ADC(主和从)的规则转换被停止,并在注入转换结束时同步恢复,见图示。 规则转换和注入转换均有外部触发选项, 还有一个需注意的是: 规则通道序列长度(ADC_SQR1&&&L)的设置值,是规则通道序列转换总数数-1,DMA 设置则是规则序列转换总数 注入通道序列长度(ADC_JSQR&&&JL)的设置值,是注入通道序列转换总数数-1 注入组相当于“中断”,规则组相当于正常执行的“程序”。 转换期间有DMA请求产生,而注入转换则无DMA请求,需要用查询或中断的方式保存转换的数据。 &&相关文章推荐 * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场 访问:380711次 积分:5007 积分:5007 排名:第5355名 原创:108篇 转载:115篇 评论:38条 (3)(5)(3)(3)(1)(1)(1)(7)(5)(2)(3)(3)(1)(1)(13)(5)(7)(1)(1)(5)(11)(31)(26)(8)(4)(6)(5)(11)(8)(1)(19)(2)(4)(1)(14)基于DSP的多通道信号采集分析系统的研究.pdf -max上传文档投稿赚钱-文档C2C交易模式-100%分成比例文档分享网 基于DSP的多通道信号采集分析系统的研究.pdf 文档名称:基于DSP的多通道信号采集分析系统的研究.pdf 格式:pdf&&&大小:1.99MB&&&总页数:52 可免费阅读页数:52页 下载源文档需要:20元人民币 预览与实际下载的一致,文档内容不会超过预览的范围,下载前请务必先预览,自行甄别内容是否完整、是否存在文不对题等情况(本网站为文档分享平台性质),一旦付费下载,本站不支持退款 我已知晓:实际下载内容以预览为准! 文档介绍:--------------------------Page1------------------------------武汉理工大学硕士学位论文基于DSP的多通道信号采集分析系统的研究与应用姓名:向文溢申请学位级别:硕士专业:信号与信息处理指导教师:沈维聪--------------------------Page2------------------------------摘要SignalDSP数字信号处理(Digital学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用,而数字信号处理器(DSP)的出现,很好的满足了信号采集系统对于核心微控制处理器的要求,采用DSP作为信号采集系统的CPU的研究与应用目前也逐渐引起业内重视。而随着微电子制造工艺水平的飞速提高及数据分析理论的进一步完善与成熟,国内外在对信号采集系统的高性能研究上取得了很大的成就。采样通道由单通道发展到双通道、多通道,采样频率、分辨率、精度逐步提高,为分析功能的加强提供了前提条件。因此,国内外以DSP作为数据采集系统的采样控制和分析运算的研究与应用正在展开。在上述背景下,本文论述了一种基于数字信号处理器(DSP)的信号采集与采集数据处理系统的设计方案,并给出了具体的软硬件实现方法。系统使用TIA/D采样、采样数据处理、处理结果显示以及系统整体按键控制等功能。本文主要从以下几个方面来论述整个系统的设计方案:11确定系统的开发技术路线,包括简要的理论基础、处理器和开发板的选型以及系统性能参数的设定等;2)详细研究了系统理论基础,包括频谱分析原理当前位置: >> 第15章 模拟数字转换器ADC(自学内容) 第15章 模拟/数字转换器(ADC) 12位 ADC 是一种逐次逼近型模拟数字转换 器。它有18个通道,可测量16个外部和2个内部 信号源。各通道的 A/D 转换可以单次、连续、 扫描或间断模式执行。ADC 的结果可以左对齐或 右对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压 是否超出用户定义的高/低阀值值。
一、ADC的构成 1、主要特征 ? 12位分辨率 ? 转换结束,注入转换结束和发生模拟看门狗事 件时产生中断 ? 单次和连续转换模式 ? 从通道0到通道n的自动扫描模式 ? 自校准 ? 带内嵌数据一致的数据对齐 ? 通道之间采样间隔可编程 ?规则转换和注入转换均有外部触发选项??间断模式双重模式(带2个ADC的器件)?? ?ADC转换速率1MHz ADC供电要求:2.4V 到 3.6VADC输入范围:VREF-≤ VIN ≤ VREF+规则通道转换期间有DMA请求产生。 2、内部框图 3、引脚描述名称 VREF+ VDDA VREFVSSA EXTSEL[2:0] 信号类型 注解 输入,模拟参考正 ADC使用的高端/正极参考电压,VSSA 极 ≤ VREF+ ≤ VDDA 输入,模拟电源 等效于VDD的模拟电源且:2.4V ≤ VDDA ≤ VDD(3.6V)输入,模拟参考负 ADC使用的低端/负极参考电压,VREF-= 极 VSSA 输入,模拟电源地 等效于VSS的模拟电源地 16 个模拟输入通道 开始规则成组转换的六个外部触发信号 输入,数字ADC_IN[15:0] 模拟输入信号JEXTSEL[2:0] 输入,数字开始注入成组转换的六个外部触发信号 二、ADC的功能描述1、ADC 开关控制?通过设置 ADC_CR1 寄存器的 ADON 位可给 ADC 上电。当第一次设置 ADON 位时,它将 ADC 从 断电状态下唤醒; ADC 上电延迟一段时间后(tSTAB),再次设置 ADON 位时开始进行转换; 通过清除ADON位可以停止转换,并将 ADC 置于 断电模式。?? 2、ADC 时钟 由时钟控制器提供的 ADCCLK 时钟和 PCLK2(APB2 时钟)同步,CLK 控制器为 ADC 时钟提供一个专 用的可编程预分频器。 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]位中。温度传感器和通道 ADC_IN16 相连接,内部参考电 压 VREFINT 和 ADC_IN17 相连接。可以按注入或 规则通道对这两个内部通道进行转换。? 4、单次转换模式单次转换模式里,ADC只执行一次转换。一旦选择 通道的转换完成:?如果一个规则通道被转换:转换数据被储存在16 位ADC_DR寄存器中,EOC(转换结束)标志被设置, 如果设置了EOCIE,则产生中断。 如果一个注入通道被转换:转换数据被储存在16 位的ADC_DRJ1寄存器中,JEOC( 注入转换结束)标 志被设置,如果设置了JEOCIE 位,则产生中断。??然后ADC停止。 5、连续转换模式 在连续转换模式中,当前面ADC转换一结束马上就 启动另一次转换。每个转换后:?如果一个规则通道被转换:转换数据被储存在16位 的ADC_DR 寄存器中,EOC(转换结束)标志被设置, 如果设置了EOCIE,则产生中断。 如果一个注入通道被转换:转换数据被储存在16位 的ADC_DRJ1寄存器中,JEOC(注入转换结束)标志被 设置,如果设置了JEOCIE 位,则产生中断。? 6、时序图ADC在开始精确转换前需要一个稳定时间tSTAB 。 在开始ADC转换和14个时钟周期后,EOC标志被设置, 16位ADC数据寄存器包含转换的结果。 8、扫描模式此模式用来扫描一组模拟通道。?在每个组的每个通道上执行单次转换,在每个转 换结束时,同一组的下一个通道被自动转换。如 果设置了CONT位,转换不会在选择组的最后一个 通道上停止,而是再次从选择组的第一个通道继 续转换。 如果设置了DMA位,在每次EOC后,DMA控制器把 规则组通道的转换数据传输到SRAM中。而注入通 道转换的数据总是存储在ADC_JDRx寄存器中。? 三、校准?ADC有一个内置自校准模式。校准可大幅减小因内 部电容器组的变化而造成的准精度误差。 通过设置ADC_CR2寄存器的CAL位启动校准。一旦校 准结束,CAL位被硬件复位,可以开始正常转换。?注意: 1、建议在每次上电后执行校准。2、启动校准前,ADC必须处于关电状态(ADON=’0’)超 过至少两个ADC时钟周期。 校准时间框图 四、数据对齐数据可以左对齐或右对齐。数据右对齐(注入组) 数据右对齐(规则组)数据左对齐(注入组) 数据左对齐(规则组) 五、可编程的通道采样时间 ADC使用若干个ADC_CLK周期对输入电压采样,采样 周期数目可以通过ADC_SMPR1和ADC_SMPR2寄存器中 的SMP[2:0]位而更改。每个通道可以以不同的时间 采样。总转换时间如下计算:TCONV = 采样时间 + 12.5个周期例如:当ADCCLK=14MHz,则1.5周期的采样时间 TCONV = 1.5 + 12.5 = 14周期 = 1?s 七、DMA请求?因为规则通道转换的值储存在一个唯一的数据寄 存器中,所以当转换多个规则通道时需要使用 DMA,这可以避免丢失已经存储在ADC_DR寄存器 中的数据。?只有在规则通道的转换结束时才产生DMA请求, 并将转换的数据从ADC_DR寄存器传输到用户指定 的目的地址。注入通道不能使用DMA。? DMA请求映像USART1_TX ADC1 TIM2_CC3 TIM4_CC1 TIM1_CC1 USART3_TX TIM2_UP TIM3_CC3 USART3_RX TIM4_CC2 USART2_TX TIM1_CCU TIM1_UP USART1_RX USART2_RX TIM1_TRIG TIM2_CC2 TIM2_CC4 SPI2_TX TIM2_CC1 TIM3_CC1 TIM1_CC3 I2C2_RX TIM4_UP I2C1_RX TIM4_CC3 I2C2_TX I2C1_TX TIM3_TRIG TIM3_CC4 TIM1_CC2 TIM1_CC4 SPI1_TX TIM3_UP SPI2_RXSPI1_RXORORORORORORORSW TRIGGERSW TRIGGERSW TRIGGERSW TRIGGERSW TRIGGERSW TRIGGERSW TRIGGER通道1通道2通道3通道4通道5通道6通道7高优先级请求 DMA DMA 请求低优先级请求 八、温度传感器温度传感器可以用来测量器件周围的温度(TA)。 温度传感器在内部和 ADC_IN16 输入通道相连接, 此通道把传感器输出的电压转换成数字值。温度 传感器模拟输入的采样时间必须大于2.2 ?s。 当温度传感器没有被使用时,可以置于关电模式。 1.? ?主要特征 支持的温?范围:-40 到125 ? 精确?:+/- 1.5°C 2.温?传感器和VREFINT通道框图 ADC_IN16( 温度传感器)和ADC_IN17(VREFINT) 的转换。 3. 读取温度的方法 ? 选择ADCx_IN16输入通道 ? 选择采样时间大于2.2 μs ? 设置TSVREFE位,以唤醒关电模式下的温度传感器 ? 通过设置ADON位启动ADC转换 ? 读ADC数据寄存器上的VSENSE 数据 ? 利用下列公式得出温度 温度(°C) = {(V25 - VSENSE)/Avg_Slope} + 25 V25 = VSENSE在 25°C 时的数值(典型值=1.42V, 对应于对应0x6E2(1762D )) Avg_Slope = 温?与VSENSE 曲线的平均斜? (典型值=4.35mv/°C,对应于0x05 /°C ) 九、中断规则和注入组转换结束时能产生中断,当模拟 看门狗状态位被设置时也能产生中断,它们都 有独立的中断使能位。中断事件 规则组转换结束 注入组转换结束 设置模拟看门狗状态位 事件标志 EOC JEOC AWD 使能控制位 EOCIE JEOCIE AWDIE 十、ADC固件库函数 ? ADC_Init 的使用方法函数原形 功能描述 输入参数1 输入参数2void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct) 根据 ADC_InitStruct 结构的内容初始化 ADCx 接口. ADCx: 其中 x 可以是 1 或 2. ADC_InitStruct: 指向 ADC_InitTypeDef 结 构. ADC_InitTypeDef 结构: 该结构定义在 stm32f10x_adc.h 文件中。 typedef struct { u32 ADC_Mode; FunctionalState ADC_ScanConvMode; FunctionalState ADC_ContinuousConvMode; u32 ADC_ExternalTrigConv; u32 ADC_DataAlign; u8 ADC_NbrOfChannel; } ADC_InitTypeDef ADC_Mode 参数配置 ADC 工作在单/双模式.ADC_Mode ADC_Mode_Independent ADC_Mode_RegInjecSimult ADC_Mode_RegSimult_AlterTrig ADC_Mode_InjecSimult_FastInterl ADC_Mode_InjecSimult_SlowInterl ADC_Mode_InjecSimult ADC_Mode_RegSimult ADC_Mode_FastInterl ADC_Mode_SlowInterl ADC_Mode_AlterTrig 描述 ADC1 和 ADC2 工作在独立模式 ADC1 和 ADC2 工作在同时规则注入 模式ADC1 和 ADC2 工作在同时规则和交 替触发模式ADC1 和 ADC2 工作在同时注入和快 速交替模式ADC1 和 ADC2 工作在同时注入和慢 速交替模式ADC1 和 ADC2 工作在同时注入模式 ADC1 和 ADC2 工作在同时规则模式 ADC1 和 ADC2 工作在快速交替模式 ADC1 和 ADC2 工作在慢速交替模式 ADC1 和 ADC2 工作在交替触发模式 ADC_ExternalTrigConv 参数设置规则通道使用外 部触发启动 ADC 转换。ADC_ExternalTrigConv ADC_ExternalTrigConv_T1_CC1 ADC_ExternalTrigConv_T1_CC2 ADC_ExternalTrigConv_T1_CC3 描述 外部触发转换选用通用定时器1的捕获比较器1 外部触发转换选用通用定时器1的捕获比较器2 外部触发转换选用通用定时器1的捕获比较器3ADC_ExternalTrigConv_T2_CC2ADC_ExternalTrigConv_T3_TRGO ADC_ExternalTrigConv_T4_CC4 ADC_ExternalTrigConv_Ext_IT11 ADC_ExternalTrigConv_None外部触发转换选用通用定时器2的捕获比较器2外部触发转换选用通用定时器3的TRGO 外部触发转换选用通用定时器4的捕获比较器4 外部触发转换选用外部中断11事件 软件启动转换 ADC_ScanConvMode 参数指定 ADC 工作在扫描模 式(多通道)还是单次(单通道)模式。如果设 置为 ENABLE ,就是扫描模式,设置 DISABLE 就 是单次模式. ADC_ContinuousConvMode 参数指定转换是连续的 还是单次的。如设置 ENABLE 就是连续的,设置 DISABLE 是单次的. ADC_NbrOfChannel 参数指定使用序列规则组中 ADC 通道的数目. 可以取 1 到 16. ADC_DataAlign 参数指定数据对齐方式.ADC_DataAlign ADC_DataAlign_Right 描述 ADC 数据右对齐ADC_DataAlign_LeftADC 数据左对齐 ? ADC_RegularChannelConfig 的使用方法函数原形 功能描述 void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, u8 ADC_Channel, u8 Rank, u8 ADC_SampleTime)对选择的 ADC 规则通道配置转换次序和采样时间.输入参数1 ADCx: 其中 x 可以是 1 或 2. 输入参数2 ADC_Channel: 需要配置的 ADC 通道. 输入参数3 Rank: 在规则组序列中的次序. 范围是 1 到 16. 输入参数4 ADC_SampleTime: 选择通道的采样时间值. ADC_Channel 参数指定需要配置的 ADC 通道.ADC_Channel ADC_Channel_0 ADC_Channel_1 ┅ ADC_Channel_8 ┅ ADC_Channel_16 ADC_Channel_17 描述 选择 ADC 的通道0 选择 ADC 的通道1 ┅ 选择 ADC 的通道8 ┅ 选择 ADC 的通道16 选择 ADC 的通道17 ADC_SampleTime 参数指定选择通道的 ADC 采样时间.ADC_SampleTime ADC_SampleTime_1Cycles5 ADC_SampleTime_7Cycles5 ADC_SampleTime_13Cycles5 ADC_SampleTime_28Cycles5 ADC_SampleTime_41Cycles5 ADC_SampleTime_55Cycles5 ADC_SampleTime_71Cycles5 ADC_SampleTime_239Cycles5 描述 采样时间是 1.5 周期 采样时间是 7.5 周期采样时间是 13.5 周期 采样时间是 28.5 周期 采样时间是 41.5 周期 采样时间是 55.5 周期 采样时间是 71.5 周期 采样时间是 239.5 周期 ?ADC_AnalogWatchdogThresholdsConfig 的使用 方法void ADC_AnalogWatchdogThresholdsConfig(ADC _TypeDef* ADCx, u16 HighThreshold, u16 LowThreshold) 配置模拟看门狗的高低阈值 ADCx: 其中x 可以是 1 或 2. HighThreshold: ADC 的模拟看门狗高阈值. 为 12-bit 值. LowThreshold: ADC的模拟看门狗低阈值.为 12-bit 值.函数原形 功能描述 输入参数1 输入参数2 输入参数3 ? ADC_AnalogWatchdogCmd 的使用方法void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, u32 ADC_AnalogWatchdog) 使能或禁止模拟看门狗在一个或所有的规则或 注入通道 ADCx: 其中 x 可以是 1 或 2. ADC_AnalogWatchdog: 配置 ADC 的模拟看门 狗.函数原形 功能描述 输入参数1 输入参数2 ADC_AnalogWatchdog 参数配置 ADC 的模拟看门狗.ADC_AnalogWatchdog 描述 模拟看门狗在一个单独的 规则通道上 模拟看门狗在一个单独的 注入通道上 模拟看门狗在一个单独的 规则或注入通道上 模拟看门狗在所有的规则 通道上 模拟看门狗在所有的注入 通道上 模拟看门狗在所有的规则 和注入通道上ADC_AnalogWatchdog_SingleRegEnableADC_AnalogWatchdog_SingleInjecEnableADC_AnalogWatchdog_SingleRegorInjecEnableADC_AnalogWatchdog_AllRegEnableADC_AnalogWatchdog_AllInjecEnableADC_AnalogWatchdog_AllRegAllInjecEnableADC_AnalogWatchdog_None模拟看门狗不监督任何通 道 ? ADC_AnalogWatchdogSingleChannelConfig 的使 用方法函数原形 void ADC_AnalogWatchdogSingleChannelConfig(AD C_TypeDef* ADCx, u8 ADC_Channel)功能描述 输入参数1输入参数2配置模拟看门狗要监视的ADCx通道 ADCx: 其中 x 可以是 1 或 2.ADC_Channel: 需配置 ADC 的模拟看门狗通道. ?ADC_ITConfig 的使用方法void ADC_ITConfig(ADC_TypeDef* ADCx, u16 ADC_IT, FunctionalState NewState) 使能或禁止指定的ADC中断 ADCx: 其中x 可以是 1 或 2.函数原形 功能描述 输入参数1 输入参数2ADC_IT : 指定ADC的中断源NewState: ENABLE 或 DISABLE输入参数3ADC_IT 参数取下列值:ADC_IT ADC_IT_EOC ADC_IT_AWD ADC_IT_JEOC 描述 EOC 中断允许 AWDOG 中断允许 JEOC 中断允许 ? ADC_ResetCalibration 函数的使用方法函数原形 功能描述输入参数void ADC_ResetCalibration(ADC_TypeDef* ADCx) 复位校准寄存器 ADCx: 其中 x 可以是 1或 2? ADC_GetResetCalibrationStatus 函数的使用方法函数原形 功能描述 输入参数 FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeD ef* ADCx) 得到ADC复位校准寄存器的状态 ADCx: 其中 x 可以是 1或 2返回参数SET 或 RESET ? ADC_StartCalibration 函数的使用方法函数原形 功能描述输入参数void ADC_StartCalibration(ADC_TypeDef* ADCx) 开始校准过程 ADCx: 其中 x 可以是 1或 2? ADC_SoftwareStartConvCmd 函数的使用方法函数原形 功能描述 输入参数 void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) 使能或禁止ADCx的软件启动转换 ADCx: 其中 x 可以是 1或 2返回参数NewState: ENABLE 或 DISABLE ? ADC_DMACmd 函数的使用方法函数原形 功能描述 ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState) 使能或禁止 ADC DMA 请求输入参数 返回参数ADCx: 其中 x 可以是 1或 2 NewState: ENABLE 或 DISABLE? ADC_ClearITPendingBit 函数的使用方法函数原形功能描述 输入参数 返回参数 void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, u16 ADC_IT) 清除 ADCx 的中断登记标志 ADCx: 其中 x 可以是 1或 2 ADC_IT : 需要清除的中断标志 例:采用DMA通道1将ADC1的通道14的数据连续转换 结果放到变量ADC_ConvertedValue中,采用软件启 动,采样周期为55.5个周期。/* 定义 */ #define ADC1_DR_Address((u32)0x4001244C)/* 定义变量和结构 */ ADC_InitTypeDef ADC_InitStructure; DMA_InitTypeDef DMA_InitStructure; vu16 ADC_ConvertedValue; ErrorStatus HSEStartUpStatus; /* DMA通道1初始化,因ADC1接在这个通道上 */ DMA_DeInit(DMA_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 1; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA_Channel1, &DMA_InitStructure); /* 使能DMA通道1 */ DMA_Cmd(DMA_Channel1, ENABLE); /* ADC1配置 */ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; 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); /* 配置ADC1规则通道14 */ ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_55Cycles5); /* 使能ADC1的DMA */ ADC_DMACmd(ADC1, ENABLE); /* 使能ADC1 */ ADC_Cmd(ADC1, ENABLE); /* 使能ADC1的复位校准寄存器 */ ADC_ResetCalibration(ADC1); /* 检测ADC1的复位校准是否结束 */ while(ADC_GetResetCalibrationStatus(ADC1));/* 启动ADC1校准 */ ADC_StartCalibration(ADC1); /* 检测ADC1的校准是否结束 */ while(ADC_GetCalibrationStatus(ADC1));/* 软件启动ADC1转换 */ ADC_SoftwareStartConvCmd(ADC1, ENABLE); STM32实验平台上电位器的电路图是:STM32实验平台上CPU的管脚图是: GPIO的配置程序是: void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitS /* 配置 PC.04(ADC Channel14)作为模拟输入*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOC, &GPIO_InitStructure); } 在RCC配置程序里要开启DMA和AD的时钟 /* 使能 DMA 时钟 */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA, ENABLE); /* 使能 ADC1 和 GPIOC 时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE); 例:采用ADC1的通道14进行数据连续转换,用模拟 看门狗检测ADC1的通道14的模拟输入量(当ADC的 模拟输入量在窗口之外,将点亮LED1灯),采用软 件启动,采样周期为13.5个周期。/* 定义结构 */ ADC_InitTypeDef ADC_InitStructure; /* 配置ADC1 */ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; 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); /* 配置ADC1规则通道14 */ ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_13Cycles5);/* 设置高低模拟看门狗阈值 */ ADC_AnalogWatchdogThresholdsConfig(ADC1, 0x0B00, 0x0300); /* 配置通道14为单模拟看门狗保证通道 */ ADC_AnalogWatchdogSingleChannelConfig(ADC1, ADC_Channel_14); /* 在一个规则通道上使能模拟看门狗 */ ADC_AnalogWatchdogCmd(ADC1, ADC_AnalogWatchdog_SingleReg(Enable); /* 使能AWD中断 */ ADC_ITConfig(ADC1, ADC_IT_AWD, ENABLE); /* 使能ADC1 */ ADC_Cmd(ADC1, ENABLE); /* 使能ADC1复位校准寄存器 */ ADC_ResetCalibration(ADC1); /* 检测ADC1的复位校准寄存器结束 */ while(ADC_GetResetCalibrationStatus(ADC1));/* 启动ADC1校准 */ ADC_StartCalibration(ADC1); /* 检测ADC1校准结束 */ while(ADC_GetCalibrationStatus(ADC1)); /* 用软件启动ADC1的数据转换 */ ADC_SoftwareStartConvCmd(ADC1, ENABLE); /*ADC1的中断服务程序 */ void ADC_IRQHandler(void) { … /* 清ADC1的AWD中断登记位 */ ADC_ClearITPendingBit(ADC1, ADC_IT_AWD); } STM32实验平台上电位器的电路图是:STM32实验平台上CPU的管脚图是: 在GPIO配置程序中增加下列代码: /* 配置 PC.04(ADC Channel14)作为模拟输入*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOC, &GPIO_InitStructure);在RCC配置程序里要开启AD的时钟 /* 使能 ADC1 和 GPIOC 时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE); 在NVIC配置程序中增加下列代码: /* 配置和使能 ADC 中断 */ NVIC_InitStructure.NVIC_IRQChannel = ADC_IRQC NVIC_InitStructure. NVIC_IRQChannelPreemptionPriority= 0; NVIC_InitStructure. NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); 例:采用DMA存储ADC1的64个采样点的值,选用 ADC1的通道4和14为规则通道,ADC1的通道10和11 为注入通道。规则通道采用间断模式,间断数为1, 转换为外部触发EXTI-11,每次触发只转换一个通 道;注入通道采用外部出发EXTI-15。转化时间均 为28.5时钟周期,数据采用右对齐。 /* 定义 */ #define ADC1_DR_Address vu32 Index = 0;((u32)0x4001244C)/* 定义变量与结构 */ ADC_InitTypeDef ADC_InitStructure; DMA_InitTypeDef DMA_InitStructure; vu16 ADC_RegularConvertedValueTab[64], ADC_InjectedConvertedValueTab[32]; ErrorStatus HSEStartUpStatus; /* 配置DMA通道1*/ DMA_DeInit(DMA_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC_RegularConvertedValueTab; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 64; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_D DMA_Init(DMA_Channel1, &DMA_InitStructure); /* 使能DMA通道1 */ DMA_Cmd(DMA_Channel1, ENABLE); /* 配置ADC1 */ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_Ext_IT11; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 2; ADC_Init(ADC1, &ADC_InitStructure); /* 配置ADC1规则通道 */ ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_28Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 2, ADC_SampleTime_28Cycles5); /* 配置规则通道间断模式数 */ ADC_DiscModeChannelCountConfig(ADC1, 1); /* 使能规则通道间断模式 */ ADC_DiscModeCmd(ADC1, ENABLE);/* 使能ADC1的外部触发转换 */ ADC_ExternalTrigConvCmd(ADC1, ENABLE); /* 配置注入序列长度 */ ADC_InjectedSequencerLengthConfig(ADC1, 2); /* 配置ADC1的注入通道 */ ADC_InjectedChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_28Cycles5); ADC_InjectedChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_28Cycles5); /* 设置ADC1注入通道为外部触发 */ ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_Ext_IT15); /* 使能ADC1注入外部触发转换 */ ADC_ExternalTrigInjectedConvCmd(ADC1, ENABLE); /* 使能JEOC中断 */ ADC_ITConfig(ADC1, ADC_IT_JEOC, ENABLE); /* 使能ADC1 DMA */ ADC_DMACmd(ADC1, ENABLE); /* 使能ADC1 */ ADC_Cmd(ADC1, ENABLE); /* 使能ADC1复位校准寄存器 */ ADC_ResetCalibration(ADC1); /* 检查ADC1的复位校准结束了吗 */ while(ADC_GetResetCalibrationStatus(ADC1)); /* 启动ADC1校准 */ ADC_StartCalibration(ADC1); /* 检查ADC1校准结束了吗 */ while(ADC_GetCalibrationStatus(ADC1)); void ADC_IRQHandler(void) { /* 清除ADC1的注入中断标志JEOC */ ADC_ClearITPendingBit(ADC1, ADC_IT_JEOC); /* 读取注入通道10和11的转化结果 */ ADC_InjectedConvertedValueTab[Index++] = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1); ADC_InjectedConvertedValueTab[Index++] = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_2); if (Index == 32) { Index = 0; } } 模数转换器ADC_电力/水利_工程科技_专业资料。模数转换器 ADC 摘要模数转换器即 A/D 转换器,或简称 ADC,通常是指一个将模拟信号转变为数字信号的电子 元件。 ...ADC和DAC接地经典_电子/电路_工程科技_专业资料。大多数的 ADC 都有模拟地(AGnd...这个引脚不是因为接到系统数字地而称为数字地引脚,而是这个引脚有转换器的 数字...国家半导体公司模拟数字转换器网上研讨会问答集_信息与...答:您可以选择其精度与您的 ADC 精度向匹配的前端...第四章 模拟数字转换器 140页 1下载券 两款全新高速...《 数字逻辑电路分析与设计》课程 项目 实施报告题目...的“模数转换”为本教材第六章的并行 ADC 转换电路...器 不能实现转化,所以只能有四个一下模块:模拟电压...1 A/D 转换器 ADC0809 数字温度计设计 2、引脚结构(图 1-2) 图 1-2 ADC0809 内部引脚图 IN0-IN7:8 条模拟量输入通道 ADC0809 对输入模拟量要求:信号...飞思卡尔 KL25 ADC模块 中文解释_电子/电路_工程科技_专业资料。第 28 章 模拟―数字转换器 28.1 概述注意:对于芯片模块的具体实施细则请参阅芯片的配置信息。 ...图 4 加入抗混叠滤波器 模数转换技术是现实各种模拟信号通向数字世界的桥梁,作为将模拟信号转换成数字 信号的模数转换技术主要有以下几种。 分级型和流水线型 ADC ...数模转换器_电子/电路_工程科技_专业资料。ADC,Analog-to-Digital Converter的缩写,指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信...引言逐次逼近寄存器型(SAR)模拟数字转换器(ADC)是采样速率低于 5Msps (每秒百万次采样)的中等 至高分辨率应用的常见结构。SAR ADC 的分辨率一般为 8 位至 16 ...4.6 模/数转换器(ADC)一、 ADC 的分类和特性参数 (一) 定义和分类 ADC 是一种在规定的精度和分辨率之内,把接收的模拟信号转换成为成正比的数字信 号的器件... All rights reserved Powered by copyright ©right 。文档资料库内容来自网络,如有侵犯请联系客服。}

我要回帖

更多关于 stm8s tim1触发adc 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信