历史上的今天
今天是:2025年03月07日(星期五)
2018年03月07日 | STM32 延时函数封装程序
2018-03-07 来源:eefocus
/*---------------------------------
延时模块函数
说明:只需在工程中加入delay.c和delay.h
文件,即可用 Delayms(__IO uint32_t nTime);
Delayus(__IO uint32_t nTime)
-----------------------------------*/
#ifndef __DELAY_H
#define __DELAY_H
#include "stm32f10x.h"
/*---------------------------------
描 述:参数1即为1ms,1000即为1s;只有几
us的误差;
-----------------------------------*/
extern void Delayms(__IO uint32_t nTime);
/*---------------------------------
描 述:参数1即为1us,1000即为1ms;只有几
us的误差;
-----------------------------------*/
extern void Delayus(__IO uint32_t nTime);
/*---------------------------------
函数名:延时调整形式的delaynus函数,
描 述:参数1即为1us,1000即为1ms;
-----------------------------------*/
extern void delay_nus(unsigned long n);
/*---------------------------------
函数名:延时调整形式的delaynms函数,
描 述:参数1即为1ms,1000即为1s;
-----------------------------------*/
extern void delay_nms(unsigned long n);
#endif
C 函数
/*---------------------------------
延时模块函数
说明:只需在工程中加入delay.c和delay.h
文件,即可用 Delayms(__IO uint32_t nTime);
Delayus(__IO uint32_t nTime)
-----------------------------------*/
#include"delay.h"
statIC __IO uint32_t TimingDelay;
/* Private function prototypes -----------------------------------------------*/
/*---------------------------------
函数名:ms延时函数
描 述:参数1即为1ms,1000即为1s;只有几
us的误差;
-----------------------------------*/
void Delayms(__IO uint32_t nTime)
{
while(SysTick_Config(SystEMCoreCLOCk/1000));
TimingDelay = nTime;
while(TimingDelay != 0);
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
/*---------------------------------
函数名:us延时函数
描 述:参数1即为1us,1000即为1ms;只有几
us的误差;
-----------------------------------*/
void Delayus(__IO uint32_t nTime)
{
while(SysTick_Config(SystEMCoreClock/1000000));
TimingDelay = nTime;
while(TimingDelay != 0);
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
/*---------------------------------
函数名:延时辅助函数
描 述:
-----------------------------------*/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
/*---------------------------------
函数名:systick的中断函数
描 述:参数1即为1us,1000即为1ms;只有几
us的误差;
-----------------------------------*/
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
/*---------------------------------
函数名:延时调整形式的delaynus函数,
描 述:参数1即为1us,1000即为1ms;
-----------------------------------*/
void delay_nus(unsigned long n)
{
unsigned long j;
while(n--)
{
j=12;
while(j--);
}
}
/*---------------------------------
函数名:延时调整形式的delaynms函数,
描 述:参数1即为1ms,1000即为1s;
-----------------------------------*/
void delay_nms(unsigned long n)
{
while(n--)
delay_nus(1030);
}
上一篇:STM32 矩阵键盘扫描程序
下一篇:STM32模拟IIC程序
史海拾趣
|
Renesas单片机前身是三菱和日立单片机的联盟。因此每年出货量全球第一位。 设计了一块对此单片机的评估板,也可以说是一块开发板。(板子已经在制版,焊接好发图片,下周五之前) 因为不涉及公司机密,将在这个帖子里面发布我的所有资料。只是可惜 ...… 查看全部问答> |
|
请教各位DX: 我现在通过修改interface来实现自己设计的界面,由于修改了视频显示区域,所以原有视频显示不正常,有拉伸,如何修改原有视频数据,达到正常的缩放显示效果。… 查看全部问答> |
|
老师给了一个任务要做串口通讯,但是所给的开发板老师说只有一个串口,所以在应用程序通讯的时候要先关闭wince的调试串口,但是我找遍所有的资料好像都没有写到怎么关闭那个调试串口,天极网有个wince的精华贴,说通过修改内核注释掉初始化串口的那 ...… 查看全部问答> |
|
using System.Data.SqlServerCe 我在EVC下使用using System.Data.SqlServerCe和SqlCeEngine, 编译提示:undeclared identifier! 请问该如何解决? 在EVC下是如何:压缩数据库sdf文件的! 感激不尽,零表涕蔹!… 查看全部问答> |
|
我两块板上电了,设备管理器上也有显示,说明驱动也安装了。但是在debug时,弹出的选择目标(target selection)中是空白的。!!!! 那个对话框下面就写着 a target connot be selected wh ...… 查看全部问答> |




