STM32的精确延时
Posted liguangsunls
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32的精确延时相关的知识,希望对你有一定的参考价值。
/*---------------------------------------------------------- 文件名:systick.c 文件描写叙述:sysTick 系统滴答时钟1us中断函数库。中断时间可自由配置 备注:程序默认使用72M时钟,无分频 -----------------------------------------------------------------*/ #include "delay.h" static __IO u32 TimingDelay; /*----------------------------------------------------------------------- 程序名称:systick Init 程序描写叙述:启动系统滴答定时器 systick 输入參数:无 返回參数:无 备注: 使用此功能之前须要调用此函数。初始化寄存器等參数 ----------------------------------------------------------*/ void SysTick_Init(void) { //SystemFrequency /1000 1ms中断一次 //SystemFrequency /100000 10us中断一次 //SystemFrequency /1000000 1us中断一次 if(SysTick_Config(SystemCoreClock /1000000)) //1us { /*Caputure error*/ while(1); } } /*--------------------------------------------- 程序名称:Delay_us 程序描写叙述:延时nTime us 输入參数:nTime 返回參数:无 备注: 无 -----------------------------------------------*/ void Delay_us(__IO u32 nTime) { TimingDelay = nTime; while(TimingDelay != 0); } /*-------------------------------------------------- 程序名称:TimingDelay_Decrement 程序描写叙述:数字递减到0 输入參数:无 返回參数:无 备注: 须要中断函数SysTick_Handle()中调用 ---------------------------------------------------------*/ void TimingDelay_Decrement(void) { if(TimingDelay != 0x00) { TimingDelay--; } }
在学习的时候发现,延时是错误的,由于这里的要是要依赖于系统的时钟所以在中断函数中要增加
<pre name="code" class="cpp">SysTick_Handle()
/** * @brief This function handles SysTick Handler. * @param None * @retval None */ void SysTick_Handler(void) { <span style="white-space:pre"> </span>TimingDelay_Decrement(); }
以上是关于STM32的精确延时的主要内容,如果未能解决你的问题,请参考以下文章
STM32 不占用定时器(包括SysTick)实现精确延时(巧用DWT)
STM32 FreeRTOS中延时可以用vTaskDelay,但是计时,定时该如何实现?