RT Thread 4.0提供了新的BSP框架

新 BSP 框架的主要特性如下:

  • 提供多系列 BSP 模板,大大降低新 BSP 的添加难度;

  • 每个 BSP 都配有齐全的驱动文件,开发者可以方便地使用所有驱动;

  • 开发者可以使用 CubeMX 工具对 BSP 进行图形化配置;

由于Hal库是以后主流,在使用STD库对STM32很熟悉后,建议转到Hal库

本文参考官方《STM32系列BSP制作教程》,由于官方提供的CubeMX与Hal库版本固定,不一定适用所有初步使用的人,本文使用自己的CubeMX制作BSP并强调注意事项。

其中一些解释如内容说明、Scons、Env等,详细参见《STM32系列BSP制作教程》

1. BSP 制作方法

BSP 的制作过程分为如下五个步骤:

  1. 复制通用模板

  2. 使用 CubeMX 工具配置工程

  3. 修改 BSP 中的 Kconfig 文件

  4. 修改构建工程相关文件

  5. 重新生成工程

1.1 复制通用模板

复制        rt-thread-4.0.0\bsp\stm32\libraries\templates\stm32f4xx

重命名为 rt-thread-4.0.0\bsp\stm32\stm32f407-pz6808l

1.2 使用CubeMX配置工程

本文使用的是CubeMX 5.2版本

配置RCC使能外部晶振

使能调试

使能UART

时钟配置

工程管理,生成到BSP框架里的文件夹下

生成工程如下

1.3 HAL库替换

删除MDK-ARM文件夹

复制Drivers到 rt-thread-4.0.0\bsp\stm32\libraries 文件下并重命名为 STM32F4xx_HAL_502

从模板中复制SConscript文件

1.4文件修改

rt-thread-4.0.0\bsp\stm32\stm32f407-pz6808l\board\board.c

用生成的main.c中的 SystemClock_Config 进行替换

修改 board/Kconfig 文件

修改链接脚本

填写对应芯片的Flah和RAM大小,主要有些芯片有非连续RAM,填写RAM1大小即可

修改主工程目录下的

修改 SConstruct 链接自己的HAL库

修改 board 目录下的 SConscript

修改为需要制作BSP的芯片型号对应内容

注意 stm32f4xx_hal_msp.c 文件  查看是否包含有串口初始化 HAL_UART_MspInit ,没有则用MX重新生成,否则程序运行会出错(串口异常)

1.5 使用Env工具生成工程

打开模板 template.uvprojx ,对工程进行相关设置,这样以后每次文件的改动需要重新生成工程时,工程就不用再设置了;

在 env 界面输入命令 menuconfig 对工程进行配置,并生成新的 rtconfig.h 文件。

调试日志的配置,这样看到初始化时的一些信息

配置完save,然后输入命令 scons --target=mdk5 重新生成工程

keil打开project工程,编译无误,制作BSP成功。

RT-Thread 4.0 + STM32F407 学习笔记1的更多相关文章

  1. 从零开始搭建.NET Core 2.0 API(学习笔记一)

    从零开始搭建.NET Core 2.0 API(学习笔记一) 一. VS 2017 新建一个项目 选择ASP.NET Core Web应用程序,再选择Web API,选择ASP.NET Core 2. ...

  2. Swift 2.0 字符串学习笔记(建议掌握OC字符串知识的翻阅)

    自己公司开现在使用OC语言在写,但Swift似乎是苹果更推荐使用的开发语言,估计也是未来开发的趋势,自己以前有接触swift,但又由于公司的项目赶,也没有时间去好好地学习这款开发语言.现在年底了,项目 ...

  3. Spring 4.0.2 学习笔记(2) - 自动注入及properties文件的使用

    接上一篇继续, 学习了基本的注入使用后,可能有人会跟我一样觉得有点不爽,Programmer的每个Field,至少要有一个setter,这样spring配置文件中才能用<property> ...

  4. Spring 4.0.2 学习笔记(1) - 最基本的注入

    1. 添加maven支持 <dependency> <groupId>org.springframework</groupId> <artifactId> ...

  5. Google Guava14.0 瓜娃学习笔记

    Guava 是java api的增强与扩展,提供复杂的java 数据结构,使你的代码更简短精炼,具有良好的可读性.看看guava给我们提供了哪些很酷的功能: 集合创建: Map<String, ...

  6. 《Ruby语言入门教程v1.0》学习笔记-01

    <Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...

  7. Java 螺纹第三版 第一章Thread介绍、 第二章Thread创建和管理学习笔记

    第一章 Thread导论 为何要用Thread ? 非堵塞I/O      I/O多路技术      轮询(polling)      信号 警告(Alarm)和定时器(Timer) 独立的任务(Ta ...

  8. Swift2.0 函数学习笔记

    最近又有点忙,忙着找工作,忙着适应这个新环境.现在好了,上班两周周了,也适应过来了,又有时间安安静静的就行我们前面的学习了.今天这篇笔记,记录的就是函数的使用.下面这些代码基本上是理清楚了函数的额使用 ...

  9. Vue1.0基础学习笔记整理

    最近一直在使用Vue.js开发项目,现将在学习过程中遇到的一些学习小细节总结如下: 1.只处理单次插值,今后的数据变化就不会再引起插值更新了 <span>This will never c ...

随机推荐

  1. solr(CVE-2020-13957)文件上传

    影响版本 Apache Solr 6.6.0 - 6.6.5 Apache Solr 7.0.0 - 7.7.3 Apache Solr 8.0.0 - 8.6.2 环境搭建 下载环境 http:// ...

  2. AppWeb认证绕过漏洞(CVE-2018-8715)

    影响范围 Appweb 7.0.2及早期版本. 复现 构造头Authorization: Digest username=admin 返回包里包含session 发送POST请求,添加session到 ...

  3. PHP判断访问者手机移动端还是PC端的函数

    *移动端判断*/ function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROF ...

  4. Java的三种日期工具 Date Calendar SimpleDateFormat

    三种日期工具 配合下面的案例可以更加深度的了解 Date 需要导包java.util.Date Date d = new Date(); //两种都是获取到现在时间的时间戳 long t1 = d.g ...

  5. Flutter学习(8)——CheckBox多选框使用及动态更改多选框数据

    原文地址:Flutter学习(8)--CheckBox多选框使用及动态更改多选框数据 | Stars-One的杂货小窝 最近项目需求需要调整页面,记录一下实现过程 这次主要是要实现个评价页面,选择不同 ...

  6. user-agent随笔

    常用的user-agent: 一.pc端的user-agent汇总,各大浏览器 1.safari 5.1 – MAC Mozilla/5.0 (Macintosh; U; Intel Mac OS X ...

  7. 程序员被老板要求两个月做个APP,要不比京东差,网友:做一个快捷方式,直接链到京东

    隔行如隔山,这句话说得一点都没错.做一个程序员,很多人都会羡慕,也有很多人会望而却步. 作为一个外行人,你别看程序员每天坐在电脑前敲敲键盘打打代码,以为很简单,其实啊也只有程序员自己明白,任何一个看似 ...

  8. Docker部署Jenkins 2.285版持续部署集成实践(2)

    前言:上一篇文章中,写到了jenkins搭建,下面记录使用jenkins构建项目实践 1. 以构建.netcore项目为例,如果要构建.netcore项目,需要安装dotnet-sdk包 进入jenk ...

  9. LoadableComponent类的使用

    通过继承LoadableComponent类,测试程序可以判断浏览器是否加载了正确的页面,只需要重写isLoaded和load二个方法,此方法有助于页面对象的页面访问操作更加稳定 1.LoginPag ...

  10. 题解 P3943 星空

    题解 一道思维量巨大的题,很烧脑 考虑异或差分,设 \(d_i=a_i\;\;xor\;\;a_{i-1}\),那么对于翻转 \(a_i\sim a_j\) 就相当于 \(b_i\) 和 \(b_{j ...