STM32的精确延时

来源:互联网 发布:网络诈骗安全选择题 编辑:程序博客网 时间:2024/04/20 06:37
/*----------------------------------------------------------文件名称: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();}
0 1