1. Driver/System


1.1 如何调整打印 Log 的最大长度?

  1. 调整 RT_CONSOLEBUF_SIZE Config 来修改控制台最长的 Log Buffer 长度

RT_CONSOLEBUF_SIZE
  1. 打开 ULOG (对应 RT_USING_ULOG) 后,需要再调整 ULOG_LINE_BUF_SIZE Config 来修改最大 Log Buffer 长度

ULOG_LINE_BUF_SIZE

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,可以看到当前使用的定时器的信息

../_images/timer.png

list_timer的状态说明,第一列"timer"为定时器名字,第二列"periodic"为定时器周期(十六进制,单位ms),第三列"timeout"为下一次定时器到来的时间戳,第四列"flag"为该定时器是否为激活状态, 如上图,生效的定时器只有"main"的定时器(延时函数也是一个定时器),唤醒周期为0xbb8(3000ms)。