7 Star 3 Fork 2

JUSTRM / JUSTFW

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

简介

JUSTFW(Just Framework)是一个基于FreeRTOS的RoboMaster机器人电控框架

如何配置cmake

1.CubeMX在生成IDE的选项中选择STM32CubeIDE

2.在Clion中导入工程

3.导入JUSTFW

在项目的根目录下运行git clone https://gitee.com/justrm/justfw

4.修改CMakeLists_template.txt

在Clion生成的CMakeLists_template.txt中找到如下代码

add_executable($${PROJECT_NAME}.elf $${SOURCES} $${LINKER_SCRIPT})

将其替换为(以框架文件夹名为justfw为例)

macro(FIND_INCLUDE_DIR result curdir)									#定义函数,2个参数:存放结果result;指定路径curdir;
  file(GLOB_RECURSE children "${curdir}/*.hpp" "${curdir}/*.h" )		#遍历获取{curdir}中*.hpp和*.h文件列表
  set(dirlist "")														#定义dirlist中间变量,并初始化
  foreach(child ${children})											#for循环
    string(REGEX REPLACE "(.*)/.*" "\\1" LIB_NAME ${child})			#字符串替换,用/前的字符替换/*h
    if(IS_DIRECTORY ${LIB_NAME})									#判断是否为路径
      list (FIND dirlist ${LIB_NAME} list_index)					#去重,查找dirlist中是否有${LIB_NAME}指定的值,可以区分字符串相同数子后缀不同的路径:例如/app/test_1和/app/test_2
      if(${list_index} LESS 0)									#若没找到则代表列表中没有该路径
        LIST(APPEND dirlist ${LIB_NAME})						#将合法的路径加入dirlist变量中
      endif()														#结束判断
    endif()
  endforeach()														#结束for循环
  set(${result} ${dirlist})											#dirlist结果放入result变量中
endmacro()

FIND_INCLUDE_DIR(INCLUDES "justfw/modules")
include_directories(${INCLUDES})
FIND_INCLUDE_DIR(INCLUDES "justfw/lib")
include_directories(${INCLUDES})

file(GLOB_RECURSE JUSTFW "justfw/lib/*.c" "justfw/lib/*.h" "justfw/interface/*.c" "justfw/interface/*.h"  "justfw/modules/*.c" "justfw/modules/*.h" )

include_directories(justfw/interface)

add_executable($${PROJECT_NAME}.elf $${SOURCES} $${LINKER_SCRIPT} $${JUSTFW})

找到#Uncomment for hardware floating point , 并将其后的数行代码解除注释

5.添加arm_math库(在部分模块中使用了arm_math加速运算)

以cubemx为例

img.png

在CubeMX左侧找到Middleware and Software Packs

在下拉框中找到X-CUBE-ALGOBUILD,点击下载并勾选启用 img_1.png

最后在CubeMX中完成启用,重新生成代码 img_2.png

在cmakelists_template.txt中添加

#DSP
include_directories("Middlewares/ST/ARM/DSP/Inc")
link_directories(Middlewares/ST/ARM/DSP/Lib)
link_libraries(libarm_cortexM4lf_math.a) #Middlewares/ST/ARM/DSP/Lib下的文件名

6.屏蔽原厂USB驱动(cherryUSB)

移植参考cherryUSB官方文档

cubemx设置usb为device only,不启用USB_DEVICE包

修改main.c初始化部分(使用define防止cubemx替换)

//屏蔽HAL usb初始化
#define MX_USB_OTG_FS_PCD_Init() do{}while(0)
/* USER CODE END SysInit */

/* Initialize all configured peripherals */
...
MX_USB_OTG_FS_PCD_Init();
...
/* USER CODE BEGIN 2 */
//屏蔽HAL usb初始化
#undef MX_USB_OTG_FS_PCD_Init

修改stm32f4xx_it.c中的USB中断函数

void OTG_FS_IRQHandler(void)
{
  /* USER CODE BEGIN OTG_FS_IRQn 0 */
#define HAL_PCD_IRQHandler(a) do{}while(0);
  /* USER CODE END OTG_FS_IRQn 0 */
  HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS);
  /* USER CODE BEGIN OTG_FS_IRQn 1 */
#undef HAL_PCD_IRQHandler
  extern void USBD_IRQHandler(uint8_t busid);
    USBD_IRQHandler(0);
  /* USER CODE END OTG_FS_IRQn 1 */
}

TODO:

  • 写一个像样的README
  • 核心实现
    • 类ros软总线tinybus
    • 基于外部通信的话题注入
  • utils
    • PID封装
    • 斜坡函数
    • 限幅函数
    • 一阶滤波
    • 滑动窗口滤波
    • 卡尔曼滤波
  • BSP驱动
    • CAN
    • UART
    • I2C
    • SPI
    • PWM
    • ADC
    • GPIO
    • USB虚拟串口
  • 器件驱动
    • 电机驱动
      • C610
      • C620
      • M6020
      • MF9025
      • CyberGear
      • 通用PWM
      • 通用直流有刷电机
    • IMU驱动
      • MPU6600
      • BMI088
      • IST8310
    • 遥控器驱动
      • DR16
    • 蜂鸣器
    • 裁判系统解析
    • 发射机构控制
      • 摩擦轮发射
      • 气动发射
    • 弹仓控制
  • 算法
    • AHRS
    • 底盘运动学解析
      • 四麦轮
      • 四全向轮
      • 三全向轮
      • 四舵轮
      • 三舵轮
      • 轮腿底盘
    • 云台控制
      • 二轴云台
      • 六轴机械臂
  • 逻辑
    • 视觉通信模块
    • 操作逻辑

空文件

简介

江西理工大学rm电控框架 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C
1
https://gitee.com/justrm/justfw.git
git@gitee.com:justrm/justfw.git
justrm
justfw
JUSTFW
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891