Mbed在自己的stm32F103RCT6系列平台移植适配

前言

本文介绍了如何从零开始在keil中搭建自己的stm32F103RCT6开发环境,其实也没有适配过程,只是一些简单的include代码而已,没啥技术含量,在这里只是做些记录,希望给需要的人一些参考。对于mbed系统,我也是初学,如有错误,还请斧正。

下载安装keil

在此不再赘述,可以参考 这里

下载mbed已经适配好的demo工程

对于stm32f103这种板子,mbed老早就给我们适配好了,各种demo可以从mbed下载,很简单,这里也不赘述了,参考这位兄台的文章即可。我也是参考这位兄台的文章,只可惜自己水平太渣,后面的步骤基本上就看不懂了,感觉也太复杂了。anyway,还是继续这篇傻瓜教程吧。

假设你已经下载了上面文章中提到的demo工程,Nucleo_printf_uvision5_nucleo_f103rb.zip,打开压缩包发现,没有mbed的源代码,全是.o文件,那肯定是不行的,其实,这些.o文件的源码都在mbed-os里面。

下载mbed

从github上下载最新的release版本,我这里用的是mbed-os-tools-release-5.10.0.zip解压之,最后,我的目录是这样滴:在这里插入图片描述

创建自己的demo

在这个文件夹中创建自己的demo目录,比如叫my_demo好了,拷贝Nucleo_printf_uvision5_nucleo_f103rb中的Nucleo_printf.uvoptxNucleo_printf.uvprojx到这个文件夹下,然后新建一个目录,叫user好了,把Nucleo_printf_uvision5_nucleo_f103rb中的main.cpp mbed_config.h 放到user中,最后,目录结构是这样滴:

./Nucleo_printf.uvoptx
./Nucleo_printf.uvprojx
./user
./user/main.cpp
./user/mbed_config.h

然后打开上面的工程文件,把工程中的所有文件夹都remove掉,这样,自己的工程算是建立好了。

添加mbed的代码

为了好看,建立两个group吧:
在这里插入图片描述

  • user中添加之前user文件夹中的main.cpp config.h
  • mbed中添加mbed os中的代码

如何从mbed os中摘取这个平台的代码呢,其实很简单,这里罗列了一下代码所在的文件夹

mbed-os-tools-release-5.10.0\drivers
mbed-os-tools-release-5.10.0\hal
mbed-os-tools-release-5.10.0\platform

把上面文件夹或子文件夹中的所有.c .cpp .h文件添加到mbed中。如果遇到如下弹窗:在这里插入图片描述
直接cancel就行,.json后缀的不需要添加。同理,一些.out的文件也不需要添加。
还需要添加

mbed-os-tools-release-5.10.0\targets\TARGET_STM 	#文件夹下所有.c .h .cpp
mbed-os-tools-release-5.10.0\targets\TARGET_STM\TARGET_STM32F1 	#文件夹下所有.c .h .cpp
mbed-os-tools-release-5.10.0\targets\TARGET_STM\TARGET_STM32F1\device 	#文件夹下所有.c .h .cpp
mbed-os-tools-release-5.10.0\targets\TARGET_STM\TARGET_STM32F1\TARGET_NUCLEO_F103RB 	#文件夹下所有.c .h .cpp
mbed-os-tools-release-5.10.0\targets\TARGET_STM\TARGET_STM32F1\TARGET_NUCLEO_F103RB\device 	#文件夹下所有.c .h .cpp
mbed-os-tools-release-5.10.0\targets\TARGET_STM\TARGET_STM32F1\TARGET_NUCLEO_F103RB\device\TOOLCHAIN_ARM_STD 	# **注意,只要添加.S文件即可!**,而这个sct文件,后面会用到,记住这个路径

有点繁琐,仔细添加,不要添加错了!代码添加ok了,接下来添加头文件的include path,我罗列了一下所有的路径,如果你的目录结构和我一致,可以直接用:

.
./user
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0/hal
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0/drivers
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0/hal/storage_abstraction
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0/hal/TARGET_FLASH_CMSIS_ALGO
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0/platform
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0/targets/TARGET_STM
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0/targets/TARGET_STM/TARGET_STM32F1
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0/targets/TARGET_STM/TARGET_STM32F1/device
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device

最后添加一下sct文件:
在这里插入图片描述
该文件就是上文提到的sct文件,该文件是用来link最终的可执行文件的。

编译测试

感觉差不多了,编译一下试试吧:

*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Rebuild target 'Nucleo_printf'
compiling BusIn.cpp...
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/stm32f103xb.h(150): error:  #5: cannot open source input file "core_cm3.h": No such file or directory
  #include "core_cm3.h"
..\mbed-os-tools-release-5.10.0\mbed-os-tools-release-5.10.0\drivers\BusIn.cpp: 0 warnings, 1 error
compiling BusInOut.cpp...
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/device/stm32f103xb.h(150): error:  #5: cannot open source input file "core_cm3.h": No such file or directory
  #include "core_cm3.h"
..\mbed-os-tools-release-5.10.0\mbed-os-tools-release-5.10.0\drivers\BusInOut.cpp: 0 warnings, 1 error
compiling AnalogIn.cpp...

提示说找不到core_cm3.h这个文件,可能是我们少添加了一些文件吧,添加进去吧:

# 先添加头文件路径
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0/cmsis/TARGET_CORTEX_M

# 再添加缺失的文件到工程中
../mbed-os-tools-release-5.10.0/mbed-os-tools-release-5.10.0/cmsis/TARGET_CORTEX_M/core_cm3.h

继续编译:

compiling mbed_sleep_manager.c...
compiling mbed_us_ticker_api.c...
compiling mbed_ticker_api.c...
compiling flash_common_algo.c...
..\mbed-os-tools-release-5.10.0\mbed-os-tools-release-5.10.0\hal\TARGET_FLASH_CMSIS_ALGO\flash_data.h(57): error:  #101: "flash_s" has already been declared in the current scope
  struct flash_s {
..\mbed-os-tools-release-5.10.0\mbed-os-tools-release-5.10.0\hal\TARGET_FLASH_CMSIS_ALGO\flash_common_algo.c(72): error:  #136: struct "flash_s"  has no field "flash_algo"
          .r9 = (uint32_t)obj->flash_algo->algo_blob + obj->flash_algo->static_base,
..\mbed-os-tools-release-5.10.0\mbed-os-tools-release-5.10.0\hal\TARGET_FLASH_CMSIS_ALGO\flash_common_algo.c(72): error:  #136: struct "flash_s"  has no field "flash_algo"
          .r9 = (uint32_t)obj->flash_algo->algo_blob + obj->flash_algo->static_base,
..\mbed-os-tools-release-5.10.0\mbed-os-tools-release-5.10.0\hal\TARGET_FLASH_CMSIS_ALGO\flash_common_algo.c(73): error:  #136: struct "flash_s"  has no field "flash_algo"
          .pc = (uint32_t)obj->flash_algo->algo_blob + obj->flash_algo->init

不知所云,查看官方提供的demo里并没有flash_common_algo.c这个文件,那就把这个文件从工程中去掉吧。继续编译,发现编译成功。如果需要生成hex文件的话,需要配置一下:
在这里插入图片描述
这样就OK了。

用串口下载Nucleo_printf.hex文件到板子上,查看PinNames.h,这里的SERIAL_TX 对应 PA_2,SERIAL_RX 对应 PA_3,LED1 对应 PA_5,接上杜邦线,发现小灯正常闪烁:
在这里插入图片描述
在这里插入图片描述
串口数据也正常,适配结束。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值