| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- #include "SysTick.h"
- #include "gd32e230x_conf.h"
- /*********************************************************************************************************
- * 宏定义
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 枚举结构体
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 内部变量定义
- *********************************************************************************************************/
- static __IO unsigned int s_iTimDelayCnt = 0;
- /*********************************************************************************************************
- * 内部函数声明
- *********************************************************************************************************/
- static void TimDelayDec(void); //延时计数
- /*********************************************************************************************************
- * 内部函数实现
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 函数名称:TimDelayDec
- * 函数功能:延时计数
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:在SysTick中断服务函数SysTick_Handler中调用
- *********************************************************************************************************/
- static void TimDelayDec(void)
- {
- if(s_iTimDelayCnt != 0) //延时计数器的数值不为0
- {
- s_iTimDelayCnt--; //延时计数器的数值减1
- }
- }
- /*********************************************************************************************************
- * 函数名称:SysTick_Handler
- * 函数功能:SysTick中断服务函数
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void SysTick_Handler(void)
- {
- TimDelayDec(); //延时计数函数
- }
- /*********************************************************************************************************
- * API函数实现
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 函数名称:InitSysTick
- * 函数功能:初始化SysTick模块
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:SystemCoreClock / 1000 1ms中断一次(计数1000次为1s,每计一次位1/1000s=1ms)
- * SystemCoreClock / 4000 0.25ms中断一次(计数4000次为1s,每计一次位1/4000s=0.25ms)
- * SystemCoreClock / 100000 10us中断一次(计数100000次为1s,每计一次位1/100000s=10us)
- * SystemCoreClock / 1000000 1us中断一次(计数1000000次为1s,每计一次位1/1000000s=1us)
- *********************************************************************************************************/
- void InitSysTick( void )
- {
- if (SysTick_Config(SystemCoreClock / 1000)) //配置系统滴答定时器1ms中断一次
- {
- while(1) //错误发生的情况下,进入死循环
- {
-
- }
- }
- }
- /*********************************************************************************************************
- * 函数名称:DelayNms
- * 函数功能:毫秒级延时函数
- * 输入参数:nms
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void DelayNms(__IO unsigned int nms)
- {
- s_iTimDelayCnt = nms; //将延时计数器s_iTimDelayCnt的数值赋为nms
-
- while(s_iTimDelayCnt != 0) //延时计数器的数值为0时,表示延时了nms,跳出while语句
- {
-
- }
- }
- /*********************************************************************************************************
- * 函数名称:DelayNus
- * 函数功能:微秒级延时函数
- * 输入参数:nus
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:经测试,100us和200us基本准确
- *********************************************************************************************************/
- void DelayNus(__IO unsigned int nus)
- {
- unsigned int s_iTimCnt = nus; //定义一个变量s_iTimCnt作为延时计数器,赋值为nus
- unsigned short i; //定义一个变量作为循环计数器
- while(s_iTimCnt != 0) //延时计数器s_iTimCnt的值不为0
- {
- for(i = 0; i < 3; i++) //空循环,产生延时功能
- {
-
- }
-
- s_iTimCnt--; //成功延时1us,变量s_iTimCnt减1
- }
- }
|