为了控制采样时间,可以使用一个定时器的TRGO(定时器里每次发生更新事件时会有这个信号产生)作为定时器的外部触发。

从定时器框图可以看出,TRGO为TIMx的一个输出.不过这个输出是内部使用的。

void myADC_Init() 
 { 
                 ADC_InitTypeDef ADC_InitStruct; 
                 GPIO_InitTypeDef GPIO_InitStruct; 
                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 ,ENABLE); 
                 RCC_ADCCLKConfig(RCC_PCLK2_Div6); 
  
                //ADC1_Init 
                 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_0; 
                 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN; 
                 GPIO_Init(GPIOA,&GPIO_InitStruct); 
                  
                ADC_DeInit(ADC1); 
                 ADC_InitStruct.ADC_Mode = ADC_Mode_Independent; 
                 ADC_InitStruct.ADC_NbrOfChannel = 1; 
                 ADC_InitStruct.ADC_ContinuousConvMode = DISABLE; 
                 ADC_InitStruct.ADC_ScanConvMode = DISABLE; 
                 ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO; 
                 ADC_InitStruct.ADC_DataAlign =ADC_DataAlign_Right; 
                 ADC_Init(ADC1,&ADC_InitStruct); 
          
                ADC_ExternalTrigConvCmd(ADC1,ENABLE); 
                 //ENABLE ADC1 
                 ADC_RegularChannelConfig(ADC1,0,1,ADC_SampleTime_1Cycles5); 
          
                ADC_DMACmd(ADC1,ENABLE); 
                 ADC_Cmd(ADC1,ENABLE); 
                  
                ADC_ResetCalibration(ADC1); 
                 while(ADC_GetResetCalibrationStatus(ADC1)); 
                 ADC_StartCalibration(ADC1); 
                 while(ADC_GetCalibrationStatus(ADC1)); 
          

  
void TIM3_Init() 
 { 
                 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; 
                 NVIC_InitTypeDef NVIC_InitStruct; 
          
                RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); 
                  
                TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; 
                 TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; 
                 TIM_TimeBaseInitStruct.TIM_Period = 72000000/SampleRate; 
                 TIM_TimeBaseInitStruct.TIM_Prescaler = 0; 
                 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct); 
                  
                TIM_SelectOutputTrigger(TIM3,TIM_TRGOSource_Update); //选择TRGO触发源为计时器更新时间 
          
                TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); 
                 NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn; 
                 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; 
                 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 3; 
                 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; 
                 NVIC_Init(&NVIC_InitStruct); 
                 TIM_Cmd(TIM3,ENABLE); 
          
}

ADC采样间隔问题+TRGO作为ADC的触发源头的更多相关文章

  1. 理解逐次逼近寄存器型ADC:与其它类型ADC的架构对比【转】

    转自:http://bbs.dzsc.com/space/viewspacepost.aspx?postid=86760 摘要:逐次逼近寄存器型(SAR)模数转换器(ADC)占据着大部分的中等至高分辨 ...

  2. STM32定时器触发ADC多通道连续采样,DMA缓存结果

    STM32的ADC使用非常灵活,采样触发方面:既支持软件触发,定时器或其他硬件电路自动触发,也支持转换完成后自动触发下一通道/轮转换.转换结果存储方面:既支持软件读取和转存,也支持DMA自动存储转换结 ...

  3. NUC131演示如何通过PWM触发ADC。

    今天我来讲讲PWM触发ADC的例程 /**************************************************************************** * @f ...

  4. 【安富莱二代示波器教程】第6章 示波器设计—双通道ADC驱动

    第6章        示波器设计—双通道ADC驱动 本章节为大家讲解示波器的ADC驱动,采用STM32自带ADC实现.关于STM32F429的ADC,可以说处处有地雷,不小心就踩上了,如果简单的使用, ...

  5. STM32cube库配置双ADC的同步规则采样

    http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=605203&extra=page%3D&page ...

  6. STM8S103之ADC

    如何快速了解ADC,查看Reference manual中ADC registers章节,初步了解到ADC ADC buffer register和ADC data register Analog W ...

  7. STM32 ADC多通道规则采样和注入采样

    layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 什么是ADC? STM ...

  8. STM32之ADC+步骤小技巧(英文)

    神通广大的各位互联网的网友们.大家早上中午晚上好好好.今早起来很准时的收到了两条10086的扣月租的信息.心痛不已.怀着这心情.又开始了STM32的研究.早上做了计算机控制的PID实验,又让我想起了飞 ...

  9. [nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC

    一.本实验ADC 配置 分辨率:10 位. 输入通道:5,即使用输入通道AIN5 检测电位器的电压. ADC 基准电压:1.2V. 二.NRF51822 ADC 管脚分布 NRF51822 的ADC ...

随机推荐

  1. Linux系统下用find命令查找最近修改过的文件

    1.先进入指定目录,比如:cd /var/ftp/ss 2.输入指定命令,相关命令如下介绍: 最近24小时内修改过的文件 find ./ -mtime 0 前48~24小时修改过的文件 find ./ ...

  2. Python全栈之路----Python2与Python3

    金角大王Alex  python 之路,致那些年,我们依然没搞明白的编码 python2与python3的区别 py2 str = bytes 为什么有bytes? 是因为要表示图片.视频等二进制格式 ...

  3. 解决使用C/C++配置ODBC链接使用SQLConnect返回-1

    VS中建立空项目使用ODBC连接时,SQLConnect函数总是返回-1,mysql和命令行连接数据库都是没问题的 retcode = SQLConnect(hdbc, (SQLCHAR*)" ...

  4. terminal、Shell、tty和console

    最早的电脑有带很多开关和指示灯的面板——console(概念来自管风琴),一台电脑通常一个Console,化为主机一部分,和CPU共享机柜. 一台大型主机往往支持多用户,每个用户使用的终端——term ...

  5. robot framework浏览器与驱动的匹配

    一.谷歌浏览器和火狐浏览器与驱动不匹配产生的问题 1.若在运行过程中出现[Unable to find a matching set of capabilities ][ WebDriverExcep ...

  6. 【C++】vector内存机制和性能分析

    转自:https://blog.csdn.net/mfcing/article/details/8746256 一些好的公司校园招聘过程中(包括笔试.面试环节),经常会涉及到STL中vector的使用 ...

  7. EXCEL统计不重复值的数量

    如这一列中,有多少不重复值? 1.可以点击,数据,删除重复项,清除重复值,然后剩下的统计一下即可知道:       ===> 2.用公式:=SUMPRODUCT((MATCH(E3:E20,E3 ...

  8. Docker镜像常用命令

    镜像(image)是Docker三大核心概念中最重要的,是运行容器的前提. Docker运行容器前需要本地存在对应的镜像,如果镜像没保存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Dock ...

  9. asp.net验证码

    asp.net 生成验证码问题 .添加一个.ashx文件 <%@ WebHandler Language="C#" class="CheckCode" % ...

  10. Oracle 学习笔记(六)

    Oracle 数据库常用的闪回sql 语句及其它操作语句: --Oracle 数据库dml sql -- 查看当前用户所拥有的表 select * from tab; --表空间,auto: 自动管理 ...