Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
GD32
原创征文
梁山派GD32F450/470-RT-Thread Nano 移植(一)
发布于 2023-09-21 21:25:35 浏览:2116
订阅该版
本文是在keil中给梁山派移植RT-Thread Nano版本 ------------ 之所以使用Nano版本,是因为暂时对软件包没什么需求,只是想使用RT-Thread的内核,而Nano版本正好满足我目前的需求,所以最后选择Nano版本进行移植。 下面是Nano版本的简介 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/6c3074dab589eb255481b103999cc846.png.webp) [Nano移植文件.7z](https://club.rt-thread.org/file_download/53d131fde2ac8b45) 先给文件,文件信息如下 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/eb023406c2ecfbc1082b9c599c9a9a7a.png.webp) 移植步骤如下: 1、准备好一份梁山派的例程文件,在上面的压缩包中已经给出 不过如果你想获得更多的梁山派例程文件,可以在这个链接中找到 [立创开发板-梁山派教程文档](https://lckfb.com/docs/lckfb_lspi/#/ "立创开发板-梁山派教程文档") 或者是这个链接[立创梁山派](https://lceda001.feishu.cn/wiki/JNDHwxPWWi99CJk6SkMc6Z3Yn2e "立创梁山派") 这些都是嘉立创官方建立的梁山派资料文档 2、在keil上安装RT-Thread Nano Pack(如果已安装,直接进入下一步) 有两种方式,在keil在线下载,或离线安装,我个人推荐离线安装,毕竟我从没在keil中安装成功过,所以我这里仅介绍离线安装方式 [RealThread.RT-Thread.3.1.5.pack](https://club.rt-thread.org/file_download/c1a3b6510121434a) 将上面的Nano离线安装包下载,安装即可 3、将RT-Thread Nano添加到工程中 打开一个梁山派的例程,我上面打包好的库函数点灯的程序就可以,然后如图勾选点确认即可 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/2a7d221d01d9006044695403bc2ceaeb.png.webp) 可以看到RT-Thread Nano已经添加到工程中去,别看文件很多,可我们需要且能修改的文件也只有board.c和rtconfig.h这两个文件 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/4dd4e1bcc5f881e0206333bcf668244e.png.webp) 4、系统时钟配置 打开board.c文件,有两个函数需要我们处理,分别是rt_os_tick_callback和rt_hw_board_init,一个负责系统调度(提供节拍),一个负责系统初始化 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/abb6d69da80a6b644faacfc01f5c8f16.png.webp) 4.1首先是rt_hw_board_init,我们先将其扩展出去,使其能够被其他文件调用,在rtconfig.h中添加如下代码 ```c extern void rt_os_tick_callback(void); ``` ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/c6afaf7db70991b6793a65d5ac6a55de.png.webp) 然后将其放到滴答定时器中断服务函数中,该服务函数在gd32f4xx_it.c文件中,如下图所示(须在该.c文件中添加对应头文件,如下第二张图所示) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/c5799fc7e9aaafae312997be5fb50feb.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/026ee0cc938257bc5f46c86949b85e7c.png.webp) 需要注意的是,这个滴答定时器进入中断的周期应为1ms,而在本程序中滴答定时器的周期正是1ms,所以无需修改,该周期的配置在systick.c文件中的systick_config函数中修改,该函数正是滴答定时器的初始化配置函数 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/d0705eac2af7e394ddd0a2104afc66d6.png.webp) 4.2然后是rt_hw_board_init,这个函数我个人理解是负责系统初始化的函数,该函数的配置只需要将下图中选中的部分删去即可 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/56b17852e63984e3078907b6c75152c5.png.webp) 5、最后处理 此时移植已经基本完成,但如果我们点击编译,会发现还是会报两个错,如下图所示 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/803ba4e13e0ad2f56b0a470c026634e8.png.webp) 原因是RT-Thread 会接管异常处理函数 HardFault_Handler() 和悬挂处理函数 PendSV_Handler(),而在gd32f4xx_it.c已经对这两个函数进行了定义,相当于冲突了,所以我们删去gd32f4xx_it.c中的这两个函数即可 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/81f5b8db55c06d381e7b548c8ea480b1.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/5d0e366451f5fb57d5abf116d2386831.png.webp) 删去后编译0错误0警告 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/9d89df52f90d6154fbb3d34e68d9314e.png.webp) ------------ 以上就是移植的全过程 搞个例程试一下 将main函数中的初始化函数放到board.c文件中的rt_hw_board_init函数里(注意在board.c引用相应头文件) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/43815ab2aa1cef25af517e45659894d5.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/fd4f89bab9c62e30639bfbf3e77c49a4.png.webp) 将如下代码对main.c中的代码进行替换 ```c /******************************************************************************** * 文 件 名: main.c * 版 本 号: 初版 * 修改作者: LC * 修改日期: 2022年04月12日 * 功能介绍: ****************************************************************************** * 注意事项: *********************************************************************************/ #include "gd32f4xx.h" #include "systick.h" #include
#include "main.h" #include "bsp_led.h" #include
#define THREAD_PRIORITY 25 #define THREAD_STACK_SIZE 512 #define THREAD_TIMESLICE 5 /* 线 程 入 口 */ void thread1_entry(void *parameter) { while(1) { gpio_bit_toggle(PORT_LED1,PIN_LED1); gpio_bit_toggle(PORT_LED2,PIN_LED2); rt_thread_mdelay(1000); } } /************************************************ 函数名称 : main 功 能 : 主函数 参 数 : 无 返 回 值 : 无 作 者 : LC *************************************************/ int main(void) { rt_thread_t tid = RT_NULL; /* 创 建 线 程 1 */ tid = rt_thread_create("thread1", thread1_entry, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE); if (tid != RT_NULL) rt_thread_startup(tid); while(1) { gpio_bit_toggle(PORT_LED3,PIN_LED3); gpio_bit_toggle(PORT_LED4,PIN_LED4); rt_thread_mdelay(1000); } } ``` 编译后无错 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230921/0fac88796e0c65cab2becbee660a5476.png.webp) 最终实现效果: 实现梁山派的四个小灯以1s间隔进行闪烁 实现线程调度和rtt延时函数 参考资料: 1、[基于 Keil MDK 移植 RT-Thread Nano](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/nano-port-keil/an0039-nano-port-keil "基于 Keil MDK 移植 RT-Thread Nano") 2、[立创开发板-梁山派教程文档](https://lckfb.com/docs/lckfb_lspi/#/ "立创开发板-梁山派教程文档") 3、[立创梁山派](https://lceda001.feishu.cn/wiki/JNDHwxPWWi99CJk6SkMc6Z3Yn2e "立创梁山派")
7
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
子牧r
这家伙很懒,什么也没写!
文章
5
回答
6
被采纳
0
关注TA
发私信
相关文章
1
NANO 可以使用 C++ 11 嘛?
2
gd32f407 lwip 可以ping通,但是建立tcp-server不能连接
3
请问rt-thread studio什么时候可以自带适配gd32功能呢?
4
RT-THREAD-GD32303E-EVAL百度网盘链接怎么打不开呀?
5
ENV编译GD32E230提示错误
6
GD32F407的ram求助
7
GD32F107VCT6 移植问题
8
RT-Thread stdio 支持GD32吗
9
有项目从STM32转到GD32平台的么?请问代码改动的工作量会不会非常大?
10
GD32E230G8 使用TIMER0 比较模式,初始化死机。
推荐文章
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组件
热门标签
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
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部