正在上传图片(0/1)

一步步教你如何在OSDK 4.0上移植FreeRTOS

 5
手机看帖 25 5634
本文目录
1.下载SDK代码
2.确认IDE和Pack版本
3.首次编译
    3.1 填写APP信息
    3.2 设置目标IC
    3.3 修改晶振
    3.4 执行首次编译
4.移植FreeRTOS
    4.1 下载FreeRTOS源码包
    4.2 解压FreeRTOS代码包
    4.3 复制FreeRTOS系统代码文件
    4.4 复制FreeRTOS系统配置文件
    4.5 修改 FreeRTOSConfig.h文件
    4.6 再次执行编译
5.附件
    已经移植好FreeRTOS的代码包

------------------------------------------------- 手动分割线 --------------------------------------------------

1.下载SDK代码
首先,下载OSDK-4.0的代码
下载下来后可以简单看下整个OSDK4.0的代码包结构
其中,osdk-core就是OSDK的API库,所有关键代码都在这里,同时DJI也提供了Linux平台和STM32平台的sample代码,位于sample文件夹下。

2.确认IDE和Pack版本
确认MDK-Keil版本和STM32Device Pack版本,注意:STM32F4 Pack版本需要使用2.13.0,使用最新的2.14.0会有其他报错。


3.首次编译
打开DJI提供的STM32 sample,工程文件位于 Onboard-SDK-4.0\sample\platform\STM32\OnBoardSDK_STM32\Project\OnBoardSDK_STM32.uvprojx
3.1 填写APP信息
在Activate.cpp文件中填写我们的APP ID 和Key,如果不知道什么是APP Key和ID的可以参考之前的文章:

3.2
设置目标IC 先点开工程选项设置页,选择你的目标IC,这边我选用的STM32F407VGTx系列(对应我的STM32F407VGT6)


3.3 修改晶振
先设置想编译的sample:
再接着点选C/C++页面,填写我们希望编译的sample,这里其实就是一个预编译指令,比如“-DFLIGHT_CONTROL_SAMPLE。
接着设置晶振频率:
重新定义晶振频率,OSDK中使用的频率是25M,而我使用的板子是8M,因此我们需要做更改,由于OSDK4.0依然使用STD库,因此一种方式是修改stm32f4xx.h文件中的HSE_VALUE定义,或者直接使用预编译指令 -DHSE_VALUE=8000000,然后点击OK。

STD库修改时钟比较麻烦,处理修改晶振频率还得修改system_stm32f4xx.c文件中的 PLL_M,如下图所示,将25改成8,当然我们可以将这个数字改成HSE_VALUE,让它等于晶振本身也是可以的,这样以后只需要在预编译指令中修改晶振即可。


3.4 执行首次编译

最后单击编译按钮,进行编译,编译后会发现出现很多error信息

错误提示是找不到freeRTOS,官方文档也告诉我们想使用STM32平台是需要自己移植的。

4.移植FreeRTOS
4.1 下载FreeRTOS源码包
FreeRTOS官方下载地址 https://www.freertos.org/a00104.html
点这里下载会是最新的版本,官方使用的是V10.2.1,但我下载下来的时候已经是 V10.3.1,不过也没关系,影响不大。
如果你希望使用v10.2.1的版本可以在这里找:https://github.com/FreeRTOS/FreeRTOS/tags

4.2 解压FreeRTOS代码包
整个FreeRTOS  V10.3.1 的代码文件夹内容如下图所示


其中FreeRTOS文件夹就是该系统真身,带Plus的文件夹存放的是其它的系统组件,比如CLI组件,这个视情况使用,带TCP的文件夹很明显就是提供TCP/IP协议栈的系统组件。

4.3 复制FreeRTOS系统代码文件
将FreeRTOSv10.3.1\FreeRTOS\Source整个文件夹的内容复制到Onboard-SDK-4.0\sample\platform\STM32\OnBoardSDK_STM32\OS\FreeRTOS目录下,如下图所示


4.4 复制FreeRTOS系统配置文件
使用FreeRTOS的前提是需要一个FreeRTOSConfig.h的系统配置文件,用来设定系统参数和裁剪系统功能,实现系统平台的移植,在这里可以自己创建(显然这不是理智的选择),也可以直接复制FreeRTOS官方提供的demo文件。
在 FreeRTOSv10.3.1\FreeRTOS\Demo 中我们有注意到 CORTEX_M4F_STM32F407ZG-SK 的模板工程,与我们使用的STM32F407VGT6很相近,因此可以直接复制该工程下的FreeRTOSConfig.h文件到我们的工程目录下,即将FreeRTOSv10.3.1\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK\FreeRTOSConfig.h 复制到Onboard-SDK-4.0\sample\platform\STM32\OnBoardSDK_STM32\OS\FreeRTOS\Source\include文件夹下

DJI OSDK-4.0 已经在工程中添加了相关文件和路径,可以发现之前有提示黄色感叹号(因为找不到文件),现在该感叹号已经消失。


4.5 修改 FreeRTOSConfig.h文件
为了方便后续修改配置,建议在工程中添加该文件,如下图所示


打开FreeRTOSConfig.h 文件


将#ifdef __ICCARM__ 改为 #if defined (__ICCARM__) || defined (__CC_ARM)|| defined (__GNUC__)


将#defined configUSE_IDLE_HOOK 1改为#defined configUSE_IDLE_HOOK 2


将#define configTOTAL_HEAP_SIZE((size_t)(75*1024))改为#define configTOTAL_HEAP_SIZE ((size_t)(60*1024))


将#define configCHECK_FOR_STACK_OVERFLOW2改为#define configCHECK_FOR_STACK_OVERFLOW 0


将#define configUSE_MALLOC_FAILED_HOOK1改为#define configUSE_MALLOC_FAILED_HOOK 0


4.6 再次执行编译
可以发现0 error 0warming



5.附件
已经移植好FreeRTOS的代码包: Onboard-SDK-4.0_FreeRTOS.zip (11.67 MB, 下载次数: 903)
评论
上传
你需要登录之后才能回帖    登录 | 注册
STM32的板没有USB虚拟串口要怎样才能运行
NiceJIE  Osmo Pocket认证用户 2020-6-4 4#
djiuser_iVRfmnC6-4 14:51
STM32的板没有USB虚拟串口要怎样才能运行
同问
楼主  DJI FPV认证用户 2020-6-4 5#
djiuser_iVRfmnC6-4 14:51
STM32的板没有USB虚拟串口要怎样才能运行
不是USB虚拟串口,需要STM32支持USB 2.0,具有USB-OTG 功能,支持高速和全速数据传输才行~~
楼主  DJI FPV认证用户 2020-6-4 6#
需要STM32支持USB 2.0,具有USB-OTG 功能,支持高速和全速数据传输才行~~
jack1699  Mavic Air 2认证用户 2020-6-22 7#
张小龙6-4 21:34
需要STM32支持USB 2.0,具有USB-OTG 功能,支持高速和全速数据传输才行~~
请问如果不适用usb接口,仅使用ttl串口进行通信可以不
jack1699  Mavic Air 2认证用户 2020-6-22 8#
张小龙6-4 21:34
需要STM32支持USB 2.0,具有USB-OTG 功能,支持高速和全速数据传输才行~~
咨询您个比较低级的问题,我刚接触stm32的编程,请问这个错误是啥引起的,我照您的教程编译osdk4.0的stm32例程的时候出现的

看样子是说这个参数与函数需要的参数类型不匹配
楼主  DJI FPV认证用户 2020-6-22 9#
jack1699Mavic 2 Pro6-22 12:06
请问如果不适用usb接口,仅使用ttl串口进行通信可以不
可以的,但是OSDK在Active时会尝试激活USB通信的防火墙,如果未连接USB将会重试多次。可以注释掉Active里面的firewall相关操作。
不过这样相当于放弃USB通信,这样的话目前4.0的相机云台功能,Advanced-Sensing,Waypoint 2.0将会使用不了。
楼主  DJI FPV认证用户 2020-6-22 10#
jack1699Mavic 2 Pro6-22 12:59
咨询您个比较低级的问题,我刚接触stm32的编程,请问这个错误是啥引起的,我照您的教程编译osdk4.0的stm32例程的时候出现的[图片]
[图片]
看样子是说这个参数与函数需要的参数类型不匹配
使用的FreeRTOS是多少?可以跟过去看看参数定义的类型和函数所需的类型是否有定义,定义是否一致。
jack1699  Mavic Air 2认证用户 2020-6-23 11#
张小龙6-22 20:56
可以的,但是OSDK在Active时会尝试激活USB通信的防火墙,如果未连接USB将会重试多次。可以注释掉Active里面的firewall相关操作。
不过这样相当于放弃USB通信,这样的话目前4.0的相机云台功能,Advanced-Sensing,Waypoint 2.0将会使用不了。
噢,那就是说osdk4.0的话,usb和ttl两个接口都要连接咯,还是说只连接飞机的usb接口就可以实现所有功能呢
jack1699  Mavic Air 2认证用户 2020-6-23 12#
张小龙6-22 21:09
使用的FreeRTOS是多少?可以跟过去看看参数定义的类型和函数所需的类型是否有定义,定义是否一致。
找到原因了,是device pack版本的问题。感谢感谢
OSdk学习者   2020-6-23 13#
请问我如果用stm32f407ZGT6芯片,下载osdk3.9固件,需要进行移植操作吗
楼主  DJI FPV认证用户 2020-6-23 14#
jack1699Mavic Air 26-23 08:21
找到原因了,是device pack版本的问题。感谢感谢
那就好,我给第二个步骤加了红色标注了,避免其他小伙伴也入坑 0.0
楼主  DJI FPV认证用户 2020-6-23 15#
jack1699Mavic Air 26-23 08:07
噢,那就是说osdk4.0的话,usb和ttl两个接口都要连接咯,还是说只连接飞机的usb接口就可以实现所有功能呢
usb和ttl两个接口都要连接,才能使用全部功能。
楼主  DJI FPV认证用户 2020-6-23 16#
OSdk学习者6-23 10:02
请问我如果用stm32f407ZGT6芯片,下载osdk3.9固件,需要进行移植操作吗
3.9不支持FreeRTOS,直接使用官方的sample即可,注意改下晶振频率,芯片型号即可。
OSdk学习者   2020-6-25 17#
张小龙6-23 14:39
3.9不支持FreeRTOS,直接使用官方的sample即可,注意改下晶振频率,芯片型号即可。
谢谢
cgd1128   2020-7-13 18#
请问如果使用STM32cubeMX生成的HAL库来开发osdk,这样可以吗
kv886   2020-7-17 19#
cgd11287-13 01:40
请问如果使用STM32cubeMX生成的HAL库来开发osdk,这样可以吗
应该可以吧,没试过,等大神来回答了。
楼主  DJI FPV认证用户 2020-7-20 20#
cgd11287-13 01:40
请问如果使用STM32cubeMX生成的HAL库来开发osdk,这样可以吗
目前OSDK的STM32平台是基于STD库的,如果使用HAL库,你自己需要做很多移植性工作,工程量较大~~~
cgd1128   2020-8-3 21#
张小龙6-23 14:39
3.9不支持FreeRTOS,直接使用官方的sample即可,注意改下晶振频率,芯片型号即可。
请问怎么修改芯片型号,在哪里修改
机智の土拨鼠   2020-8-13 22#
您好,我想请问下C:\Users\11414\AppData\Local\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\DSP\Source\BasicMathFunctions\arm_abs_f32.c(113): error:  #147-D: declaration is incompatible with "void arm_abs_f32(float32_t *, float32_t *, uint32_t)"  (declared at line 2910 of "..\Lib\CMSIS\inc\arm_math.h")
这个重定义错误是因为我的CMSIS版本不对吗?
相信未来01   2020-11-25 23#
cgd11288-3 11:13
请问怎么修改芯片型号,在哪里修改
相信未来01   2020-11-25 24#
大神,咨询一个问题:我用正点原子的开发板运行样例程序,可以看到消息已经通过uasrt3发给了M300,但M300一直不回复,造成获取版本失败,握手不成功。我只链接了OSDK接口的uart, 同时按照文档说明B7,B8接地,B6悬空。M300也升级到了最新版FW。 DJI Assistant 2 上的串口带宽和开发板usart3设置的是一致的,设置完还重启了,但就是不能建立通讯连接。不知道下一步该怎么查了。
OSdk学习者   2020-12-9 25#
张小龙6-23 14:39
3.9不支持FreeRTOS,直接使用官方的sample即可,注意改下晶振频率,芯片型号即可。
大佬您好,我发现一个问题,就是用刚下载的SDK3.9,修改芯片信号后(我用的zgt6,默认下载的是VGT6?),编译工程时会报错,在工程下方多了两个启动文件,我把这两个启动文件删了就不会报错了。。但是最后串口打印输出乱码,不知道会不会跟这个有影响
楼主  DJI FPV认证用户 2021-1-28 26#
https://bbs.dji.com/thread-244379-1-1.html
楼主  DJI FPV认证用户 2021-1-28 27#
https://bbs.dji.com/forum.php?mod=viewthread&tid=246023
取消 点赞 评论
分享至:
回复:
上传
取消 评论
快速回复 返回顶部 返回列表