2 定时器相关¶
2.1 延时函数¶
1,HAL层延时函数:(等同于while中指令循环,延时时不会切到其他线程)
HAL_Delay(10); /* 延时10ms */
HAL_Delay_us(10); /* 延时10us */
2,RTT接口的延时函数:
RTT接口的延时函数执行时,会切换到其他线程,比如ilde线程,当睡眠门限低于延时时长时会进入Standby睡眠
rt_thread_delay(100); /* 延时100ms */
2.2 获取时间戳 Tick值和RC10K振荡频率¶
1,获取时间戳:
/* 32768晶体时钟,会1/32768秒,寄存器值加1*/
/* RC10K时钟,会约1/9000秒,寄存器值加1*/
uint32_t start_time = HAL_GTIMER_READ();
2,获取1m秒递增的Tick值:
rt_tick_t start_timer = rt_tick_get(); /* RTT系统函数,1m秒返回值会加1 */
uint32_t tickstart = HAL_GetTick(); /* HAL层的函数,1m秒返回值会加1 */
3,获取当下时钟频率:
/* 32768晶体时钟,会返回32768*/
/* RC10K时钟,会返回8k-10k之间的值*/
uint32_t mcuOscData = HAL_LPTIM_GetFreq();
2.3 串口查看现有定时器命令¶
list_timer
list_timer的状态说明:
第一列"timer"为定时器名字;
第二列"periodic"为定时器周期(十六进制,单位ms);
第三列"timeout"为下一次定时器到来的时间戳;
第四列"flag"为该定时器是否为激活状态,
如上图,生效的定时器只有"main"的定时器(延时函数也是一个定时器),唤醒周期为0xbb8(3000ms)。