/** ****************************************************************************** * @file tim.c * @author Jerry * @version V2.1 * @date 19-April-2022 * @brief tim program body. ****************************************************************************** * @attention * * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x.h" #include "global.h" //相对精确的ms延时,不使用中断 //优化:防止和其他中断冲突,导致卡死 void delay_ms(uint16_t ms) { uint16_t i; volatile uint32_t tempreg; uint32_t timeout; //等待时间 for(i=0; iCTRL |= SysTick_CTRL_CLKSOURCE_Msk; SysTick->LOAD = 72000 - 1; SysTick->VAL = 0; SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; timeout = 72000; do { tempreg = SysTick->CTRL; timeout--; if(timeout == 0) { break; //超时退出 } } while( (tempreg & SysTick_CTRL_COUNTFLAG_Msk) ==0); SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->VAL = 0; } } //相对精确的us延时,不使用中断 //(没调用过) void delay_us(uint16_t us) { uint16_t i; volatile uint32_t tempreg; for(i=0; iCTRL |= SysTick_CTRL_CLKSOURCE_Msk; SysTick->LOAD = 72; SysTick->VAL = 0; SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; do { tempreg = SysTick->CTRL; } while( (tempreg & SysTick_CTRL_COUNTFLAG_Msk) ==0); SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->VAL = 0; } }