找回密码
 立即注册
首页 业界区 安全 systick clock init 滴答时钟

systick clock init 滴答时钟

苗嘉惠 2025-11-21 11:30:04
滴答时钟初始化,定义us级延时
1.png

2.png

SysTick 属于内核的外设,有关的寄存器定义和库函数都在内核相关的库文件core_cm4.h中。SysTick定时器的计数器是向下递减计数的,随时按照
SysTick->CTRL |= 0x05;这里所选择时基时钟的计数频率,当向下计数到0,时,SysTick->LOAD计数值会自动重装载到寄存器上,继续计数
点击查看代码

点击查看代码[code]#define RCC_PLL_SYSCLK  /*system clock*/#define SYS_CLK                        /*Define the us count value */volatile uint32_t time_tick;/*systick clock initialization */void SYSTICK_CLOCK_init (void){    uint32_t Reload_Value = (RCC_PLL_SYSCLK/1000) - 1;    SysTick->LOAD = Reload_Value;    SysTick->VAL = 0;    // NVIC_SetPriority(SysTick_IRQn, (1UL CTRL |= 0x05; /*Select the system clock enable systick */}/*"Us-level delay" */void delay_us(uint32_t nus){                        uint32_t ticks;        uint32_t told,tnow,tcnt=0;        uint32_t reload=SysTick->LOAD;                /*Calculate the counting time period */        ticks=nus*SYS_CLK;                                                         told=SysTick->VAL;                                                while(1)        {                tnow=SysTick->VAL;                        if(tnow!=told)                {                                    if(tnow=ticks)break;                                        }          }}/*"Ms-level delay" */void delay_ms(uint16_t nms){        uint32_t i;        for(i=0;iVAL寄存器的计数值,通过计算前后是否达到计数要求,满足要定义的时间要求,理论上可达10ns级延时,但是感觉也没啥用,另外不建议打开systck中断,这个中断通过时基定义1ms进入一次中断,频繁的进入退出中断可能加大总线占用,打开也无所谓,也不差这点,但是如只为了延时则关了好点</p>
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册