05STM32F4通用定时器详细讲解Word下载.docx
- 文档编号:19131736
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:6
- 大小:45.20KB
05STM32F4通用定时器详细讲解Word下载.docx
《05STM32F4通用定时器详细讲解Word下载.docx》由会员分享,可在线阅读,更多相关《05STM32F4通用定时器详细讲解Word下载.docx(6页珍藏版)》请在冰豆网上搜索。
1:
内部时钟(CK_INT),来自RCC的TIMxCLK
2:
外部时钟模式1:
外部输入TI1FP1与TI2FP2
3:
外部时钟模式2:
外部触发输入TIMx_ETR,仅适用于TIM2、TIM3、TIM4,TIM3,对应着PD2引脚
4:
内部触发输入:
一个定时器触发另一个定时器。
时钟源可以通过TIMx_SMCR相关位进行设置。
这里我们使用内部时钟。
定时器挂在高速外设时钟APB1或低速外设时钟APB2上,时钟不超过内部高速时钟HCLK,故当APBx_Prescaler不为1时,定时器时钟为其2倍,当为1时,为了不超过HCLK,定时器时钟等于HCLK。
例如:
我们一般配置系统时钟SYSCLK为168MHz,内部高速时钟AHB=168Mhz,APB1欲分频为4,(因为APB1最高时钟为42Mhz),那么挂在APB1总线上的timer3时钟为84Mhz。
《STM32F4xx中文参考手册》的424~443页列出与通用定时器相关的寄存器一共20个,
以下列出与Timer3相关的寄存器及重要寄存器的简单介绍。
1TIM3控制寄存器1(TIM3_CR1)
作用:
1使能自动重载TIM3_ARR
2定时器的计数器递增或递减计数。
3事件更新。
4计数器使能
2TIM3控制寄存器2(TIM3_CR2)
3TIM3从模式控制寄存器(TIM3_SMCR)
4TIM3DMA/中断使能寄存器(TIM3_DIER)
作用:
使能事件更新中断
2:
使能捕获/比较中断
5TIM3状态寄存器(TIM3_SR)
事件更新中断标志
捕获/比较中断标志
6TIM3事件生成寄存器(TIM3_EGR)
7TIM3捕获/比较模式寄存器1(TIM3_CCMR1)
1:
输出比较模式
输出比较预装载使能,即使能后可以随时改变TIM3捕获/比较寄存器1(TIM3_CCR1)的值
3:
捕获/比较选择
8TIM3捕获/比较模式寄存器2(TIM3_CCMR2)
9TIM3捕获/比较使能寄存器(TIM3_CCER)
上升沿触发or下降沿触发
捕获/比较输出使能
10TIM3计数器(TIM3_CNT)
11TIM3预分频器(TIM3_PSC)
计数器时钟频率CK_CNT等于fCK_PSC/(PSC[15:
0]+1)。
12TIM3自动重载寄存器(TIM3_ARR)
当自动重载值为空时,计数器不工作
难道说每次事件都必须装载重载值?
13TIM3捕获/比较寄存器1(TIM3_CCR1)
输出时:
CCR1是捕获/比较寄存器的预装载值,由TIM3_CCMR的OC1PE位使能。
输入时:
CCR1为上一个输入捕获事件(IC1)发生时的计数器值。
14TIM3捕获/比较寄存器2(TIM3_CCR2)
15TIM3捕获/比较寄存器3(TIM3_CCR3)
16TIM3捕获/比较寄存器4(TIM3_CCR4)
1Timer3用来做定时中断
与之相关的时基单元寄存器有
原理:
这里以向上计数为例,即计数器TIM3_CNT向上计数,当达到TIM3_ARR所设定的值时,归零重新计数,若使能了更新中断,则在TIM3_CNT归零时,进入中断。
进入中断的时间为(TIM3_ARR+1)个计时器周期
而计时器单元时钟是由定时器时钟分频得到,每(CK_PSC+1)个定时器周期计数一次。
定时器时钟上文已经讲了,由于Timer3挂在APB1总线上
故Timer3进入中断的周期为(CK_PSC+1)*(TIM3_ARR+1)/84000000秒
频率为84000000/[(CK_PSC+1)*(TIM3_ARR+1)]Hz
利用官方库函数实现每500ms进入中断,改变LED灯的电平,程序如下
1打开时钟,Timer3挂在APB1上,所以命令开启时钟。
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
///使能TIM3时钟
2时钟Timer3的配置。
TIM_TimeBaseInitStructure.TIM_Period=arr;
//自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc;
//定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
//向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&
TIM_TimeBaseInitStructure);
//初始化TIM3
3使能中断
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
//允许定时器3更新中断。
4打开Timer3。
TIM_Cmd(TIM3,ENABLE);
//使能定时器3
5配置中断。
6中断服务函数编写。
故可见STM32的初始化函数都离不开以下几步
1打开设备时钟。
2配置参数。
3打开设备。
设备需配置后再打开。
如果需要配置中断,那么则需要编写中断服务函数。
完整程序如下
voidTIM3_Int_Init(u16arr,u16psc)
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;
NVIC_InitTypeDefNVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
//使能TIM3时钟
TIM_TimeBaseInitStructure.TIM_Prescaler=psc;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
//向上计数
//自动装载值
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&
//允许定时器3更新中断
TIM_Cmd(TIM3,ENABLE);
//使能定时器
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
//定时器中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
//抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;
//子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&
NVIC_InitStructure);
}
/Timer3中断服务函数
voidTIM3_IRQHandler(void)
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)//溢出中断
{
GPIO_ToggleBits(GPIO_LED,DS1_PIN);
//LED灯电平翻转
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
//清除中断标志位
然后main()函数中TIM3_Int_Init(5000-1,8400-1);
即可
可以计算进入中断的频率为2Hz即LED灯每500ms亮一次,LED周期为1Hz。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 05 STM32F4 通用 定时器 详细 讲解