56 lines
1.0 KiB
C
56 lines
1.0 KiB
C
//SYSCLK 初始化及延时函数
|
|
|
|
#include "delay.h"
|
|
|
|
static uint32_t fac_us = 0; //us 延时倍乘数
|
|
|
|
/**
|
|
* @brief 初始化延迟函数
|
|
* @param SYSCLK: 系统时钟频率
|
|
*/
|
|
void SYSCLK_Init(uint16_t SYSCLK)
|
|
{
|
|
|
|
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
|
|
fac_us = SYSCLK;
|
|
}
|
|
|
|
/**
|
|
* @brief us 延迟函数
|
|
* @param nus: us 数,不可超过 1000
|
|
*/
|
|
void Delay_us(uint32_t nus)
|
|
{
|
|
uint32_t ticks, told, tnow;
|
|
uint32_t tcnt = 0;
|
|
uint32_t reload = SysTick->LOAD; //LOAD 的值
|
|
ticks = nus * fac_us; //需要的节拍数
|
|
told = SysTick->VAL; //当前计数器值
|
|
|
|
while (1)
|
|
{
|
|
tnow = SysTick->VAL;
|
|
if (tnow != told)
|
|
{
|
|
if (tnow < told)
|
|
tcnt += told - tnow;
|
|
else
|
|
tcnt += reload - tnow + told;
|
|
told = tnow;
|
|
if (tcnt >= ticks)
|
|
break;
|
|
}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* @brief ms 延迟函数
|
|
* @param nms: ms 数
|
|
*/
|
|
void Delay_ms(uint16_t nms)
|
|
{
|
|
uint32_t i;
|
|
for (i = 0; i < nms; i++)
|
|
Delay_us(1000);
|
|
}
|