STM32时钟频率相关知识

SysTick滴答定时器延时函数初始化

delayInit(72);
传入的实参72是指系统时钟 72MHz,即72000000。
使用此延时函数,必须在程序开始时先调用初始化函数。才能得到延时1us需要的 SysTick->LOAD寄存器值。
由函数delayInit(uint8_t SYSCLK)可知,systick时钟是由系统时钟8分频,也就是9000000。
facUs = 72/8 = 9

​sysTick时钟每震荡1次,计数寄存器 +1,震荡9次的时间是 9(1/9000000)就是1us时间。*
​然后程序中使用延时的时候直接调用,例如 delalyUs(100) 就延时100us,阻塞式延时。
在这里插入图片描述

定时器时钟频率

定时器的计数时钟频率是由代码中的预分频器值和自动重装值共同决定的。
如:预分频器的值为7199,自动重装值为49,因此定时器的计数时钟频率为:

计数时钟频率 = 系统时钟频率 / (预分频器 + 1) / (自动重装值 + 1)

在这里,假设系统时钟频率为72MHz,则计数时钟频率为:

计数时钟频率 = 72MHz / (7199 + 1) / (49 + 1) = 10kHz

因此,定时器的计数时钟频率为10kHz。

// 系统时钟频率为72MHz
void Timer1_Init()  
{  
	RCC->APB2ENR|=1<<11;//TIM1时钟使能    
 	TIM1->ARR=49;      //设定计数器自动重装值   
	TIM1->PSC=7199;      //预分频器7200,得到10Khz的计数时钟
	TIM1->DIER|=1<<0;   //允许更新中断				
	TIM1->DIER|=1<<6;   //允许触发中断	   
	TIM1->CR1|=0x01;    //使能定时器
	MY_NVIC_Init(1,3,TIM1_UP_IRQn,2);// TIM1_UP_IRQn:中断向量表中的中断号,其在中断向量表中的中断处理函数。
} 

根据代码中的设置,定时器1的计数器自动重装值为49,预分频器为7199,因此定时器1的计数时钟频率为10kHz。每当计数器计数到49时,就会产生一次定时器更新事件,触发定时器中断处理函数。因此,定时器1的中断处理函数的执行时间为每隔5ms执行一次(1/10kHz * 50 = 5ms)。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值