266 lines
8.1 KiB
C
266 lines
8.1 KiB
C
![]() |
#include "./SYSTEM/sys/sys.h"
|
|||
|
#include "./SYSTEM/delay/delay.h"
|
|||
|
|
|||
|
|
|||
|
static uint32_t g_fac_us = 0; /* us<75><73>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>SYS_SUPPORT_OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,˵<><CBB5>Ҫ֧<D2AA><D6A7>OS<4F><53>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UCOS) */
|
|||
|
#if SYS_SUPPORT_OS
|
|||
|
|
|||
|
/* <20><><EFBFBD>ӹ<EFBFBD><D3B9><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> ( ucos<6F><73>Ҫ<EFBFBD>õ<EFBFBD>) */
|
|||
|
#include "includes.h"
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>g_fac_ms<6D><73><EFBFBD><EFBFBD>, <20><>ʾms<6D><73>ʱ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ms<6D><73>, (<28><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>os<6F><73>ʱ<EFBFBD><CAB1>,<2C><>Ҫ<EFBFBD>õ<EFBFBD>) */
|
|||
|
static uint16_t g_fac_ms = 0;
|
|||
|
|
|||
|
/*
|
|||
|
* <EFBFBD><EFBFBD>delay_us/delay_ms<EFBFBD><EFBFBD>Ҫ֧<EFBFBD><EFBFBD>OS<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS<EFBFBD><EFBFBD><EFBFBD>صĺ궨<EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><EFBFBD><EFBFBD>궨<EFBFBD><EFBFBD>:
|
|||
|
* delay_osrunning :<EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD>ʾOS<EFBFBD><EFBFBD>ǰ<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD>Ծ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* delay_ostickspersec:<EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD>ʾOS<EFBFBD>趨<EFBFBD><EFBFBD>ʱ<EFBFBD>ӽ<EFBFBD><EFBFBD><EFBFBD>,delay_init<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>systick
|
|||
|
* delay_osintnesting :<EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD>ʾOS<EFBFBD>ж<EFBFBD>Ƕ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>Ϊ<EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD>治<EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD>,delay_msʹ<EFBFBD>øò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
|||
|
* delay_osschedlock :<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* delay_osschedunlock:<EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD>OS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* delay_ostimedly :<EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS<EFBFBD><EFBFBD>ʱ,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
*
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><EFBFBD><EFBFBD>UCOSII<EFBFBD><EFBFBD>UCOSIII<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>вο<EFBFBD><EFBFBD><EFBFBD>ֲ
|
|||
|
*/
|
|||
|
|
|||
|
/* ֧<><D6A7>UCOSII */
|
|||
|
#ifdef OS_CRITICAL_METHOD /* OS_CRITICAL_METHOD<4F><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,˵<><CBB5>Ҫ֧<D2AA><D6A7>UCOSII */
|
|||
|
#define delay_osrunning OSRunning /* OS<4F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>,0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define delay_ostickspersec OS_TICKS_PER_SEC /* OSʱ<53>ӽ<EFBFBD><D3BD><EFBFBD>,<2C><>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD> */
|
|||
|
#define delay_osintnesting OSIntNesting /* <20>ж<EFBFBD>Ƕ<EFBFBD><EFBFBD><D7BC><EFBFBD>,<2C><><EFBFBD>ж<EFBFBD>Ƕ<EFBFBD>״<EFBFBD><D7B4><EFBFBD> */
|
|||
|
#endif
|
|||
|
|
|||
|
/* ֧<><D6A7>UCOSIII */
|
|||
|
#ifdef CPU_CFG_CRITICAL_METHOD /* CPU_CFG_CRITICAL_METHOD<4F><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,˵<><CBB5>Ҫ֧<D2AA><D6A7>UCOSIII */
|
|||
|
#define delay_osrunning OSRunning /* OS<4F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>,0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define delay_ostickspersec OSCfg_TickRate_Hz /* OSʱ<53>ӽ<EFBFBD><D3BD><EFBFBD>,<2C><>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD> */
|
|||
|
#define delay_osintnesting OSIntNestingCtr /* <20>ж<EFBFBD>Ƕ<EFBFBD><EFBFBD><D7BC><EFBFBD>,<2C><><EFBFBD>ж<EFBFBD>Ƕ<EFBFBD>״<EFBFBD><D7B4><EFBFBD> */
|
|||
|
#endif
|
|||
|
|
|||
|
/**
|
|||
|
* @brief us<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ,<EFBFBD>ر<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>us<EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>)
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void delay_osschedlock(void)
|
|||
|
{
|
|||
|
#ifdef CPU_CFG_CRITICAL_METHOD /* ʹ<><CAB9>UCOSIII */
|
|||
|
OS_ERR err;
|
|||
|
OSSchedLock(&err); /* UCOSIII<49>ķ<EFBFBD>ʽ,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>us<75><73>ʱ */
|
|||
|
#else /* <20><><EFBFBD><EFBFBD>UCOSII */
|
|||
|
OSSchedLock(); /* UCOSII<49>ķ<EFBFBD>ʽ,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>us<75><73>ʱ */
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief us<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ,<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void delay_osschedunlock(void)
|
|||
|
{
|
|||
|
#ifdef CPU_CFG_CRITICAL_METHOD /* ʹ<><CAB9>UCOSIII */
|
|||
|
OS_ERR err;
|
|||
|
OSSchedUnlock(&err); /* UCOSIII<49>ķ<EFBFBD>ʽ,<2C>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#else /* <20><><EFBFBD><EFBFBD>UCOSII */
|
|||
|
OSSchedUnlock(); /* UCOSII<49>ķ<EFBFBD>ʽ,<2C>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief us<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ,<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param ticks : <EFBFBD><EFBFBD>ʱ<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void delay_ostimedly(uint32_t ticks)
|
|||
|
{
|
|||
|
#ifdef CPU_CFG_CRITICAL_METHOD
|
|||
|
OS_ERR err;
|
|||
|
OSTimeDly(ticks, OS_OPT_TIME_PERIODIC, &err); /* UCOSIII<49><49>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
|
|||
|
#else
|
|||
|
OSTimeDly(ticks); /* UCOSII<49><49>ʱ */
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief systick<EFBFBD>жϷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ʹ<EFBFBD><EFBFBD>OSʱ<EFBFBD>õ<EFBFBD>
|
|||
|
* @param ticks : <EFBFBD><EFBFBD>ʱ<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void SysTick_Handler(void)
|
|||
|
{
|
|||
|
HAL_IncTick();
|
|||
|
if (delay_osrunning == 1) /* OS<4F><53>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>,<2C><>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ȴ<EFBFBD><C8B4><EFBFBD> */
|
|||
|
{
|
|||
|
OSIntEnter(); /* <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
|
|||
|
OSTimeTick(); /* <20><><EFBFBD><EFBFBD>ucos<6F><73>ʱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
OSIntExit(); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>ж<EFBFBD> */
|
|||
|
}
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ӳٺ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param sysclk: ϵͳʱ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>, <EFBFBD><EFBFBD>CPUƵ<EFBFBD><EFBFBD>(rcc_c_ck), 168MHz
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void delay_init(uint16_t sysclk)
|
|||
|
{
|
|||
|
#if SYS_SUPPORT_OS /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֧<D2AA><D6A7>OS */
|
|||
|
uint32_t reload;
|
|||
|
#endif
|
|||
|
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);/* SYSTICKʹ<4B><CAB9><EFBFBD>ⲿʱ<E2B2BF><CAB1>Դ,Ƶ<><C6B5>ΪHCLK */
|
|||
|
g_fac_us = sysclk; /* <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>OS,g_fac_us<75><73><EFBFBD><EFBFBD>Ҫʹ<D2AA><CAB9> */
|
|||
|
#if SYS_SUPPORT_OS /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֧<D2AA><D6A7>OS. */
|
|||
|
reload = sysclk; /* ÿ<><C3BF><EFBFBD>ӵļ<D3B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λΪM */
|
|||
|
reload *= 1000000 / delay_ostickspersec; /* <20><><EFBFBD><EFBFBD>delay_ostickspersec<65>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,reloadΪ24λ
|
|||
|
* <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:16777216,<EFBFBD><EFBFBD>168M<EFBFBD><EFBFBD>,Լ<EFBFBD><EFBFBD>0.09986s<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
g_fac_ms = 1000 / delay_ostickspersec; /* <20><><EFBFBD><EFBFBD>OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD>λ */
|
|||
|
SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; /* <20><><EFBFBD><EFBFBD>SYSTICK<43>ж<EFBFBD> */
|
|||
|
SysTick->LOAD = reload; /* ÿ1/delay_ostickspersec<65><63><EFBFBD>ж<EFBFBD>һ<EFBFBD><D2BB> */
|
|||
|
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; /* <20><><EFBFBD><EFBFBD>SYSTICK */
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
#if SYS_SUPPORT_OS /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֧<D2AA><D6A7>OS, <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD> */
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ʱnus
|
|||
|
* @param nus: Ҫ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>us<EFBFBD><EFBFBD>
|
|||
|
* @note nusȡֵ<EFBFBD><EFBFBD>Χ : 0 ~ 190887435us(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD> 2^32 / fac_us @fac_us = 21)
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void delay_us(uint32_t nus)
|
|||
|
{
|
|||
|
uint32_t ticks;
|
|||
|
uint32_t told, tnow, tcnt = 0;
|
|||
|
uint32_t reload = SysTick->LOAD; /* LOAD<41><44>ֵ */
|
|||
|
ticks = nus * g_fac_us; /* <20><>Ҫ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
delay_osschedlock(); /* <20><>ֹOS<4F><53><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>us<75><73>ʱ */
|
|||
|
told = SysTick->VAL; /* <20>ս<EFBFBD><D5BD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ֵ */
|
|||
|
while (1)
|
|||
|
{
|
|||
|
tnow = SysTick->VAL;
|
|||
|
if (tnow != told)
|
|||
|
{
|
|||
|
if (tnow < told)
|
|||
|
{
|
|||
|
tcnt += told - tnow; /* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>һ<EFBFBD><D2BB>SYSTICK<43><4B>һ<EFBFBD><D2BB><EFBFBD>ݼ<EFBFBD><DDBC>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
tcnt += reload - tnow + told;
|
|||
|
}
|
|||
|
told = tnow;
|
|||
|
if (tcnt >= ticks)
|
|||
|
{
|
|||
|
break; /* ʱ<>䳬<EFBFBD><E4B3AC>/<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ӳٵ<D3B3>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>˳<EFBFBD> */
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
delay_osschedunlock(); /* <20>ָ<EFBFBD>OS<4F><53><EFBFBD><EFBFBD> */
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ʱnms
|
|||
|
* @param nms: Ҫ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ms<EFBFBD><EFBFBD> (0< nms <= 65535)
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void delay_ms(uint16_t nms)
|
|||
|
{
|
|||
|
if (delay_osrunning && delay_osintnesting == 0) /* <20><><EFBFBD><EFBFBD>OS<4F>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>(<28>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>治<EFBFBD><E6B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */
|
|||
|
{
|
|||
|
if (nms >= g_fac_ms) /* <20><>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
{
|
|||
|
delay_ostimedly(nms / g_fac_ms); /* OS<4F><53>ʱ */
|
|||
|
}
|
|||
|
nms %= g_fac_ms; /* OS<4F>Ѿ<EFBFBD><D1BE><EFBFBD><DEB7>ṩ<EFBFBD><E1B9A9>ôС<C3B4><D0A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>ʽ<EFBFBD><CABD>ʱ */
|
|||
|
}
|
|||
|
delay_us((uint32_t)(nms * 1000)); /* <20><>ͨ<EFBFBD><CDA8>ʽ<EFBFBD><CABD>ʱ */
|
|||
|
}
|
|||
|
|
|||
|
#else /* <20><>ʹ<EFBFBD><CAB9>OSʱ, <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD> */
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ʱnus
|
|||
|
* @param nus: Ҫ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>us<EFBFBD><EFBFBD>.
|
|||
|
* @note nusȡֵ<EFBFBD><EFBFBD>Χ : 0~190887435(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD> 2^32 / fac_us @fac_us = 21)
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void delay_us(uint32_t nus)
|
|||
|
{
|
|||
|
uint32_t ticks;
|
|||
|
uint32_t told, tnow, tcnt = 0;
|
|||
|
uint32_t reload = SysTick->LOAD; /* LOAD<41><44>ֵ */
|
|||
|
ticks = nus * g_fac_us; /* <20><>Ҫ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
told = SysTick->VAL; /* <20>ս<EFBFBD><D5BD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ֵ */
|
|||
|
while (1)
|
|||
|
{
|
|||
|
tnow = SysTick->VAL;
|
|||
|
if (tnow != told)
|
|||
|
{
|
|||
|
if (tnow < told)
|
|||
|
{
|
|||
|
tcnt += told - tnow; /* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>һ<EFBFBD><D2BB>SYSTICK<43><4B>һ<EFBFBD><D2BB><EFBFBD>ݼ<EFBFBD><DDBC>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
tcnt += reload - tnow + told;
|
|||
|
}
|
|||
|
told = tnow;
|
|||
|
if (tcnt >= ticks)
|
|||
|
{
|
|||
|
break; /* ʱ<>䳬<EFBFBD><E4B3AC>/<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ӳٵ<D3B3>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>˳<EFBFBD> */
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ʱnms
|
|||
|
* @param nms: Ҫ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ms<EFBFBD><EFBFBD> (0< nms <= 65535)
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void delay_ms(uint16_t nms)
|
|||
|
{
|
|||
|
uint32_t repeat = nms / 540; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>540,<2C>ǿ<EFBFBD><C7BF>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ƵӦ<C6B5><D3A6>, <20><><EFBFBD><EFBFBD>248M<38><4D>ʱ<EFBFBD><CAB1>,delay_us<75><73><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ʱ541ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
uint32_t remain = nms % 540;
|
|||
|
|
|||
|
while (repeat)
|
|||
|
{
|
|||
|
delay_us(540 * 1000); /* <20><><EFBFBD><EFBFBD>delay_us ʵ<><CAB5> 540ms <20><>ʱ */
|
|||
|
repeat--;
|
|||
|
}
|
|||
|
|
|||
|
if (remain)
|
|||
|
{
|
|||
|
delay_us(remain * 1000); /* <20><><EFBFBD><EFBFBD>delay_us, <20><>β<EFBFBD><CEB2><EFBFBD><EFBFBD>ʱ(remain ms)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief HAL<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
|
|||
|
* @note HAL<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱĬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Systick<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>п<EFBFBD>Systick<EFBFBD><EFBFBD><EFBFBD>жϻᵼ<EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
|
|||
|
* @param Delay : Ҫ<EFBFBD><EFBFBD>ʱ<EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval None
|
|||
|
*/
|
|||
|
void HAL_Delay(uint32_t Delay)
|
|||
|
{
|
|||
|
delay_ms(Delay);
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|