×
单片机 > 单片机程序设计 > 详情

stm32f103 学习笔记 —— 05 使用SysTick实现硬件延时

发布时间:2020-08-31 发布时间:
|

SysTick定时时间计算(当系统时钟为72M时)

t =重载*(1 / Clk)


Clk = 72M时,t =(72)*(1 / 72M)= 1 us


Clk = 72M时,t =(72000)*(1 / 72M)= 1ms


1s = 1000ms = 1000 000 us = 100 000 000 ns


当系统定时器中断与外设中断进行优先级比较时,只需要把内核外设的中断优先级的四个位按照外设的中断优先级来分组解析即可,即人为的分出抢占优先级和子优先级

SysTick_Config()函数

//这个固件库函数在core_com3.h中

静态__INLINE uint32_t SysTick_Config(uint32_t ticks)


//重载寄存器为24位,最大值为2 ^ 24

  如果(滴答> SysTick_LOAD_RELOAD_Msk)返回(1);           

  

//配置重装寄存器的初始值

        SysTick-> LOAD =(ticks&SysTick_LOAD_RELOAD_Msk) -  1;      

  

//配置中断优先级为15,优先级为最低

NVIC_SetPriority(SysTick_IRQn,(1 << __ NVIC_PRIO_BITS) -  1);

  

//配置计数器计数器的值

SysTick-> VAL = 0;   

  //配置系统定时器的时钟为72M

  //使能中断

  //使能系统定时器

  SysTick-> CTRL = SysTick_CTRL_CLKSOURCE_Msk | 

                   SysTick_CTRL_TICKINT_Msk | 

                   SysTick_CTRL_ENABLE_Msk;                   

  返回(0);                                                 

}

延时函数(软件检测 - 判断计数器的数值)

void SysTick_Delay_us(uint32_t us)

{

我uint32_t我;

SysTick_Config(72);

对于(I = 0; I

{

while(!((SysTick-> CTRL)&(1 << 16)));

}

SysTick-> CTRL&=〜SysTick_CTRL_ENABLE_Msk;

}

延时函数(利用中断服务函数)

静态__IO u32 TimingDelay;

 

/ **

  * @brief启动系统滴答定时器SysTick

  * @param无

  * @retval无

  * /

void SysTick_Init(void)

{

/ * SystemFre * quency / 1000 1ms中断一次

* SystemFrequency / 100000 10us中断一次

* SystemFrequency / 1000000 1us中断一次

* /

//如果(SysTick_Config(SystemFrequency / 100000))// ST3.0.0库版本

如果(SysTick_Config(SystemCoreClock / 100000))// ST3.5.0库版本

/ *捕捉错误* / 

而(1);

}

}

/ **

  * @brief us延时程序,10us为一个单位

  * @参数  

  * @arg nTime:Delay_us(1)则实现的延时为1 * 10us = 10us

  * @retval无

  * /

void Delay_us(__ IO u32 nTime)

TimingDelay = nTime;

//使能滴答定时器  

SysTick-> CTRL | = SysTick_CTRL_ENABLE_Msk;

while(TimingDelay!= 0);

}

/ **

  * @brief获取节拍程序

  * @param无

  * @retval无

  * @注意在SysTick中断函数SysTick_Handler()调用

  * /

void TimingDelay_Decrement(void)

{

如果(TimingDelay!= 0x00)

TimingDelay--;

}

}


关键字:stm32f103  SysTick  硬件延时 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多