代码拉取完成,页面将自动刷新
JUSTFW(Just Framework)是一个基于FreeRTOS的RoboMaster机器人电控框架
在项目的根目录下运行git clone https://gitee.com/justrm/justfw
在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
,
并将其后的数行代码解除注释
以cubemx为例
在CubeMX左侧找到Middleware and Software Packs
在下拉框中找到X-CUBE-ALGOBUILD,点击下载并勾选启用
最后在CubeMX中完成启用,重新生成代码
在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下的文件名
移植参考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 */
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。