当前位置:首页 > 问问

stm32分频是什么 “关于STM32的时钟分频”

1、stm32分频的概念

stm32分频是将输入的时钟信号按照一定的比例分频,以达到控制时钟频率的目的。在stm32单片机中,每个定时器都有自己的时钟源,同时还可以通过寄存器设置分频系数以调整定时器的时钟频率。

定时器的时钟源有两种:内部时钟源和外部时钟源。通过外部时钟源,定时器的时钟频率可以达到更高,但需要外部硬件支持。

2、分频系数的设置

在stm32单片机中,通过特定的寄存器设置分频系数,分频系数越大,时钟频率越低。具体的分频系数设置方法因具体型号而异,一般是在输入捕获或者输出比较功能的初始化代码中进行设置。

以STM32F103为例,设置TIM3的时钟源为72MHz内部时钟源,分频系数为7199(PSC = 7199,ARR = 999),则TIM3的时钟频率为72000Hz。如下代码片段:

TIM_TimeBaseInitTypeDef tim;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

TIM_TimeBaseStructInit(&tim);

tim.TIM_Period = 999;

tim.TIM_Prescaler = 7199;

tim.TIM_ClockDivision = 0;

tim.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM3, &tim);

3、定时器的使用

在stm32单片机中,通过定时器可以实现延时、定时中断等功能。定时器在实际应用中十分重要,需要在初始化之后进行启动和配置,并设置相关的中断处理函数。

以定时1s为例,使用TIM3进行定时器配置和启动,设置定时器中断实现1s延迟,并触发中断执行中断服务程序:

void TIM3_IRQHandler(void)

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

{

TIM_ClearFlag(TIM3, TIM_FLAG_Update);

// 中断服务代码

}

int main()

TIM_TimeBaseInitTypeDef tim;

NVIC_InitTypeDef nvic;

// 时钟源及分频系数设置

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

TIM_TimeBaseStructInit(&tim);

tim.TIM_Period = 999;

tim.TIM_Prescaler = 7199;

tim.TIM_ClockDivision = 0;

tim.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM3, &tim);

// 定时器中断配置

TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);

nvic.NVIC_IRQChannel = TIM3_IRQn;

nvic.NVIC_IRQChannelPreemptionPriority = 0;

nvic.NVIC_IRQChannelSubPriority = 0;

nvic.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&nvic);

// 定时器启动

TIM_Cmd(TIM3, ENABLE);

// 主循环

while(1);

return 0;

4、分频与功耗

在实际应用中,为了降低系统功耗,需要选择最小的分频系数。分频系数越小,时钟频率越高,系统运行速度也就越快,相应的功耗也就越高。选择合理的分频系数,可以在不影响系统运行速度的情况下尽量节省系统功耗。

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com
标签:

  • 关注微信

相关文章