STM32的定时器和ADC

发布者:devilcore最新更新时间:2018-05-04 来源: eefocus关键字:STM32  定时器  ADC 手机看文章 扫描二维码
随时随地手机看文章

开启两个定时器给FPGA使用
要求是
一、定时器可以在任何时刻关闭,就算计数不满也要停
二、定时器在再次开启时可以从0计数
三、定时器可以在启动过程中停止,然后更改定时周期再开始从0计数




主要的几个函数
//tim_num=0对应 定时器2,tim_num=1对应 定时器3;tim_us:定时器uS数
void stm32_timer_start(uint16_t tim_num,uint16_t tim_us)
{
/* ---------------------------------------------------------------
PCLK1=36MHz
TIM CLK = 72 MHz, Prescaler = 72, 72M/72=1M,即计数1000000为1S,即计数加1为1uS
--------------------------------------------------------------- */
/* Time base configuration */
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;


  stm32_timer_stop(tim_num);
TIM_TimeBaseStructure.TIM_Period = tim_us; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值计数到5000为500ms
TIM_TimeBaseStructure.TIM_Prescaler =(72-1); //设置用来作为TIMx时钟频率除数的预分频值  10Khz的计数频率  
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式


  if(tim_num == 0){
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);  //清除TIMx的中断待处理位:TIM 中断源 
    TIM_SelectOnePulseMode(TIM2, TIM_OPMode_Single);  //定时器单次模式
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);         //使能中断
    TIM_Cmd(TIM2, ENABLE);  //使能TIMx外设
  }
  else if(tim_num == 1){
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
    TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIMx的中断待处理位:TIM 中断源 
    TIM_SelectOnePulseMode(TIM3, TIM_OPMode_Single);//定时器单次模式
    TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);  //使能中断
    TIM_Cmd(TIM3, ENABLE);  //使能TIMx外设
  }
      
}




//停止定时器
void stm32_timer_stop(uint16_t tim_num)
{  
  if(tim_num == 0)
  {
    TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE); //关中断
    TIM_Cmd(TIM2, DISABLE);  //关闭TIMx外设
  }
  else if(tim_num == 1)
  {
    TIM_ITConfig(TIM3, TIM_IT_Update, DISABLE);   //关中断 
    TIM_Cmd(TIM3, DISABLE);  //关闭TIMx外设
  }
}




void TIM2_IRQHandler(void)  
{


  if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){ //检查指定的TIM中断发生与否:TIM 中断源 
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源 
    time_handlers[0]();//中断处理函数
  }
}


void TIM3_IRQHandler(void)  
{


  if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){ //检查指定的TIM中断发生与否:TIM 中断源 
    TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源 
    time_handlers[1]();//中断处理函数
  }  
}




不管在第一次启动定时器还是在停止之后再打开定时器,都调用stm32_timer_start函数
这样可以保证定时器停止后再开启从0计数,在重新设置了计数值后,定时器会马上按照新的定时值计数,哪怕不去调用stop函数




stm32_timer_start里面的
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
    TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIMx的中断待处理位:TIM 中断源 
这两个函数不能对调,不然就会出现不管定时器定时多长,一启动就会产生定时中断的现象
这个时间大概是120uS




对于ADC
调试STM32采集板的电压分压测试,使用ADC采集数据,发现会有偏差,大概偏差5%
后来测量硬件电路,发现基准电压VDDA和VREF+是3V,后来调到3.3V,AD采样就不存在偏差了。


如有不妥之处,请评判指正

关键字:STM32  定时器  ADC 引用地址:STM32的定时器和ADC

上一篇:STM32F407的外部中断设置
下一篇:STM32 spi与FPGA的通信

推荐阅读最新更新时间:2024-03-16 16:01

MSP430 ADC12模块寄存器设置解读
一。简单介绍: ADC12模块中是由以下部分组成:输入的16路模拟开关(外部8路,内部4路),ADC内部电压参考源,ADC12内核,ADC时钟源部分,采集与保持/触发源部分,ADC数据输出部分,ADC控制寄存器等组成。 四种采样模式: (1)单通道单次转换模式 (2)序列通道单词转换模式 (3)单通道多次转换模式 (4)序列通道多次转换模式 个人觉得(3)模式应该是使用较多的, 对选定的通道进行多次转换,直到关闭该功能或ENC=0。进行如下设置: x=CSStartAdd,指向转换开始地址 ADC12MEMx存放转换结果 ADC12MCTLx寄存器中定义了通道和参考电压 在这种模式下,改变转换模式,不必先停止
[单片机]
MSP430 <font color='red'>ADC</font>12模块寄存器设置解读
ADC关键性能指标及误区
由于 ADC 产品相对于网络产品和服务器需求小很多,用户和集成商在选择产品时对关键指标的理解难免有一些误区,加之部分主流厂商刻意引导,招标规范往往有不少非关键指标作被作为必须符合项。接下来就这些误区和真正的关键指标做一些探讨。   误区1: CPU数量和主频。 目前大部分厂商采用了类似的通用CPU架构,但还是可能采用不同厂家的CPU。即使是同一个厂家,也可能是不同系列。最关键的是CPU数量和主频并不代表性能,除非是同一个厂家的同一个软件。同样,完全相同的硬件配置,不同厂商的架构和系统发挥出来的性能可能相差数倍,正如完全相同的几个人在不同的管理环境下发挥出来的贡献差别会很大。并行计算处理不好,由于CPU间信开销及锁的问题,CPU数
[模拟电子]
STM32单片机最小系统的电路设计
背景 学嵌入式,我们一般从单片机学起。学单片机,不能只学软件,硬件知识也要跟上。软硬件相结合的设计,才是真正优秀的设计。 谈及单片机的硬件设计,我们会先将其浓缩为最小系统,即能实现最基础的功能的最简化设计。以 STM32(F1 系列)单片机为例,最小系统无非是这几部分:电源、复位、时钟、启动模式、下载调试。 电源 STM32 的电源有以下几种类型: 主电源(VDD / VSS) 主电源指的是标记为 VDD1、VDD2... 的引脚。 每个引脚必须加一个 100nF 的滤波电容,且尽量靠近引脚放置,此外需要一个 10uF 的钽电容公用。 后备电源(VBAT) VBAT 引脚可用于电池供电。如果不用,可以与 VDD 连接
[单片机]
<font color='red'>STM32</font>单片机最小系统的电路设计
STM32 —— LIN
/* LIN 总线的主要特性有 单主机 多从机概念 基于普通 UART/SCI 接口的低成本硬件实现 低成本软件或作为纯状态机 从机节点不需要石英或陶瓷谐振器可以实现自同步 保证信号传输的延迟时间 低成本的单线设备 速度高达 20kbit/s 总线的通讯由单个主机控制 每个报文帧都用一个分隔信号起始 ,一个同步场和一个标识符场 . 这些都由主机任务发送 从机任务则是发回数据场和校验场 报文路由 报文的内容由识别符命名 识别符不指出报文的目的地 但解释数据的含义 最大的 标识符数量是 64 其中 4 个保留用于专用的通讯 譬如软件升级或诊断 多播 由于引入了报文滤波的概念 任何
[单片机]
STM32菜鸟成长记录---RS485通讯协议的应用
RS485缺点: RS485总线是一种常规的通信总线,它不能够做总线的自动仲裁,也就是不能够同时发送数据以避免总线竞争,所以整个系统的通信效率必然较低,数据冗余量较大,对于速度要求高的应用场所不适应用RS485总线。同时由于RS485总线上通常只有一台主机,所以这种总线方式是典型的集中—分散型控制系统。一旦主机出现故障,会使整个系统的通信限于瘫痪状态,因此做好主机的在线备份是一个重要措施。 **传统光电隔离的典型电路: VDD与+5V1(VCC485)是两组不共地的电源,一般用隔离型的DC-DC来实现。通过光耦隔离来实现信号的隔离传输,ISL3152EIBZ与MCU系统不共地,完全隔离则有效的抑制了高共模电压的产生,大大降低4
[单片机]
<font color='red'>STM32</font>菜鸟成长记录---RS485通讯协议的应用
CTSD精密ADC—利用异步采样速率转换(ASRC)简化数字数据接口
CTSD Precision ADCs—Digital Data Interface Simplification with Asynchronous Sample Rate Conversion (ASRC) CTSD精密ADC—利用异步采样速率转换(ASRC)简化数字数据接口 本系列文章已突出介绍了连续时间Σ-Δ(CTSD)模数转换器(ADC)调制器环路的架构特性,这种架构能够简化ADC模拟输入端的信号链设计。现在讨论将ADC数据与外部数字主机接口以对此数据执行应用相关处理的简单但创新的方法。对任何应用而言,数字数据输出采样速率都是ADC信号链的一个关键参数。但是,不同应用有不同的采样速率要求。本文章介绍一种新型片内
[模拟电子]
CTSD精密<font color='red'>ADC</font>—利用异步采样速率转换(ASRC)简化数字数据接口
STM32CubeMX系列教程3:基本定时器
这一章我们在前一章GPIO的工程修改。复制GPIO的工程,修改文件夹名。点击 打开STM32cubeMX的工程文件重新配置。开启定时器TIM3,选择内部时钟。 定时器就相当于单片机的闹钟,下面我们以基本定时器为例简单介绍一下定时器。 从上图我们可以看到,基本定时器主要由下面三个寄存器组成。 计数器寄存器 (TIMx_CNT) 预分频器寄存器 (TIMx_PSC) 自动重载寄存器 (TIMx_ARR) 计数器寄存器 (TIMx_CNT)存储的是当前的计数值。预分频器 (TIMx_PSC)为多少个SK_PSC脉冲计数一次,如图192 预分频器的值为1(预分频寄存器默认为0,为不分频),则为两个脉冲计数一次。即为
[单片机]
STM32CubeMX系列教程3:基本<font color='red'>定时器</font>
增强ADC性能的频率抖动法
自从 70 年代末以来,设计师成功地提高了 A/D 转换器的有效分辨力和寄生性能,方法是在变换器的输入端加入抖动(非相关噪声),然后用 DSP 技术将噪声从变换后的数据中中和。最常见的抖动方法是在 A/D 变换器输入信号上增加随机振幅噪声。尽管这种方法具有实用性,但增加的噪声中包含有大的随机峰值信号。为使 A/D 变换器输入端口不致进入饱和,设计师必须知道峰值信号以及峰值抖动电平。即使短时间的饱和也会使 A/D 变换器增加更多非线性成分,从而超过抖动可以消除的范围。   另一种方法是增加一个频率抖动而振幅恒定的信号。图1显示一种可能的实现方案,它采用一只Linear公司LTC1799可编程振荡器IC2,工作在VCO(压控振荡器)模式
[模拟电子]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved