132 lines
3.0 KiB
C
132 lines
3.0 KiB
C
|
|
/*************************************
|
|||
|
|
time:
|
|||
|
|
auther:
|
|||
|
|
change:
|
|||
|
|
*************************************/
|
|||
|
|
#include "delay.h"
|
|||
|
|
#include "sys.h"
|
|||
|
|
#include "main.h"
|
|||
|
|
|
|||
|
|
static uint32_t fac_us = 0; //us<75><73>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//hal<61><6C><EFBFBD>ṩ<EFBFBD><E1B9A9>ms<6D><73>ʱ __weak void HAL_Delay(uint32_t Delay)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>us<75><73>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>delay_usΪus<75><73>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ӳٺ<EFBFBD><EFBFBD><EFBFBD>,SYSTICK<EFBFBD><EFBFBD>ʱ<EFBFBD>ӹ̶<EFBFBD>ΪAHBʱ<EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @param SYSCLK ϵͳʱ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD> 1us<EFBFBD><EFBFBD><EFBFBD><EFBFBD>fac_us<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @return void
|
|||
|
|
*/
|
|||
|
|
void delay_init(uint8_t SYSCLK)
|
|||
|
|
{
|
|||
|
|
//HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);//SysTickƵ<6B><C6B5>ΪHCLK
|
|||
|
|
fac_us = SYSCLK; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>OS,fac_us<75><73><EFBFBD><EFBFBD>Ҫʹ<D2AA><CAB9>
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>(us)<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @remark nus:0~190887435(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>2^32/fac_us@fac_us=22.5)
|
|||
|
|
*
|
|||
|
|
* @param nus <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @return void
|
|||
|
|
*/
|
|||
|
|
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 * fac_us; //<2F><>Ҫ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
told = SysTick->VAL; //<2F>ս<EFBFBD><D5BD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
|
|||
|
|
while(1)
|
|||
|
|
{
|
|||
|
|
tnow = SysTick->VAL;
|
|||
|
|
|
|||
|
|
if(tnow != told)
|
|||
|
|
{
|
|||
|
|
if(tnow < told)
|
|||
|
|
tcnt += told - tnow; //<2F><><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>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ms)<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @param nms <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ٺ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @return void
|
|||
|
|
*/
|
|||
|
|
void delay_ms(uint16_t nms)
|
|||
|
|
{
|
|||
|
|
uint32_t i;
|
|||
|
|
|
|||
|
|
for(i = 0; i < nms; i++) delay_us(1000);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//RCC_ClocksTypeDef RCC_Clockss;
|
|||
|
|
|
|||
|
|
//void delay_us(uint32_t time)
|
|||
|
|
//{
|
|||
|
|
// uint16_t i;
|
|||
|
|
// for (i = 2; i <( time*0.07); i++);
|
|||
|
|
// // for (i = 2; i <( time*0.082); i++);
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
//void delay_ms(uint32_t time)
|
|||
|
|
//{
|
|||
|
|
// uint32_t i,j;
|
|||
|
|
// for(i = time;i>0;i--)
|
|||
|
|
// for(j = 1220;j>0;j--);
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
////<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪCPUƵ<55><C6B5>
|
|||
|
|
//void DelayInit()
|
|||
|
|
//{
|
|||
|
|
// RCC_GetClocksFreq(&RCC_Clockss);
|
|||
|
|
|
|||
|
|
////<2F><><EFBFBD><EFBFBD>CYCCNT<4E><54><EFBFBD><EFBFBD>,<2C><><EFBFBD>Ѽ<EFBFBD><D1BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F2BFAABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cpuʱ<75>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>
|
|||
|
|
// DEM_CR |= DEM_CR_TRCENA;
|
|||
|
|
//// DWT_CYCCNT = 0u; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<D2AA><CAB9>CYCCNTʱע<CAB1>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// DWT_CR |= DWT_CR_CYCCNTENA;
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
// //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ҫ<EFBFBD><D2AA>ʱ<EFBFBD><CAB1><EFBFBD><CEA2><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//void Delayus(u32 usec)
|
|||
|
|
//{
|
|||
|
|
// u32 startts,endts,ts;
|
|||
|
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뺯<EFBFBD><EBBAAF>ʱ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
// startts = DWT_CYCCNT;
|
|||
|
|
// ts = (usec-5) * (RCC_Clockss.SYSCLK_Frequency /(1000*1000) ); //<2F><><EFBFBD><EFBFBD><EFBFBD>ﵽ<EFBFBD><EFB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱֵ<CAB1><D6B5>cpuʱ<75><CAB1><EFBFBD><EFBFBD>,^-^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ȷ<EFBFBD>˴<EFBFBD><CBB4><EFBFBD><EFBFBD>Լ<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// endts = startts + ts; //<2F><><EFBFBD><EFBFBD><EFBFBD>ﵽ<EFBFBD><EFB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD>DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>32bit<69><74><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ2<D6B5><32>32<33>η<EFBFBD>-1<><31><EFBFBD>Զ<EFBFBD><D4B6>ƻض<C6BB><D8B6><EFBFBD><EFBFBD><EFBFBD>λ
|
|||
|
|
// if(endts > startts) //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>ֵ<EFBFBD>߽<EFBFBD>
|
|||
|
|
// {
|
|||
|
|
// while(DWT_CYCCNT < endts); //<2F>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱֵ<CAB1><D6B5>cpuʱ<75><CAB1><EFBFBD><EFBFBD>ֵ
|
|||
|
|
// }
|
|||
|
|
// else
|
|||
|
|
// {
|
|||
|
|
// while(DWT_CYCCNT > endts); //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>32bit<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>2<EFBFBD><32>32<33>η<EFBFBD>-1
|
|||
|
|
// while(DWT_CYCCNT < endts); //<2F>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱֵ<CAB1><D6B5>cpuʱ<75><CAB1><EFBFBD><EFBFBD>ֵ
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
|