RT-Thread:RT-Thread-smart移植到GD32E103


前言

之前移植过RT-Thread Nano版本,但是这个版本是简易版的,这次我们借助RTT官方RT-Thread-smart版本现有的GD32F303E-EVAL代码来移植我们的GD32E103R。

一、替换文件、裁剪工程

1、复制一个GD32F303的工程,修改工程名为gd32e103,将里面Libraries文件夹中的文件替换成官方提供的GD32E103的GD32E10x_Firmware_Library文件夹下的所有文件。
官方文件:
在这里插入图片描述
RTT官方gd32f303e的Libraries文件夹文件:
在这里插入图片描述
替换对应芯片库文件:
在这里插入图片描述
2、使用env对工程进行最简化
只开启串口1:
在这里插入图片描述
关闭文件系统:
在这里插入图片描述
禁用spi:
在这里插入图片描述
禁用USB HOST:
在这里插入图片描述
不使能这些库:
在这里插入图片描述
3、退出保存,输入scons --target=mdk5重新生成工程

二、修改各种编译错误

1、修改Libraries的文件路径
在这里插入图片描述
2、修改宏为USE_STDPERIPH_DRIVER,GD32E10X,GD32E103R_START
在这里插入图片描述
3、更换芯片型号
在这里插入图片描述
4、删除异常文件,新添我们的文件,路径为GD32E10x_Firmware_Library\GD32E10x_standard_peripheral\Source、GD32E10x_Firmware_Library\CMSIS\GD\GD32E10x\Source、GD32E10x_Firmware_Library\CMSIS\GD\GD32E10x\Source\ARM在这里插入图片描述
在这里插入图片描述
5、修改board.h文件
在这里插入图片描述
6、修改文件名,理论上下面有关于gd32f3033的文件都要改名,但是他们目前都不会用到,不该都是可以的,为了简便目前先不改。
在这里插入图片描述
7、根据固件库修改gd32e10x_libopt.h文件
在这里插入图片描述

#ifndef GD32E10X_LIBOPT_H
#define GD32E10X_LIBOPT_H

#include "gd32e10x_rcu.h"
#include "gd32e10x_adc.h"
#include "gd32e10x_can.h"
#include "gd32e10x_crc.h"
#include "gd32e10x_ctc.h"
#include "gd32e10x_dac.h"
#include "gd32e10x_dbg.h"
#include "gd32e10x_dma.h"
#include "gd32e10x_exti.h"
#include "gd32e10x_fmc.h"
#include "gd32e10x_fwdgt.h"
#include "gd32e10x_gpio.h"
#include "gd32e10x_i2c.h"
#include "gd32e10x_pmu.h"
#include "gd32e10x_bkp.h"
#include "gd32e10x_rtc.h"
#include "gd32e10x_spi.h"
#include "gd32e10x_timer.h"
#include "gd32e10x_usart.h"
#include "gd32e10x_wwdgt.h"
#include "gd32e10x_misc.h"
#include "gd32e10x_exmc.h"

#endif /* GD32F10X_LIBOPT_H */

8、编译发现以下三个错误。我们只要将提示gd32f30x.h文件替换成gd32e10x.h即可,把提示在man.c中的include <sfud_cfg.h>删除即可
在这里插入图片描述
9、再编译有以下错误,修改头文件为gd32e10x_exti.h即可
在这里插入图片描述
10、编译,有新错误出现,修改dev_gpio.c文件,由于原文件是对应GD32F303E的,而我们使用GD32E103没有那些GPIO所以需要修改。
在这里插入图片描述
注意:哪里提示有错误就将__GD32_PIN_DEFAULT,替换上去,因为没有这个GPIO。
修改前:
在这里插入图片描述
修改后:
在这里插入图片描述
11、再次编译,令人惊喜的是提示0错误0警告。
在这里插入图片描述

二、移植代码

1、修改board.c文件
在这里插入图片描述

/* setup systick timer for 1000Hz interrupts */
    if (SysTick_Config(SystemCoreClock / 1000U)){
        /* capture error */
        while (1){
        }
    }
    /* configure the systick handler priority */
    NVIC_SetPriority(SysTick_IRQn, 0x00U);

2、修改board.h中的动态内存池大小,GD32E103RBT6只有运行内存只有32k,我先使用24k,尽量分配大一些,现在都还不知道是否一致成功,避免定义小了遇到什么奇怪,原本这里是64k肯定会有问题的。
在这里插入图片描述
3、打开Debug,选择对应的芯片。
在这里插入图片描述
3、编译,下载和运行,一切正常。
在这里插入图片描述
4、输入ps,根据各个线程占用的栈百分比,调整一下栈分配值,尽量节省空间
在这里插入图片描述
5、修改tidle0线程栈大小
在这里插入图片描述
修改main线程栈大小
在这里插入图片描述
修改tshell线程栈大小
在这里插入图片描述
6、输入free查看总内存占用情况。
在这里插入图片描述
7、自己适当修改一下动态内存池大小,我修改成10k。
在这里插入图片描述
8、再次编译下载运行,一切运行正常。
在这里插入图片描述

三、编写main函数

1、让板子的LED闪烁一下,说明他在运行。
在这里插入图片描述

#include <rtthread.h>
#include <board.h>

int main(void)
{
    /* enable the LED2 GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOC);
    /* configure LED2 GPIO port */ 
    gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_6);
    /* reset LED2 GPIO pin */
    gpio_bit_reset(GPIOC,GPIO_PIN_6);
	
    while(1)
	{
		/* turn on LED2 */
		gpio_bit_set(GPIOC,GPIO_PIN_6);
		rt_thread_mdelay(500);
		/* turn off LED2 */
		gpio_bit_reset(GPIOC,GPIO_PIN_6);
		rt_thread_mdelay(500);
	}
}

2、代码下载。

总结

移植完成,后面会讲如何把GD25Q Flash程序嵌进去,还有如何在Flash上搭载文件系统,还有USB HOST使用,让我躺会尸...一天三篇文章还是挺累的...
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小破孩 != ERR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值