C语言
您现在所在的位置:首页>企业动态>C语言

STM32系统时钟定时器

编辑:学到牛牛IT培训    发布日期: 2023-07-28 10:47:02  


时钟系统是 CPU 的脉搏,就像人的心跳一样,所以时钟系统的重要性就不言而喻了。STM32F4有5个最重要的时钟源,分别为HSI(高速内部时钟)、HSE(高速外部时钟)、LSI(低速内部时钟)、LSE(低速外部时钟)、PLL(锁相环倍频输出)。在这 5 个中 HSI,HSE 以及 PLL 是高速时钟,LSI 和 LSE 是低速时钟。从来源可分为外部时钟源和内部时钟源,外部时钟源就是从外部通过外接晶振的方式获取时钟源,其中 HSE 和LSE 是外部时钟源,其他的是内部时钟源。

SysTick,系统定时器是属于CM4内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数器,计数器每计数一次的时间为1/SYSCLK。在STM32F407芯片一般我们设置系统时钟SYSCLK等于168MHz。当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环往复。


SysTick有4个寄存器,分别为CTRL控制级状态寄存器,LOAD重装载数值寄存器,VAL当前数值寄存器,CALIB校准数值寄存器。


1.png


SysTick属于内核的外设,有关寄存器定义和库函数都在内核相关的库文件core_cm4.h中。

使用SysTick_Config(uint32_t ticks) 中,ticks来设置重装载寄存器的值,当值被递减到0时,产生中断。该函数主要配置了SysTick中的LOAD、VAL、CTRL三个寄存器,同时也配置了系统定时器的中断优先级。

以下代码是通过系统时钟定时器中断方式,完成一个较为精准的延时函数。

void SysTick_Init( void )

{

while( SysTick_Config( SystemCoreClock / 1000000 ) )

;

}


volatile unsigned int Num;


void SysTick_Handler(void)

{

Num--;

}


void delay_us( int val )

{

Num = val;

while( Num )

;

}


void delay_ms( int val )

{

delay_us( 1000 * val );

}


免费试学
课程好不好,不如实地听一听

封闭学习

2

1

联系我们

电话:028-61775817

邮箱:1572396657@qq.com

地址:成都市金牛区西城国际A座8楼

  • 扫一扫,免费咨询

  • 微信公众号

学一流技术,找高薪工作

7-24小时服务热线:

028-61775817

版权声明 网站地图

蜀ICP备2021001672号

课程问题轻松问