基于ARM的单片机应用及实践课件-第六章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六章 STM32 定时器的使用 通用定时器配置步骤
1)TIM3时钟使能 这里我们通过APB1ENR的第1位来设置TIM3的时钟,因为 Stm32_Clock_Init函数里面把APB1的分频设置为2了, 所以我们的TIM3时钟就是APB1时钟的2倍,等于系统时 钟(72M)。 2)设置TIM3_ARR和TIM3_PSC的值 通过这两个寄存器,设置自动重装的值及分频系数。这 两个参数加上时钟频率就决定了定时器的溢出时间。
定时器的工作频率计算公式为 CK_CNT=定时器时钟/(TIMx_PSC+1) 其中CK_CNT表示定时器工作频率 TIMx_PSC表示分频系数
第六章 STM32 定时器的使用
typedef struct
{
vu32 CTRL; vu32 LOAD; vu32 VAL; vuc32 CALIB;
//SysTick控制和状态寄存器 //SysTick重装载值寄存器 //SysTick当前值寄存器 //SysTick校准值寄存器
大家好
第六章 STM32 定时器的使用
本章内容
STM32F的定时器简介 通用定时器时基单元 通用定时器特殊工作模式 定时器编程及实训
第六章 STM32 定时器的使用
STM32中一共有11个定时器: 2个高级控制定时器 4个普通定时器 2个基本定时器 2个看门狗定时器 1个系统嘀嗒定时器。 TIM1,TIM8是能够产生三对PWM互补输出的高级定时 器,常用于电动机的控制。它们的时钟由APB2的输出 产生。
第六章 STM32 定时器的使用
AHB预分频 /1,2,…,512
APB1预分频 /1,2,4,8,16
最大36MHz
PCLK1 至APB1外设
20个外设时钟使能位
TIM2,3,4,5,6,7 如果APB1预分频=1, 则乘1输出,否则乘2输出
6个外设时钟使能位
TIMXCLK 至TIM2~7
APB2预分频 /1,2,4,8,16
} SysTick_TypeDef;
第六章 STM32 定时器的使用
库函数: SysTick_CLKSourceConfig函数 SysTick_Setreload函数 SysTick_CounterCmd函数 SysTick_ITConfig函数 SysTick_GetCounter函数 SysTick_GetFlagStatus函数
第六章 STM32 定时器的使用
例如普通定时器的时钟为72MHz,分频比为7199,那么 我们想要得到一个1秒钟的定时,定时计数器的值需 要设定为
TIMx_ARR =10000 因为72000000 / 7200 =10KHz 时钟周期T=1/10KHz=100us 100us × 10000 =1S 结论 :分频比7199 定时计数器的值10000。
这个倍频器的作用:当APB1的预分频系数为1时,倍 频器不起作用,定时器的时钟频率等于APB1的频率; 当APB1的预分频系数为其它数值(即预分频系数为2、4 、8或16)时,这个倍频器起作用,定时器的时钟频率 等于APB1的频率两倍。
第六章 STM32 定时器的使用 下面举一个例子说明。假定AHB=36MHz,因为APB1 允许的最大频率为36MHz,所以APB1的预分频系数可 以取任意数值;当预分频系数=1时,APB1=36MHz, TIM2~7的时钟频率=36MHz(倍频器不起作用);
第六章 STM32 定时器的使用
3)设置TIM3_DIER允许更新中断 因为我们要使用TIM3的更新中断,所以设置DIER 的UIE位,并使能触发中断。
4)允许TIM3工作 我们在配置完后要开启定时器,通过TIM3_CR1的 CEN位来设置。
第六章 STM32 定时器的使用
5)TIM3中断分组设置
ຫໍສະໝຸດ Baidu
第六章 STM32 定时器的使用 TIM2~TIM5是通用定时器: 输入捕获 输出比较 PWM 脉冲计数
TIM6和TIM7是基本定时器: 主要用于产生DAC触发信号,其时钟由APB1输出产生
第六章 STM32 定时器的使用 系统时基定时器SysTick: 24位递减计数器 自动重加载 常用于产生延时us级、ms级
计数器寄存器:TIMx_CNT 预分频器寄存器:TIMx_PSC 自动装载寄存器:TIMx_ARR
第六章 STM32 定时器的使用 通用寄存器时基单元 1)计数器寄存器:TIMx_CNT
最大72MHz
PCLK2 至APB2外设
15个外设时钟使能位
TIM1&8定时器 如果APB2预分频=1, 则乘1输出,否则乘2输出
TIMXCLK 至TIM1和TIM8 2个外设时钟使能位
第六章 STM32 定时器的使用 从上图中可以看出,定时器的时钟不是直接来自APB1 或APB2,而是来自于输入为APB1或APB2的一个倍频 器,图中的浅蓝色部分。
在定时器配置完了之后,因为要产生中断,必不可少的 要设置NVIC相关寄存器,以使能TIM3中断。
6)编写中断服务函数 编写定时器中断服务函数,通过该函数处理定时器 产生的相关中断。中断产生后,通过状态寄存器的 值来判断此次产生的中断属于什么类型。然后执行 相关的操作。
第六章 STM32 定时器的使用 通用寄存器时基单元
第六章 STM32 定时器的使用
STM32的通用定时器TIM,是一个通过可编程预分频器 驱动的16位自动装载计数器构成。 通用TIMx定时器特性包括:
具备16位向上,向下,向上/向下自动装载计数器。 具备16位可编程预分频器。 具备4个独立通道。 使用外部信号控制定时器和定时器互连的同步电路。 可以通过事件产生中断,中断类型丰富。 具备DMA功能。
当预分频系数=2时,APB1=18MHz,在倍频器的作用 下,TIM2~7的时钟频率=36MHz。 既然需要TIM2~7的时钟频率=36MHz,为什么不直接 取APB1的预分频系数=1?
第六章 STM32 定时器的使用
答案是:APB1不但要为TIM2~7提供时钟,而且还要 为其它外设提供时钟;设置这个倍频器可以在保证其 它外设使用较低时钟频率时,TIM2~7仍能得到较高的 时钟频率。