新手上路
- 积分
- 39
- 金钱
- 39
- 注册时间
- 2019-7-23
- 在线时间
- 5 小时
|
1金钱
都在time.c文件中
stm32f4xx_it.c嘀嗒时钟的中断函数,滴答时钟的相关配置已经配置好了
void SysTick_Handler(void)
{
sysTickUptime++;
sys_time();
}
volatile uint32_t sysTickUptime = 0;
uint32_t GetSysTime_us(void)
{
register uint32_t ms;
u32 value;
ms = sysTickUptime;
value = ms * TICK_US + (SysTick->LOAD - SysTick->VAL) * TICK_US / SysTick->LOAD;
return value;//这里LOAD=21K,TICK_US=1000,VAL=0,时钟平率=21M
}
微秒延时函数
void Delay_us(uint32_t us)//如果要延时10微秒的话us就是10
{
uint32_t now = GetSysTime_us();
while (GetSysTime_us() - now < us);
}//这里的微妙延时不太懂,一开始没进入中断,ms=0,value=1000,在Delay_us中now=1000,
while(1000-1000<10),为真,一直在这里等待,时间(LOAD=21K/21M,这样终端一次就是1ms啊,怎么会出来微秒延时呢?)到后再进入中断,中断中sysTickUptime++后,等于1,GetSysTime_us()的值改了,增大了1000,条件为假,退出while。大致过程我就是理解的,如果我叙述的不明白欢迎加我QQ2545407140,
void Delay_ms(uint32_t ms)//1ms=1000us
{
while (ms--)
Delay_us(1000);
}
|
|