Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
BSP
MAC/Linux环境下STM32H743基础BSP搭建
发布于 2019-08-26 22:59:39 浏览:5908
订阅该版
[tocm] 目前RTT主流的开发环境是Windows+Keil,如果一些朋友喜欢用linux或者macOS又该如何去做RT-Thread+STM32的硬件开发呢?我看整个论坛这样的帖子就非常少,所以今天决定写一篇基于macOS环境下的STM32H743,rt-thread移植教程,希望能在rt-thread的推广上做出自己的一点小小贡献,给大家抛砖引玉。Linux环境下与macOS基本一致。 ## 一、素材准备 * Armfly-V7 STM32H743XIH6开发板 * RT-Thread 长期支持版 lts-v3.1.x * Macbook Pro * scons * macOS下的ARM交叉编译工具 ## 二、MAC下开发环境搭建 * 安装scons 在Windows环境下,有官方直接制作好的[ENV工具](https://pan.baidu.com/s/1cg28rk#list/path=%2F),按照工具内的使用说明基本上就是开箱即用。 在MAC环境下,需要自己安装scons软件,才能达到Windows下的效果。MAC下在终端内输入如下命令安装scons: ``` brew install scons ``` 目前最新的scons版本应该是3.1.1,安装好可查看socns版本: ![WechatIMG110.png](/uploads/201908/26/213102k25iud5iu7aibzh5.png) ### * 安装ARM交叉编译工具链 在MAC下编译STM32的程序,要用ARM-GCC交叉编译工具,这里直接从ARM官网下载。[点我下载](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads) 我用的是8-2-18-q4-major,记得选Mac OSX-64bit版本。下载好之后自己定义一个目录解压之,然后把它添加到环境变量(PATH) 这是我的解压目录位置: ![WechatIMG112.png](/uploads/201908/26/213855flkxrr0ptnlw9faz.png) 将上述目录添加到用户的环境变量里,即在用户目录下的.bash_profile文件中加上如下语句: ![WechatIMG113.png](/uploads/201908/26/214226bzlyggu6sqmyyk46.png) 重启终端或者在用户目录下(~ 目录,懂Unix的应该都懂 ~)执行 source .bash_profile 即可 在终端内执行如下命令即可看到arm-gcc的版本号: ``` arm-none-eabi-gcc -v ``` ![WechatIMG114.png](/uploads/201908/26/214631fsn3f638nndhc6bh.png) ### * 安装VS Code (可选) 至此,MacOS下所用的软件和环境都已经准备好了 ## 三、RT-Thread在STM32H743XI上的移植 ### * rt-thread源代码瘦身大作战 下载 [rt-thread-lts-v3.1.x](https://github.com/RT-Thread/rt-thread) 并解压,进入到bsp目录内,除了保留stm32文件夹外,删掉所有其他不相关的bsp文件,你会发现rtt会清爽很多 进入stm32目录下,除保留doc、libraries和stm32h743-atk-apollo文件夹外,其余全部删除,你会发现又清爽很多 ### 继续瘦身+换血 进入libraries目录,除保留HAL_Drivers文件夹、Kconfig文件、STM32H7xx_HAL文件夹 和 templates文件夹外,其余全部删除,又清爽很多 更新STM32H7最新的HAL库文件,目前能从STM32CubeMX下载下来最新的HAL文件版本是1.5.0 。 进入STM32H7xx_HAL文件夹内,删除CMSIS和STM32H7xx_HAL_Driver文件夹,将从STM32CubeMX中下载的最新CMSIS和STM32H7xx_HAL_Driver拷贝至该目录内。删除 `../STM32H7xx_HAL_Driver/Src/`目录下带template名的4个.c文件(那是给STM32官方板用的,我们基本无用); 删除`../STM32H7xx_HAL_Driver/Inc/`目录下stm32_assert_template.h头文件。至此,HAL库更新完毕 其他部分参考stm32/doc目录下的BSP制作教程基本上就可以了,但是还是不能用,有些坑我来教大家填平!!! ### 填坑之路 - 参考文档,将template文件夹内的全部文件拷贝至自己新建的文件夹姑且叫stm32h743xi-armfly内,该目录以下简称bsp开发目录 - 我们开发用的是GCC环境,所以你可以把bsp开发目录下所有keil和IAR相关的工程文件全部删掉,真的会清爽很多很多 - 修改bsp开发目录下的rtconfig.py文件内的第20行,指定ARM-GCC编译链的目录,如下图所示,此路径在MAC环境搭建条目下有设置,不要忘了哦。 ![WechatIMG115.png](/uploads/201908/26/222431f4wwlpyje1pg7z1m.png) - 此处是天坑,官方文档没有说明(我的同事没有改,你可以认为我也是官方人士:lol) 天坑来了! 在`bsp\stm32\libraries\STM32H7xx_HAL\CMSIS\Device\ST\STM32H7xx\Source\Templates\gcc`目录下,打开startup_stm32h743xx.s文件,作如下修改: ![WechatIMG116.png](/uploads/201908/26/223007lg6t3s76z3hb1a30.png) 注释掉第95行,__libc_init_array这个是libc的初始化,我们不用libc 第97行,将 bl main 改为 bl entry ,entry是rtt的入口 如果你不做上述修改,真的,你编译绝对不会报错,但是下载进板子,板子没任何反应起不来,跟砖头没两样 - 基本就这些操作,我不打算上传我做好的BSP,我真心希望您自己走一遍,这里面可能有些点我没有提到,但都是小问题,看下sconscript或者是kconfig文件都能解决,如果实在不能解决,欢迎留言,我一一解答 ## 四、BSP配置、编译、烧录下载 ### 配置 进入bsp开发目录(看上文,确认请我说的是哪个目录),执行 scons --menuconfig 就可以实现在Windows下ENV中menuconfig命令的作用 ![WechatIMG117.png](/uploads/201908/26/223933uf5qegbybpbx8zb2.png) 配置完保存,会自动生成rtconfig.h文件,非常方便 ### 编译 在bsp开发目录,输入 scons ,此时会自动开始编译链接,输入 scons -j32 ,相信我,你的编译速度会飞起来的:lol 编译成功如下图所示: ![WechatIMG118.png](/uploads/201908/26/224342k6ayzneiat3j1vwi.png) 编译完自动会生成rtthread.elf和rtthread.bin文件,这两个文件都是可以直接下载使用的,但是唯独没有hex文件,如下有两个方法生成hex文件 1. 修改rtconfig.py文件第63行,将其中的binary改为ihex即可,如图: ![WechatIMG119.png](/uploads/201908/26/224723q47u8848li8m87o6.png) 2. 这是第二种方法,我自己写了个脚本,可以适用于多种开发条件,不仅仅是编译rtt可以用到,做其他ARM相关开发直接能用。 ``` #!/bin/sh # Author: Wei Zhou if [ $# -ne 1 ] then echo "Usage: You need specify a format to transform -> hex or bin" exit 1 elif [ $1 = hex ] then arm-none-eabi-objcopy -O ihex *.elf frimware.hex exit 0 elif [ $1 = bin ] then arm-none-eabi-objcopy -O binary *.elf frimware.bin exit 0 else echo "Usage: You need specify a format to transform -> hex or bin" exit 1 fi ``` 把上述代码保存为elf2hex-bin文件,给与其可执行权限,并加入到环境变量中(PATH路径),您在任何地方只要执行上述脚本命令即可。 比如,在bsp开发目录下,scons命令编译完成后,执行 elf2hex-bin hex 命令,即可生成frimware.hex文件用于下载 ![WechatIMG120.png](/uploads/201908/26/225253dlqlc9mp2pyovqzp.png) ### 烧录 下载SEGGER的MacOS下的[Jlink驱动](https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack),完成安装 可下载.bin文件或者是.hex文件。这里要注意一点,下载.bin文件要制定烧录地址为0x08000000, .hex不用指定 ![WechatIMG121.png](/uploads/201908/26/225725nysa3o50dya155z5.png) ![WechatIMG122.png](/uploads/201908/26/225828ygujyo5un5g8yh89.png) 至此,享受MacOS下RT-Thread开发给您带来的快感吧 DaZhou 2019年8月26日23:00
查看更多
15
个回答
默认排序
按发布时间排序
tyustli
2019-08-26
这家伙很懒,什么也没写!
6666
来一颗糖
2019-08-27
这家伙很懒,什么也没写!
666666 我这里还有篇帖子讲 linux 下 如何使用 vscode 调试 stm32 的。 - [教程:ubuntu 下 vscode 编译 下载 调试 rt-thread stm32 程序](https://club.rt-thread.org/ask/question/9ae9f889db643afc.html)
我夏了夏天
认证专家
2019-08-27
Life isn't about finding yourself, life is about creating yourself.
楼主厉害,为了省事,我还是在 pd 下装 ubuntu 虚拟机 ;P
bernard
2019-08-27
这家伙很懒,什么也没写!
这个是scons --dist不能用了?
我夏了夏天
认证专家
2019-08-27
Life isn't about finding yourself, life is about creating yourself.
dist 好使不? 另外启动文件的修改有没有提交到主线呀?
我夏了夏天
认证专家
2019-08-27
Life isn't about finding yourself, life is about creating yourself.
[i=s] 本帖最后由 Summer_gift 于 2019-8-27 17:09 编辑 [/i] >666666 >我这里还有篇帖子讲 linux 下 如何使用 vscode 调试 stm32 的。 --- 推荐楼主再出一篇 mac 下的调试贴 :D
DaZhou
2019-08-29
这家伙很懒,什么也没写!
>推荐楼主再出一篇 mac 下的调试贴 正在准备中。。。
我夏了夏天
认证专家
2019-08-29
Life isn't about finding yourself, life is about creating yourself.
>这个是scons --dist不能用了? 实测可用 ;P
superopt
2019-11-09
这家伙很懒,什么也没写!
pkgs更新软件包能用吗?
qg_
2019-11-14
这家伙很懒,什么也没写!
同楼上问 mac平台 pkgs更新软件包 怎么使用
撰写答案
登录
注册新账号
关注者
0
被浏览
5.9k
关于作者
DaZhou
这家伙很懒,什么也没写!
提问
10
回答
49
被采纳
0
关注TA
发私信
相关问题
1
STM32 407 串口接收数据 系统卡死
2
RTT nrf24l01 设备驱动程序
3
stm32f10x串口只能发送数据,无法接收
4
第一次尝试移植rt-thread 到stm32F103系列问题
5
有人把stm32L07xx的bsp移到rtt上来了吗?求一个
6
rt-thread线程调度异常在stm32f103芯片上
7
RTT是否支持STM32F429
8
请问谁有 STM32F40x HAL + RT-THREAD 模板
9
rt-thread在stm32f411下的移植问题
10
针对STM32F7系列平台的MPU,Cache特性,需要注意哪些问题?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部