• 大小: 6KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-28
  • 语言: 其他
  • 标签: delay.h  

资源简介

stm32 延迟的源代码 delay.h 包含 sys.h 使用时包含进工程目录

资源截图

代码片段和文件信息

#include “delay.h“
//////////////////////////////////////////////////////////////////////////////////   
//如果需要使用OS则包括下面的头文件即可.
#if SYSTEM_SUPPORT_OS
#include “includes.h“ //ucos 使用   
#endif
//////////////////////////////////////////////////////////////////////////////////  
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32开发板
//使用SysTick的普通计数模式对延迟进行管理(适合STM32F10x系列)
//包括delay_usdelay_ms
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2010/1/1
//版本:V1.7
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
//********************************************************************************
//V1.2修改说明
//修正了中断中调用出现死循环的错误
//防止延时不准确采用do while结构!
//V1.3修改说明
//增加了对UCOSII延时的支持.
//如果使用ucosIIdelay_init会自动设置SYSTICK的值使之与ucos的TICKS_PER_SEC对应.
//delay_ms和delay_us也进行了针对ucos的改造.
//delay_us可以在ucos下使用而且准确度很高更重要的是没有占用额外的定时器.
//delay_ms在ucos下可以当成OSTimeDly来用在未启动ucos时它采用delay_us实现从而准确延时
//可以用来初始化外设在启动了ucos之后delay_ms根据延时的长短选择OSTimeDly实现或者delay_us实现.
//V1.4修改说明 20110929
//修改了使用ucos但是ucos未启动的时候delay_ms中中断无法响应的bug.
//V1.5修改说明 20120902
//在delay_us加入ucos上锁,防止由于ucos打断delay_us的执行,可能导致的延时不准。
//V1.6修改说明 20150109
//在delay_ms加入OSLockNesting判断。
//V1.7修改说明 20150319
//修改OS支持方式以支持任意OS(不限于UCOSII和UCOSIII理论上任意OS都可以支持)
//添加:delay_osrunning/delay_ostickspersec/delay_osintnesting三个宏定义
//添加:delay_osschedlock/delay_osschedunlock/delay_ostimedly三个函数
//////////////////////////////////////////////////////////////////////////////////  

static u8  fac_us=0; //us延时倍乘数    
static u16 fac_ms=0; //ms延时倍乘数在ucos下代表每个节拍的ms数


#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS定义了说明要支持OS了(不限于UCOS).
//当delay_us/delay_ms需要支持OS的时候需要三个与OS相关的宏定义和函数来支持
//首先是3个宏定义:
//    delay_osrunning:用于表示OS当前是否正在运行以决定是否可以使用相关函数
//delay_ostickspersec:用于表示OS设定的时钟节拍delay_init将根据这个参数来初始哈systick
// delay_osintnesting:用于表示OS中断嵌套级别因为中断里面不可以调度delay_ms使用该参数来决定如何运行
//然后是3个函数:
//  delay_osschedlock:用于锁定OS任务调度禁止调度
//delay_osschedunlock:用于解锁OS任务调度重新开启调度
//    delay_ostimedly:用于OS延时可以引起任务调度.

//本例程仅作UCOSII和UCOSIII的支持其他OS请自行参考着移植
//支持UCOSII
#ifdef  OS_CRITICAL_METHOD //OS_CRITICAL_METHOD定义了说明要支持UCOSII
#define delay_osrunning OSRunning //OS是否运行标记0不运行;1在运行
#define delay_ostickspersec OS_TICKS_PER_SEC //OS时钟节拍即每秒调度次数
#define delay_osintnesting  OSIntNesting //中断嵌套级别即中断嵌套次数
#endif

//支持UCOSIII
#ifdef  CPU_CFG_CRITICAL_METHOD //CPU_CFG_CRITICAL_METHOD定义了说明要支持UCOSIII
#define delay_osrunning OSRunning //OS是否运行标记0不运行;1在运行
#define delay_tickspersec OSCfg_TickRate_Hz //OS时钟节拍即每秒调度次数
#define delay_intnesting  OSIntNestingCtr //中断嵌套级别即中断嵌套次数
#endif


//us级延时时关闭任务调度(防止打断us级延迟)
void delay_osschedlock(void)
{
#ifdef CPU_CFG_CRITICAL_METHOD    //使用UCOSIII
OS_ERR err; 
OSSchedLock(&err); //UCOSIII的方式禁止调度,防止打断us延时
#else //否则UCOSII
OSSchedLock(); //UCOSII的方式禁止调度,防止打断us延时
#endif
}

//us级延时时恢复任务调度
void delay_osschedunlock(void)
{
#ifdef CPU_CFG_CRITIC

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        7681  2015-03-23 15:40  stm32 delay.h 延时文件\delay.c
     文件        1837  2019-01-15 23:10  stm32 delay.h 延时文件\delay.h
     文件         876  2015-03-12 20:20  stm32 delay.h 延时文件\sys.c
     文件        2804  2019-01-15 23:13  stm32 delay.h 延时文件\sys.h
     目录           0  2019-01-17 17:47  stm32 delay.h 延时文件\

评论

共有 条评论