123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #include "ALL_Includes.h"
- #include "delay.h"
- u16 fac_ms;//全局变量
- u8 fac_us;//全局变量
- /****************************************************
- 函数功能:ms级延时
- 输入参数:nms : 毫秒
- 输出参数:无
- 备 注:调用此函数前,需要初始化Delay_Init()函数
- *****************************************************/
- void delay_ms(u16 nms)
- {
- SysTick->LOAD = (u32)fac_ms*nms-1;//加载时间值
- SysTick->VAL = 1;//随便写个值,清除加载寄存器的值
- SysTick->CTRL |= BIT(0);//SysTick使能
- while(!(SysTick->CTRL&(1<<16)));//判断是否减到0
- SysTick->CTRL &=~BIT(0);//关闭SysTick
- }
- /****************************************************
- 函数功能:延时初始化
- 输入参数:SYSCLK : 系统时钟(72)MHZ
- 输出参数:无
- 备 注:无
- *****************************************************/
- void Delay_Init(u8 SYSCLK)
- {
- SysTick->CTRL &= BIT(2);//选择外部时钟
- SysTick->CTRL &=~BIT(1);//关闭定时器减到0后的中断请求
- fac_us = SYSCLK/8;//计算好SysTick加载值
- fac_ms = (u16)fac_us*1000;
- }
- /****************************************************
- 函数功能:us级延时
- 输入参数:nus : 微秒
- 输出参数:无
- 备 注:调用此函数前,需要初始化Delay_Init()函数
- *****************************************************/
- void delay_us(u32 nus)
- {
- SysTick->LOAD = (u32)fac_us*nus-1;//加载时间值
- SysTick->VAL = 1;//随便写个值,清除加载寄存器的值
- SysTick->CTRL |= BIT(0);//SysTick使能
- while(!(SysTick->CTRL&(1<<16)));//判断是否减到0
- SysTick->CTRL &=~BIT(0);//关闭SysTick
- }
- void delay_ms_(uint32_t t)
- {
- uint16_t i;
- for(;t>0;t--)
- for(i=12000;i>0;i--);
- }
|