当前位置: 首页 > news >正文

RT-Thread Nano版本在GD32F527I-EVAL评估板的移植

目录

 概述

1 RT-Thread Nano

1.1 Nano版本介绍

1.2 RT-Thread Nano的特点

2  GD32F527I-EVAL上移植Nano

2.1  GD32F527I-EVAL评估版

2.1.1 开发板概述

2.1.2 主要特性与硬件资源

2.2 移植 RT-Thread Nano

2.2.1 下载固件库

2.2.2 移植RT-Thread

2.2.3 修改和RT-Thread相关的代码

3 验证


 概述

本文主要介绍在 GD32F527I-EVAL 评估板上快速移植 RT-Thread Nano 的方法。RT-Thread Nano 版本是一个非常好的入门实践。Nano版本内核精简,非常适合资源受限或需要快速上手的场景。

1 RT-Thread Nano

1.1 Nano版本介绍

RT-Thread Nano 是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。适用32 位 ARM 入门级 MCU 。

下图是 RT-Thread Nano 的软件框图,包含支持的 CPU 架构与内核源码,还有可拆卸的 FinSH 组件:

1.2 RT-Thread Nano的特点

RT-Thread Nano 在使用上也非常简单,带给开发者友好的开发体验。

  • 易裁剪:Nano 的配置文件为 rtconfig.h,该文件中列出了内核中的所有宏定义,有些默认没有打开,如需使用,打开即可。具体的配置可见 Nano 版块的 RT-Thread Nano 配置 教程。
  • 易添加 FinSH 组件:FinSH 组件 可以很方便的在 Nano 上进行移植,而不再依赖 device 框架,只需要对接两个必要的函数即可完成 FinSH 移植。
  • 自选驱动库:可以使用厂商提供的固件驱动库,本文使用GD32F527I_EVAL_Demo_Suites
  • 完善的文档:包含 内核基础、线程管理 (例程)、时钟管理 (例程)、线程间同步 (例程)、线程间通信 (例程)、内存管理 (例程)、中断管理,以及 Nano 版块的移植教程。

2  GD32F527I-EVAL上移植Nano

2.1  GD32F527I-EVAL评估版

2.1.1 开发板概述

GD32F527I-EVAL评估板的核心是GD32F507IGT6芯片。这款MCU基于200MHz主频的ARM Cortex-M4内核,支持硬件FPU和DSP指令集,具有高达3072KB的Flash和256KB的SRAM,性能非常强劲。评估板使用 Mini USB 接口或者 DC-005 连接器提供 5V 电源。提供包括扩展引脚在内的及 SWD, Reset, Boot, User button key, LED, CAN, I2C, I2S, USART, RTC, LCD, SPI, ADC, DAC, EXMC, CTC, SDIO, DCI, ENET, USBFS, USBHS, GD-Link 等外设资源。

2.1.2 主要特性与硬件资源

1)核心微控制器

  • 型号: GD32F507IGT6 (板载芯片,与GD32F527属于同一系列,性能和外设基本一致)

  • 内核: ARM Cortex-M4 @ 200MHz,带FPU

  • 存储: 3072KB Flash, 256KB SRAM

2)丰富的连接与接口

  • 以太网: 10/100M 以太网接口 (RJ45),适用于网络应用。

  • USB:

    • USB FS (Full Speed) 接口

    • USB HS (High Speed) 接口,支持OTG功能。

  • CAN: 2.0B 接口,适用于汽车和工业通信。

  • 音频:

    • 音频编解码器芯片,提供音频输入和输出接口。

    • 一个麦克风。

  • 显示屏: 一块 2.4英寸TFT LCD 彩色显示屏,带电阻式触摸屏。

3)  板载调试器

 集成了 GD-Link 调试器,通过一个USB Type-C接口即可完成供电、程序下载和调试,无需额外购买仿真器,非常方便。

2.2 移植 RT-Thread Nano

2.2.1 下载固件库

1) 在兆易创新的官网上下载驱动库和Demo库

https://www.gd32mcu.com/cn/product
https://www.gd32mcu.com/cn/download/7?kw=GD32F5

  

  

2) 解压文件后得到如下内容

  

2.2.2 移植RT-Thread

笔者选择以04_USART_Printf_rtos为例, 基于基于Keil开发软件  移植该系统。

  

1) 在Keil中选择RT-Thread

  

2)  配置编译器版本

  

完成以上配置后,项目软件架构如下:

  

2.2.3 修改和RT-Thread相关的代码

1) 在board.c文件中配置时钟,并初始化串口

配置串口相关的代码

源代码如下:

/*** This function will initial your board.*/
void rt_hw_board_init(void)
{
//#error "TODO 1: OS Tick Configuration."/* * TODO 1: OS Tick Configuration* Enable the hardware timer and call the rt_os_tick_callback function* periodically with the frequency RT_TICK_PER_SECOND. *//* configure systick */systick_config();// bsp_board_init();/* Call components board initial (use INIT_BOARD_EXPORT()) */
#ifdef RT_USING_COMPONENTS_INITrt_components_board_init();
#endif#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif
}#ifdef RT_USING_CONSOLEstatic int uart_init(void)
{
//#error "TODO 2: Enable the hardware uart and config baudrate."/* configure EVAL_COM0 */gd_eval_com_init(EVAL_COM0);return 0;
}
INIT_BOARD_EXPORT(uart_init);void rt_hw_console_output(const char *str)
{uint32_t data;
//#error "TODO 3: Output the string 'str' through the uart."rt_size_t i = 0, size = 0;char a = '\r';size = rt_strlen(str);for (i = 0; i < size; i++){if (*(str + i) == '\n'){data = a;usart_data_transmit(EVAL_COM0, data);while(RESET == usart_flag_get(EVAL_COM0, USART_FLAG_TBE));}data = *(str + i);usart_data_transmit(EVAL_COM0, data);while(RESET == usart_flag_get(EVAL_COM0, USART_FLAG_TBE));}
}#endif

2) 在finsh_port.c中加载串口接收函数

源代码如下:

#include <rthw.h>
#include <rtconfig.h>
#include "gd32f527i_eval.h"
#include "systick.h"#ifndef RT_USING_FINSH
#error Please uncomment the line <#include "finsh_config.h"> in the rtconfig.h 
#endif#ifdef RT_USING_FINSHRT_WEAK char rt_hw_console_getchar(void)
{/* Note: the initial value of ch must < 0 */int ch = -1;//#error "TODO 4: Read a char from the uart and assign it to 'ch'."while (usart_flag_get(EVAL_COM0, USART_FLAG_RBNE) == RESET);  // 等待接收完成ch= usart_data_receive(EVAL_COM0);                            // 返回接收到的数据return ch;
}#endif /* RT_USING_FINSH */

3) 修改rtconfig.h中相关的配置

step-1:  修改栈空间

  

step-2:  使能控制台

  

step-3: 在系统tick函数中调用rt_os_tick_callback()

  

完成以上步骤后,可以编译代码,编译结果如下:

  

3 验证

编译代码,下载到开发板中运行:
在主函数中调用rt_thread_mdelay(),在main.c中包含如下头文件:

#include "gd32f527.h"
#include "gd32f527i_eval.h"
#include "systick.h"
#include <stdio.h>
#include <rtthread.h>

  

下载代码至板块,其运行结果如下:
  

运行一些RT-Thead的一些命令:

help

  

ps

  

其他命令如下:

RT-Thread shell commands:
version          - show RT-Thread version information
list_thread      - list thread
list_sem         - list semaphore in system
list_mailbox     - list mail box in system
list_timer       - list timer in system
help             - RT-Thread shell help.
ps               - List threads in the system.
free             - Show the memory usage in the system.msh >
msh >

http://www.dtcms.com/a/529267.html

相关文章:

  • 网站的优势是什么意思杭州网站建设哪家快速上线
  • AI大模型:(二)6.2 YOLO模型训练实践及目标跟踪
  • 手机端网站关键词排名内衣网站建设推广
  • Python第三方库pip和conda指令无法下载某些库解决办法
  • 网站套餐表格模板怎么做蛋糕店的网站
  • 哪里建设网站最好用做图的兼职网站
  • 为歌手做的个人网站seo编辑培训
  • 学习从0开始使用内网穿透工具cpolar(个人记录、详细图解)
  • wordpress模板免费win7优化大师官网
  • Linux 文本处理“三剑客”:sed命令完全指南
  • Graph + Agents 融合架构:2025年七大创新路径
  • 临沂网站制作费用如何做自己公司网站
  • STM32H723ZGT6 ADC+DMA多通道-老是进入DMA中断错误函数且不进入adc回调函数总结
  • 成毅李一桐《天地剑心》今日开播 热血群像演绎东方英雄故事
  • Atlas 200I A2 加速模块-GPU适配
  • 石家庄职业技术学院教务网络管理系统三明网站优化
  • 【经典书籍】C++ Primer 第18章如何设计一个“好用、好看、好改”的函数精华讲解
  • Qt Creator:避免QRunnable和QObject多重继承
  • 抽奖机网站怎么做wordpress小工具是哪个文件夹
  • 简述网站推广的方法做一个app需要多少成本
  • JsonRpc框架介绍和环境搭建
  • 网站右下角悬浮窗口js代码 兼容各浏览器如何看还在建设的网站
  • qq浏览器收录网站提交入口wordpress 博客 视频
  • 关于宽带网络下公网地址的理解
  • 【面经】2025年软件测试面试题,精选100 道(附答案)
  • 网站风格优势网页设计哪里好
  • 案例研究_CVE-2018-1000517
  • 内存补丁技术:破解与防护的终极对决
  • 20251019状压DP总结
  • 西部数码网站管理助手v3.0产品设计ppt案例