STM32利用滴答定时器实现高精度延时(在DHT11温湿度传感器中的应用)

SysTick 定时器延时

CM3 内核的处理器,内部包含了一个SysTick 定时器,SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。下面是.c和.h文件中的代码

#include "bsp_SysTick.h"

static __IO u32 TimingDelay;
 
/**
  * @brief  Æô¶¯ÏµÍ³µÎ´ð¶¨Ê±Æ÷ SysTick
  * @param  ÎÞ
  * @retval ÎÞ
  */
void SysTick_Init(void)
{
	/* SystemFrequency / 1000    1msÖжÏÒ»´Î
	 * SystemFrequency / 100000	 10usÖжÏÒ»´Î
	 * SystemFrequency / 1000000 1usÖжÏÒ»´Î
	 */
	if (HAL_SYSTICK_Config(SystemCoreClock / 1000000))
	{ 
		/* Capture error */ 
		while (1);
	}
}

/**
  * @brief   usÑÓʱ³ÌÐò,10usΪһ¸öµ¥Î»
  * @param  
  *		@arg nTime: Delay_us( 1 ) ÔòʵÏÖµÄÑÓʱΪ 1 * 10us = 10us
  * @retval  ÎÞ
  */
void Delay_us(__IO u32 nTime)
{ 
	TimingDelay = nTime;	

	while(TimingDelay != 0);
}

/**
  * @brief  »ñÈ¡½ÚÅijÌÐò
  * @param  ÎÞ
  * @retval ÎÞ
  * @attention  ÔÚ SysTick ÖжϺ¯Êý SysTick_Handler()µ÷ÓÃ
  */
void TimingDelay_Decrement(void)
{
	if (TimingDelay != 0x00)
	{ 
		TimingDelay--;
	}
}
#ifndef __SYSTICK_H
#define __SYSTICK_H

#include "stm32f1xx.h"

typedef uint32_t  u32;

void SysTick_Init(void);
void Delay_us(__IO u32 nTime);
#define Delay_ms(x) Delay_us(1000*x)	 //µ¥Î»ms

#endif /* __SYSTICK_H */


如果要使用的话需要将TimingDelay_Decrement函数添加到滴答定时器的中断里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值