STM32 TIM预分频计数器

STM32的TIM预分频器功能是将输入时钟信号按分频系数分频,影响定时器的实际计数频率。例如,72M输入频率时,2分频后定时器计数频率为36M,定时器周期变为20ms。配置预分频器使用TIM_PrescalerConfig函数,参数包括TIM外设选择、预分频系数和预分频重载模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

预分频器:将送给TIM的输入时钟信号按照预分频器分频系数进行分频,然后再作为TIM的输入时钟。


例:当输入频率为72M,周期则是0.0138s,输入时钟每增加0.0138s,计数器增加一次;2分频时,周期为0.027s,输入时钟每增加0.027s,计数器增加一次,实际定时器计数频率为36M。即若原来定为10ms,改变预分频后,定时器为20ms。


函数TIM_PrescalerConfig


函数原型 void TIM_PrescalerConfig(TIM_TypeDef* TIMx, 

                                                           u16 Prescaler,

 

STM32F407微控制器中,TIM9是一个16位的通用定时器,它包含一个自动重载计数器,并且可以通过一个可编程预分频器来调整其时钟频率[^2]。要配置TIM9定时器进行分频操作,需要设置预分频寄存器TIMx_PSC),这个寄存器决定了输入到计数器的时钟信号是如何被分频的。 以下是一般步骤来配置STM32F407上的TIM9定时器以实现分频操作: ### 配置步骤 1. **使能定时器时钟**:首先,需要在RCC_APB2ENR寄存器中启用TIM9的时钟。这是因为只有当外设时钟被使能后,才能访问对应的外设寄存器。 2. **初始化TIM9控制寄存器1 (TIMx_CR1)**:设置TIM9的计数模式,比如向上计数、向下计数或中央对齐模式。对于简单的分频应用,通常使用向上计数模式。 3. **设置预分频寄存器 (TIMx_PSC)**:这是关键步骤,用于设定分频比。预分频值是相对于系统时钟而言的,实际的分频系数为PSC+1。例如,如果希望将定时器时钟频率除以1000,则应将PSC设置为999。 4. **设置自动重载寄存器 (TIMx_ARR)**:虽然对于单纯的分频操作来说这一步不是必须的,但如果希望定时器产生周期性的中断或者事件,就需要配置ARR来定义计数器的最大值。 5. **更新事件和中断使能**:如果需要在每次计数器达到ARR值时触发中断,则需要在DMA/中断使能寄存器(TIMx_DIER)中使能更新中断。 6. **启动定时器**:最后,在TIMx_CR1寄存器中设置计数器使能位来启动定时器。 ### 示例代码 下面是一个基于标准外设库的示例代码片段,展示如何配置TIM9进行分频操作: ```c // 包含头文件 #include "stm32f4xx.h" void TIM9_Config(void) { // 1. 使能TIM9时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9, ENABLE); // 2. 初始化TIM9结构体 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // 3. 设置预分频寄存器 TIM_TimeBaseStructure.TIM_Prescaler = 83; // 假设系统时钟为84MHz, 分频至1MHz // 4. 设置计数模式 TIM_TimeBaseStructure.TIM_Period = 0xFFFF; // 设置ARR的最大值 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 不使用时钟分割 // 5. 初始化TIM9 TIM_TimeBaseInit(TIM9, &TIM_TimeBaseStructure); // 6. 启动TIM9 TIM_Cmd(TIM9, ENABLE); } ``` 这段代码初始化了TIM9,并将其配置为向上计数模式,其中预分频值被设为83,这意味着系统时钟将被分频到大约1MHz(假设系统时钟为84MHz)。请注意,具体的数值可能根据实际的系统时钟频率进行调整。 ### 注意事项 - 在实际应用中,确保正确计算预分频值以获得所需的定时精度。 - 如果需要中断处理,还需配置NVIC并编写相应的中断服务程序。 - 使用CubeMX工具可以简化配置过程,通过图形界面选择定时器参数并生成初始化代码。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值