分享

EEDrone开源四旋翼从零开始(6)--FreeRTOS CLI调试

 知芯世界 2020-10-28

ST在16年末对STM32F7的库文件进行了一次重要的升级,推出了LL库,该库与HAL库功能类似,LL库相当于操作寄存器,可分别单独使用也可以共同使用,HAL库的效率低下是受人诟病的,高频率的uart与tim都不敢用,LL库就解决了这个问题。因此接下来的工程中所有的初始化采用HAL库,其他的操作全部使用LL代替。还有一个升级就是使用了Free RTOS 9.0版本,这是一个革命性的升级,支持文件系统和网络功能,还处于实验室阶段,这样就有了更多的选择。

Pixhawk具有nsh,可以用来进行简单的人机交互,这一个在FreeRTOS中叫做CLI,目前在F7芯片上还没有Demo需要移植,下面来简单介绍下移植的要点:

1.      确保串口的收发通顺:

本工程采用LL库使用串口中断收发,结合FreeRTOS的列队用来发送字符串。

2.      复制相关库文件:

下载FreeRTOS,将FreeRTOS_CLI.c/.h,UARTCommandConsole.c,Sample-CLI-commands.c,serial.c/.h复制到自己的工程,其中serial来自stm32f103的demo,需要进行修改。

3.      添加代码:

    stm32f7xx_it.c中串口中断入口使用vUARTInterruptHandler(USART3);

“ FreeRTOS_CLI.h”中加#define configCOMMAND_INT_MAX_OUTPUT_SIZE 1000

  “UARTCommandConsole.c””中修改参数:#define cmdQUEUE_LENGTH 2000

  “UARTCommandConsole.c”修改if( cRxedChar == '\n'|| cRxedChar == '\r' )为(cRxedChar == '\n' ),这是因为在windows中回车是\n\r,会触发两次。

   “Sample-CLI-commands.c”中注释vTaskList();,

     在启动os前添加vRegisterSampleCLICommands();vUARTCommandConsoleStart(1000, 1 );

这样就可以通常串口进行交互了,下面来使用CLI来打印任务运行情况和占用时间,占用时间需要一个频率非常高的定时器,本工程使用的是5KHz,这个在以前的低效率HAL中是非常吃力的,现在使用LL库运行起来就轻松很多,如果以后因为这个高频率的定时器导致资源吃紧,那么将其移入到os的滴答时钟里面也是可以的。何配置在安富莱_STM32-V6开发板_FreeRTOS教程.pdf中有详细介绍。

    CLI可以很方便的添加命令行:

    仿照例子轻松写出,例如添加一个LED灯的控制,具有一个参数,用来控制开关。在“Sample-CLI-commands.c”中添加如下函数:

  1. /*

  2. * Implements the led command.

  3. */

  4. static BaseType_t prvLedCommand( char *pcWriteBuffer, size_t xWriteBufferLen, const char *pcCommandString );

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多