资源简介
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 延时文件\
- 上一篇:马赛克去除
- 下一篇:dseo13b.exe
评论
共有 条评论