历史上的今天
今天是:2025年08月17日(星期日)
2018年08月17日 | STM32学习笔记:通用定时器基本设定
2018-08-17 来源:eefocus
STM32 包含11个定时器,其中TIM2~TIM5为通用定时器。
通用定时器挂载在低速外设总线APB1上,其时钟来源于输入为APB1的一个倍频器,只要APB1的时钟分频数不为1,TIMx的时钟频率就会为APB1时钟频率的2倍,即72MHz 。
配置通用定时器需要4步(以配置TIM2为例):
(1)配置系统时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);倍
开启TIM2与GPIOA的时钟,其中TIM2挂载在APB1上,GPIOA挂载在APB2上;
(2)配置NVIC
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置NVIC中断分组2,2位抢占优先级,2为子优先级
NVIC_InitStructure.NVIC_IRQChannel = TIM2_UP_IRQn;//设置中断为TIM2上升中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断
NVIC_Init(&NVIC_InitStructure);
(3)配置GPIO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//PA0,PA1,PA2,PA3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//设置为端口复用模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
(4)配置TIMER
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler = psc;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ARRPreloadConfig(TIM2, ENABLE);
TIM_Cmd(TIM2, ENABLE);
[cpp] view plain copy
1.利用TIM_DeInit将TIMER设置为缺省值;
2.TIM_Period设置自动装入的值,累计(TIM_Period+1)个时钟脉冲后产生更新或中断;
3.TIM_Prescaler设置预分频系数,定时器的时钟频率=72Mhz/(TIM_Prescaler+1);
定时器频率=((1+TIM_Prescaler )/72M)*(1+TIM_Period )
例:如果想要设置定时器频率为1秒,可以设置
TIM_Prescaler=35999,TIM_Period=1999 //2Khz的频率,计数到2000
或
TIM_Prescaler=7199,TIM_Period=9999 //10KHz的频率,计数到10000
两种不同的参数设置都会使定时器的频率为1秒,但是在作为PWM输出时会有细度不同的问题,后者的细度更高些,作者更倾向于第二种配置。
4.TIM_ClockDivision设置时钟分割,可设置为TIM_CKD_DIV1,TIM_CKD_DIV2,TIM_CKD_DIV4,
当设置为TIM_CKD_DIV1时:
TDTS = Tck_tim
当设置为TIM_CKD_DIV2时:
TDTS = 2Tck_tim
当设置为TIM_CKD_DIV4时:
TDTS = 4Tck_tim;
TIM_ClockDivision的作用就是在未分频之前根据要求建立新的分频器,确定定时器,确定一定的延时时间,在此时间内完成一定预期的功能,一般不太用,所以无论是定义上文中的哪个值对原本定时器的频率都毫无影响,不过并不是没有作用的,以后会有能用到的地方。
5.TIM_CounterMode设置计数模式,可以设置为向上计数、向下计数和中央对齐计数,其中比较常用的为向上计数模式TIM_CounterMode_Up和向下计数方式TIM_CounterMode_Down;
6.TIM_RepetitionCounter设置重复溢出次数,就是多少次溢出后会给你一次中断,一般设置为0,只有高级定时器才有用;
7.TIM_ARRPreloadConfig设置是否使用 预装载缓冲器;
8.TIM_Cmd来开启定时器TIM2;
上一篇:STM32定时器时间的计算方法
下一篇:STM32的时钟分割
史海拾趣
|
我做了一个arm7--LPC2132的板子,最近测试遇见了如下问题,板子上的AD通道程序在下进去时,AD通到AIN管脚出现3点多v的电压,如果这时接上外部电压几乎几十 MV,AD的AIN也呈现出1点多v的电压,但是板子的基本IO口功能却正常,请高手指教这是为啥?? ...… 查看全部问答> |
|
if (File.Exists(\"\\\\MyDatabase.sdf\")) File.Delete(\"\\\\MyDatabase.sdf\"); ...… 查看全部问答> |
|
GPRS拨号后TCP协议通而UDP和ICMP协议都不通,怎么回事? 我用QQ2440开发板串口接CSR蓝牙开发板做dun上网,拨号连接都很正常,但是拨上网以后发现UDP 和ICMP协议不通,而后TCP协议却可以通,这个问题可能有点难?… 查看全部问答> |
|
请教大家一个问题! 我现在在用PDIUSBD12,通过SoftConnect连接到主机,主机显示了“无法识别的USB设备”,然后在单片机的程序内收到了一个复位信号,接下来就没反应了!(接下来应该会收到主机发送的设备描述符请求才对呀)。不知道有没有人知道 ...… 查看全部问答> |
|
外部中断处理程序大小在100多个汇编指令,为保证中断处理时间尽量短,采用48兆主频,依然耗时很多,丢中断.请各位高手指教! 相关链接:https://bbs.eeworld.com.cn/upfiles/img/20075/2007521114421607.rar… 查看全部问答> |
|
万用表是电力电子等部门不可缺少的测量仪表,一般以测量电压、电流和电阻为主要目的。万用表按显示方式分为指针万用表和数字万用表。万用表品牌较多,常见的有福禄克万用表、安捷伦万用表、吉时利万用表等。万用表是一种多功能、多量程的测量仪 ...… 查看全部问答> |
|
replyreload += \',\' + 1705701;鉴于之前发的网络专题帖子都是电脑与开发板之间的通信,而开发板与开发板之间的通信例程比较少,这里上传一个开发板之间的网络通信例程,以供大家参考一下,测试现象如下 客户端串口打印信息 服务器端串口打印信 ...… 查看全部问答> |
|
本帖最后由 tianshuihu 于 2015-1-8 00:47 编辑 采用GPS定位只能获得当前位置的信息,如果不能将信息上传其应用受到很大局限 GPS通讯应用范围很广,但是局限也很明显:一是成本很高,另一点是其本身的通信原理决定其通信地点不能有太多、太厚的 ...… 查看全部问答> |




