首页 > 其他分享 >GD32F427移植-RT-Thread标准版

GD32F427移植-RT-Thread标准版

时间:2023-09-25 20:15:45浏览次数:54  
标签:RT startup Thread GD32F4xx BSP 修改 标准版 移植

GD32 移植RT-Thread标准版

1 前言

这篇文档主要记录自己基于BSP移植RTT标准板到GD32的过程。

目标芯片:GD32F427V

使用工具:keil、env

2 参考资料

【GD32F427开发板试用】从0开始到RTthread移植

教你动手移植RT-Thread到国产MCU

【国产MCU移植】手把手教你使用RT-Thread制作GD32系列

3 移植步骤

3.1 下载官方的BSP文件

从git仓库下载官方仓库

git clone https://github.com/RT-Thread/rt-thread.git

3.2 找到BSP基础工程

RT仓库中已有许多GD的BSP,选择一个与自己的最接近的,这里我以GD32F407的作为基础模板进行修改。

进入目录:

rt-thread\bsp\gd32\arm

复制一份BSP文件并根据需要重命名

3.3 下载官方库文件并更新驱动

下载官方的hal库,因为会不断更新,所以最好下载一下。

GD32固件库

解压复制替换到以下路径

gd32\arm\libraries

3.4 修改BSP构建脚本

修改board文件下的两个bsp脚本文件:

1.修改SConscript文件代码第25行为对应芯片型号:

import os
import rtconfig
from building import *

Import('SDK_LIB')

cwd = GetCurrentDir()

# add general drivers
src = Split('''
board.c
''')

path =  [cwd]

startup_path_prefix = SDK_LIB

if rtconfig.PLATFORM in ['gcc']:
    src += [startup_path_prefix + '/GD32F4xx_Firmware_Library/CMSIS/GD/GD32F4xx/Source/GCC/startup_gd32f4xx.s']
elif rtconfig.PLATFORM in ['armcc', 'armclang']:
    src += [startup_path_prefix + '/GD32F4xx_Firmware_Library/CMSIS/GD/GD32F4xx/Source/ARM/startup_gd32f4xx.s']
elif rtconfig.PLATFORM in ['iccarm']:
    src += [startup_path_prefix + '/GD32F4xx_Firmware_Library/CMSIS/GD/GD32F4xx/Source/IAR/startup_gd32f4xx.s']

//修改为对应的芯片型号
CPPDEFINES = ['GD32F427']
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES)

Return('group')

2 修改Kconfig文件

menu "Hardware Drivers Config"

config SOC_SERIES_GD32F4xx
    bool
    default y

config SOC_GD32427V //修改芯片型号
    bool
    select SOC_SERIES_GD32F4xx
    select RT_USING_COMPONENTS_INIT
    select RT_USING_USER_MAIN
    default y

menu "Onboard Peripheral Drivers"

  1. 修改keil链接文件:

    .icf文件为IAR编译脚本、.ld为GCC编译脚本、.sct为mdk编译脚本。

    主要修改RAM和ROM的起始地址。

    这里的起始地址主要根据芯片手册来。F427VET的rom和ram大小为:

    因为RAM大小为192K,所以设置为0X00030000;Faslh大小为512K,所以设置为:0x00080000;

    ; *************************************************************
    ; *** Scatter-Loading Description File generated by uVision ***
    ; *************************************************************
    
    LR_IROM1 0x08000000 0x00080000   {    ; load region size_region
      ER_IROM1 0x08000000 0x00080000   {  ; load address = execution address
       *.o (RESET, +First)
       *(InRoot$$Sections)
       .ANY (+RO)
      }
      RW_IRAM1 0x20000000 0x00030000  {  ; RW data
       .ANY (+RW +ZI)
      }
    }
    

3.5 修改工程模板

修改template工程,这样后续生成的时候可以根据这个生成

修改部分包括:芯片型号、DEBUG工具、FLASH和ROM地址。

这里的ROM和RAM地址设置方法和前面的一样。

3.6 映射串口的修改

rtt的rt_printf会选择对应的串口,所以确认自己使用的串口是不是driver.c定义的:

static const struct gd32_uart uart_obj[] = {
    #ifdef BSP_USING_UART0
    {
        USART0,                                 // uart peripheral index
        USART0_IRQn,                            // uart iqrn
        RCU_USART0, RCU_GPIOA, RCU_GPIOA,       // periph clock, tx gpio clock, rt gpio clock
#if defined SOC_SERIES_GD32F4xx
        GPIOA, GPIO_AF_7, GPIO_PIN_9,           // tx port, tx alternate, tx pin
        GPIOA, GPIO_AF_7, GPIO_PIN_10,          // rx port, rx alternate, rx pin
#else
        GPIOA, GPIO_PIN_9,           // tx port, tx pin
        GPIOA, GPIO_PIN_10,          // rx port, rx pin
#endif
        &serial0,
        "uart0",
    },
    #endif

3.7 ENV工具配置串口

主要的配置BSP已经做了修改,精力放在外设的操作上即可。

ENV 的使用和配置参见官方

配置完成后编译:
scons

编译后生成keil工程:
scons --target=mdk5

3.8 下载验证

出现以下则代表移植成功。

个人意见:如果不需要RTT的软件生态,使用nano版本就足够了,但是秉持着不畏难的原则,还是把学着去接触标准版本。Nano的移植在我其他的文章里有提及。

标签:RT,startup,Thread,GD32F4xx,BSP,修改,标准版,移植
From: https://www.cnblogs.com/PhoenixTree/p/17728736.html

相关文章

  • 关于echarts图表x轴数据隔一个显示,如何让其全部显示
    问题描述能够获取到数据库的数据,但是x轴仅仅显示一半的数据,想要显示全部数据;问题解决将这里改成这样:表示间隔为0然后就能全部显示出来啦:......
  • WebRTC C++ 线程和线程管理剖析
    线程管理实例化代码(单例)ThreadManager*ThreadManager::Instance(){staticThreadManager*constthread_manager=newThreadManager();returnthread_manager;}初始化位置WebRTC中启动新线程的标准方法是通过创建Thread对象,然后调用Thread.Start()方法来启用......
  • Android平台轻量级RTSP服务模块如何实现一个服务发布多路RTSP流?
    我们在做Android平台轻量级RTSP服务和内网RTSP网关的时候,遇到过这样的问题,如何同时发布多路RTSP流出去?回答这个问题,实际上不难,大牛直播SDK在设计这个模块的时候,考虑到了一个Service带多路流的情况,以下是大概的技术实现:启动RTSP服务:启动RTSP服务的时候,你可以注意到OpenRtspServer()......
  • 使用json+echarts实现数据库数据的可视化
    因为我上次是使用的另外一种方法实现的可视化,对json了解的不够,所以来补充一下这一块的知识点1、新建一个SpringBoot项目2、添加依赖<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><d......
  • 【SmartApi】设置超时时间timeout
    在内测几个版本后,有用户反应设置请求超时时间过于麻烦和不直观,于是在和大家交流后把这个功能提上日程,事实上这个功能设置还是很简单的,于是就在请求面板里添加了一个timeout选项卡,如下图:具体使用如下:1、选择一个api请求,点击“timeout”选项卡如下图:2、这里有两项功能,第一个是......
  • nginx: The plain HTTP request was sent to HTTPS port
    问题描述TheplainHTTPrequestwassenttoHTTPSport当访问用http时则报错。用https时不报错。检查配置:server{listen80ssl;server_namehngj.zxynyxxx.cn;ssl_certificate/usr/local/nginx/cert/hngj.zxynyxxx.cn.pem;ssl_certificate_key/usr......
  • VMware ESXi 8.0U2 macOS Unlocker & OEM BIOS 标准版和厂商定制版
    VMwareESXi8.0U2macOSUnlocker&OEMBIOS标准版和厂商定制版ESXi8.0U2标准版,Dell(戴尔)、HPE(慧与)、Lenovo(联想)、Inspur(浪潮)等定制版请访问原文https://sysin.org/blog/vmware-esxi-8-u2-oem/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org2023-......
  • @ConfigurationProperties配置类的新操作
    对应的yml文件:logging:level:org.springframework.web:INFOcom.github.binarywang.demo.wx.mp:DEBUGme.chanjar.weixin:DEBUGwx:mp:useRedis:falseredisConfig:host:127.0.0.1port:6379configs:-appId:1111......
  • Uncaught TypeError: Cannot read properties of undefined (reading 'form')问题的解
    问题描述使用vue3执行数据添加操作时,发现了这个错误,使用测试按钮拿文本框数据,一直报错拿不到:问题解决原来是vue2在执行这个操作时:里面放this.form;而vue3在执行这个操作时,里面放的却是:form......
  • WPF中以MVVM方式,实现RTSP视频播放
    前言视频播放在上位机开发中经常会遇到,基本上是两种常见的解决方案1.采用厂家提供的sdk和前端控件进行展示,常见的海康/大华都提供了相关sdk及文档2.开启相机onvif协议,捅过rtsp视频流进行播放,前端可以采用web方式,或者wpf中的视频控件进行展示。项目需求,决定了最终采用开启相机on......