STM32的通用定时器的配置

发布者:数字小巨人最新更新时间:2018-07-23 来源: eefocus关键字:STM32  通用定时器  配置 手机看文章 扫描二维码
随时随地手机看文章

STM32的通用定时器为:TIM2、TIM3、TIM4和TIM5

在使用通用定时器时利用库函数直接设置定时器如下:

1.  使能定时器TIM_X的时钟:(X=2、3、4、5)

      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMX,ENABLE);

2.  计算要定时的时间,根据定时时间来设定分频数和最大计数值(以向上计数为例子),其中计算关系如下:

     系统时钟(一般为72MHZ) =定时器分频数 *计数值

     假如分频数为7200,则定时器时钟为:72MHZ/7200=10KHZ,定时器每次计数时间间隔为1/10000秒,假如定时1秒,则要计数10000次,因此计数器的最大计数值为9999,因为计数器从零开始计数。

3.  将计算好的分频数和计数值分别赋值以上面定时为例,如下:

    /自动重装的计数值 

    TIM_TimeBaseStructure.TIM_Period = (10000 - 1);

    // 这个就是预分频系数

    TIM_TimeBaseStructure.TIM_Prescaler =7200 ;

    //数字滤波器,定时的时候不涉及此功能,为零即

    TIM_TimeBaseStructure.TIM_ClockDivision = 0;

    //计数模式选择,此处设置为向上模式

    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

    //定时基本设置((X=2、3、4、5))

    TIM_TimeBaseInit(TIMX, &TIM_TimeBaseStructure);

    //清除定时器X的中断溢出标识

    TIM_ClearITPendingBit(TIMX, TIM_IT_Update);

    //开定时器X溢出中断

    TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE);

    //计数器使能,开始工作

    TIM_Cmd(TIM5, ENABLE); 

    到此通用定时器的定时功能配置完成,以上配置代码可写入

void TIMX_Init(void)函数中,函数名自己可变。别忘了在函数中的第一句写入:TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

4.  中断配置,这个按照下面的函数复制即可

    void NVIC_Configuration(void)//定时器中断配置

   {

      NVIC_InitTypeDef NVIC_InitStructure;

      NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);

      NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;

      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

      NVIC_Init(&NVIC_InitStructure);

}

5.   在stm32f10x_it.c添加定时器TIMX的中断函数:

    void TIM5_IRQHandler(void)

   {

     //如果定时器产生了中断(X=2、3、4、5)

     if (TIM_GetITStatus(TIMX, TIM_IT_Update) != RESET)

     {

      //这是你要完成的事情和相关判断,自己去写

     }

   //完成事情和判断后,清除中断 

   TIM_ClearITPendingBit(TIM5, TIM_IT_Update);

  }

到此,定时器定时中断功能实现了


关键字:STM32  通用定时器  配置 引用地址:STM32的通用定时器的配置

上一篇:STM32移植STemWin后使用四点或两点触摸校准
下一篇:以stm32的TIM2作为实例一步步配置成为定时器

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

一种实现对RFID移动读写器自动配置的方法
  1 引言   近年来,在现有的RFID 应用中,RFID 读卡器或者与固定专网连接进行数据、配置的实时同步,或者采用先记录、后上传的方法进行非实时的数据、配置同步两种方式来监控、管理读卡的数据与状态信息。以现在的带移动读卡器的RFID 应用公交收费系统为例,读卡器其实并不是实时与系统通信的。其工作模式为:读卡器对标签进行读取、修改后,将对应条目记录在读卡器内 。待每天下班后,由收费系统的工作人员持特定设备来读取这些条目和维护终端系统,完成数据、配置同步。这样的模式有很大的缺点:如不能实时监控运行系统,无法在短时间内挂失;当读卡器的配置信息遭人恶意修改或内置软件出现故障时,远端系统无法及时知晓。随着RFID 系统的更大规模的
[网络通信]
用DSP实现CPLD多方案现场可编程配置
在继电保护测试装置中, 既有复杂的算法, 又涉及多种检测与控制方案。用DSP实现算法和多方案的配置,用CPLD进行实时检测和控制,是一种较好的独立运行模式。一般CPLD的配置依靠专用配置PROM或下载电缆来完成。本文介绍基于DSP的CPLD多方案现场可编程配置方法。 1 总体描述 系统中的DSP采用TI公司的定点数字信号处理器TMS320C5402。它采用4总线4级流水线的增强型哈佛结构,处理速度为100MIPS;具有片内4K%26;#215;16位的ROM和16K%26;#215;16位的DARAM, 2个多通道缓冲串行口(McBSP),1个直接存储控制器(DMA)等片内外围电路;外部可扩展至1M%26;#215;16位存储
[嵌入式]
基于STM32在喷绘机喷头控制系统的设计与实现
0 引言 由于喷绘机喷绘过程中采用的是压电喷头工作原理,为保证喷绘出图像清晰细腻,喷绘机需要在同一温度下提供稳定的驱动电压对压电晶体进行控制。如何在精准的条件下根据室内温度实时、快速、方便地更改驱动电压和配置数据值得研究。 1 系统设计理念 喷头的驱动电压VDD2(t)取决于喷头容积电压Vrank、基于不同厂家不同颜色的油墨粘滞度而提供每色油墨与标准油墨的修正值Voffset电压、不同颜色的油墨在不同温度下需要的驱动电压补偿值Vdiff(t),即VDD2(t)=Vrank+Voffset+Vdiff(t)。不同颜色的油墨在不同的温度下驱动电压的补偿值Vdiff(t),称之为T-V数据。 不同厂家油墨温压数据不同,厂家会根据
[单片机]
基于<font color='red'>STM32</font>在喷绘机喷头控制系统的设计与实现
vivo X7配置完全曝光 6月30日正式发布
    本文转自TechWeb   本月30号,也就是周四,vivo将在京举办发布会,公布X7/X7 Plus两款新品。   泄露的渲染图   现在工信部数据库中,vivo X7/X7L正式入网,只是证件照尚未公开,不过配置已经是没悬念了。   此前vivo已经公开确认,X7将搭载高通骁龙8976处理器(骁龙652),4GB+64GB存储组合,整合前置指纹识别、1600万像素前置Moonlight柔光灯摄像头。   工信部的资料进一步指出,X7将拥有一块5.2英寸1080P OLED显示屏,电池容量2930mAh,三围147.3×71.85×7.24(mm),重量151g,比较轻薄,标配全网通。   
[手机便携]
STM32大小端模式与堆栈及其增长方向
栈增长和大端/小端问题是和CPU相关的两个问题. 1,首先来看:栈(STACK)的问题. 函数的局部变量,都是存放在 栈 里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以战舰stm32开发板为例,在startup_stm32f10x_hd.s里面,开头就有: Stack_Size EQU 0x00000800 表示栈大小是0X800,也就是2048字节.这样,CPU处理任务的时候,函数局部变量做多可占用的大小就是:2048字节,注意:是所有在处理的函数,包括函数嵌套,递归,等等,都是从这个 栈 里面,来分配的. 所以,如果一个函数的局部变量过多,比如在函数里面定义一个u8 buf
[单片机]
<font color='red'>STM32</font>大小端模式与堆栈及其增长方向
STM32定时器更新事件可以暂停否?
有人使用STM32的定时器的输出比较功能,具体就是输出4个通道的PWM信号。不过 他需要不定时地调整4个通道的占空比,即调整他们的CCR值。但现在有个小问题,那就是新的CCR值的获得往往会能跨越多个目前定时器的计数周期,这样的话,即使开启各个通道CCR值的预装功能,似乎也很保证做到一次性修改。因为它希望新的CCR值被同时更新。换句话说,他担心不同通道新的CCR值分散在不同计数周期生效,可能给应用带来些麻烦。 我们知道,STM32定时器的预装寄存器的值到影子寄存器的更新往往离不开更新事件。一般来讲,只要启动了定时器,更新事件会随着计数器的溢出而自然产生。 既然这样,比方若是在下面四个时刻获得了新的CCR值,有没有办法让这几个
[单片机]
<font color='red'>STM32</font><font color='red'>定时器</font>更新事件可以暂停否?
STM32的IO口的8种配置(GPIO)
1 /` STM32的输入输出管脚有下面8种可能的配置:(4输入+2输出+2复用输出) ① 浮空输入_IN_FLOATING ② 带上拉输入_IPU ③ 带下拉输入_IPD ④ 模拟输入_AIN ⑤ 开漏输出_OUT_OD ⑥ 推挽输出_OUT_PP ⑦ 复用功能的推挽输出_AF_PP ⑧ 复用功能的开漏输出_AF_OD 1.1I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口 的输出部分安排了多个响应速度不同的输出
[单片机]
STM32 ADC调试
使用火牛开发板自带的程序验证ADC的功能,怎么调试打印出来的ADC的值都是0,查看了ADC和DMA寄存器的设置也没什么问题, 修改了ADC的采用速率也不行后来从网上下到一个例子,down进去跑,竟然是正常的,比较了下代码关于ADC的设置都是一样的, 真奇怪的问题,到网站论坛上求助也没什么回复,我用正常的程序一段段替代运行不正常的程序,看看到底什么原因,最终问题发现了, 贴出来以免以后再次遇到: 不正常程序的代码的RCC_Configuration函数: void RCC_Configuration(void) { /* 使能外设时钟 */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, EN
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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