1. Driver/System¶
1.1 如何调整打印 Log 的最大长度?¶
调整
RT_CONSOLEBUF_SIZEConfig 来修改控制台最长的 Log Buffer 长度
打开 ULOG (对应
RT_USING_ULOG) 后,需要再调整ULOG_LINE_BUF_SIZEConfig 来修改最大 Log Buffer 长度
1.2 timer¶
1.2.1 常见延时函数¶
常用的延时函数分为HAL和RT两种
1,HAL层延时函数:(等同于while中指令循环,延时时不会切到其他线程)
HAL_Delay(10); /* 延时10ms */
HAL_Delay_us(10); /* 延时10us */
2,RTT接口的延时函数:
rt_thread_delay(100); /* 延时100ms */
注意:
RTT接口的延时函数执行时,会切换到其他线程,比如ilde线程,当睡眠门限低于延时时长时会进入Standby睡眠。
1.2.2 获取时间戳 Tick值和RC10K振荡频率¶
获取时间戳和tick值是比较常用的
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();
1.2.3 查看现有定时器命令¶
串口发送list_timer,可以看到当前使用的定时器的信息
list_timer的状态说明,第一列"timer"为定时器名字,第二列"periodic"为定时器周期(十六进制,单位ms),第三列"timeout"为下一次定时器到来的时间戳,第四列"flag"为该定时器是否为激活状态, 如上图,生效的定时器只有"main"的定时器(延时函数也是一个定时器),唤醒周期为0xbb8(3000ms)。