STM32白话文教程延迟函数

Posted 404detective

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32白话文教程延迟函数相关的知识,希望对你有一定的参考价值。

我们只需要配置好delay.c delay.h
今后使用延迟,只需要用delay_ms(此处填毫秒数)即可

这个其实没啥必要出教程。
主要是之前踩了一个坑,我用的那套例程
"stm32f10x_it.h"里重定义了systick_hanlder()函数

当时好像是导致烧了程序没反应卡死,要不就是报了重定义的错,绕了个弯路。

就篇就这样水了吧~

/*-----------------------
文件名称:delay.c
-------------------------*/
#include "delay.h"

static __IO u32 TimingDelay;

void delay_Init(void)
{
	 // SystemFrequency / 1000     1ms中断一次
	 // SystemFrequency / 1000000  1us中断一次
	 
	if (SysTick_Config(SystemCoreClock / 1000000))	// 采用1us一次是因为更精准 你当然可以选择除不同系数
	{ 
		/* Capture error */ 
		//如果初始化失败会进入此处 成功返回0 不会进入
		//一般不会错的 错了你也解决不了 你删了if花括号里的东西也没问题
		while (1);
	}
}

void Delay_us(__IO u32 nTime)    //单位10us
{ 
	TimingDelay = nTime;	
	while(TimingDelay != 0);
}

/*-------------------------------------------------------------------------------
程序名称:TimingDelay_Decrement
程序描述:数字递减直到0  
备    注:需要在中断函数SysTick_Handler()中调用
---------------------------------------------------------------------------------*/

void TimingDelay_Decrement(void)
{
	if (TimingDelay != 0x00)
	{ 
	TimingDelay--;
	}
}

记得把"stm32f10x_it.h"里的systick_hanlder注释掉!

void SysTick_Handler(void)
{
	TimingDelay_Decrement();
}
/*-----------------------
文件名称:Delay.h
-------------------------*/
#ifndef __delay_H
#define __delay_H

#include "stm32f10x.h"

#define delay_ms(x) delay_us(1000*x)//单位ms

void delay_Init(void);

#endif

以上是关于STM32白话文教程延迟函数的主要内容,如果未能解决你的问题,请参考以下文章

STM32白话文教程内置按键模块外接按键检测 三句话让你玩明白按键 水银倾斜模块

STM32H7的DSP教程第41章 FIR滤波器的群延迟(重要)

STM32F429的DSP教程第41章 FIR滤波器的群延迟(重要)

STM32F407的DSP教程第41章 FIR滤波器的群延迟(重要)

STM32 FreeRTOS - UART延迟中断问题

STM32学习之路-SysTick的应用(时间延迟)