Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread Nano
原创征文
梁山派GD32F450/470-RT-Thread Nano 移植 (二)
发布于 2023-09-25 11:19:03 浏览:1239
订阅该版
在上一篇文章中,我实现了在keil中给梁山派移植RT-Thread Nano,但在官方的移植教程中,除了系统的移植,还有在 RT-Thread Nano 上添加UART控制台与 FinSH的教程,所以我在本文中将实现在梁山派的Nano上添加UART控制台。 还没看过第一篇的可以先去第一篇瞅一瞅:[梁山派GD32F450/470-RT-Thread Nano 移植(一)](https://club.rt-thread.org/ask/article/2d32c106484f38da.html "梁山派GD32F450/470-RT-Thread Nano 移植(一)") ------------ 还是老规矩,先给文件 [Nano移植文件(二).7z](https://club.rt-thread.org/file_download/dd52e4a696ba6049) 文件信息如下 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/c32bfa2d6edb6680aec1bddfd400684c.png.webp) 移植步骤如下: 1、打开不含UART控制台的文件,将梁山派的串口文件加到工程中,如下图所示 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/ef1a274192e45dd1d6a59473cd25646a.png.webp) 在keil工程中双击Hardware文件夹,并在弹出的窗口中选中串口文件并添加进工程中 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/e884cbddc88d7f20f90ed8bd4d923de1.png) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/a8e78a7101423c339340f2e6d4a6cfcd.png) 添加完成后再将文件路径添加到工程包含路径中 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/d283330b902a3c0bac4d7dec98b5bb43.png.webp) 然后我们再将需要的GD32F4库函数文件加入工程,双击Firmware文件夹,找到 \002库函数点灯\Firmware\GD32F4xx_standard_peripheral\Source 路径下的gd32f4xx_misc.c和gd32f4xx_usart.c文件添加到工程中(方法与添加串口文件基本一致,这里不再赘述) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/2d4178e935544b3e546c0165b1d265ae.png.webp) 编译无错 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/b6332b3cb71510ec7d233b3afa95dadc.png.webp) 2、实现串口初始化 RT-Thread的控制台需要通过uart_init实现串口初始化,在board.c文件中已经搭好了基本框架,但是未开启 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/014cfeca32d3f030da893d718f4f056b.png.webp) 所以我们首先要在rtconfig.h 中使能 RT_USING_CONSOLE 宏定义(这个时候编译有错是正常的) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/b64c7d5324ff34a0f0a3efe17330ee0d.png.webp) 然后在board.c文件中完善串口初始化函数uart_init 进入bsp_usart.c文件 复制usart_gpio_config函数中的全部代码,粘贴到board.c的uart_init函数中 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/6dcdfcaf83eea58972ade7949528c425.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/94f4747b88766ee7cce79804506745b7.png.webp) ```c /* 开启时钟 */ rcu_periph_clock_enable(BSP_USART_TX_RCU); // 开启串口时钟 rcu_periph_clock_enable(BSP_USART_RX_RCU); // 开启端口时钟 rcu_periph_clock_enable(BSP_USART_RCU); // 开启端口时钟 /* 配置GPIO复用功能 */ gpio_af_set(BSP_USART_TX_PORT,BSP_USART_AF,BSP_USART_TX_PIN); gpio_af_set(BSP_USART_RX_PORT,BSP_USART_AF,BSP_USART_RX_PIN); /* 配置GPIO的模式 */ /* 配置TX为复用模式 上拉模式 */ gpio_mode_set(BSP_USART_TX_PORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,BSP_USART_TX_PIN); /* 配置RX为复用模式 上拉模式 */ gpio_mode_set(BSP_USART_RX_PORT, GPIO_MODE_AF,GPIO_PUPD_PULLUP,BSP_USART_RX_PIN); /* 配置TX为推挽输出 50MHZ */ gpio_output_options_set(BSP_USART_TX_PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,BSP_USART_TX_PIN); /* 配置RX为推挽输出 50MHZ */ gpio_output_options_set(BSP_USART_RX_PORT,GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, BSP_USART_RX_PIN); /* 配置串口的参数 */ usart_deinit(BSP_USART); // 复位串口 usart_baudrate_set(BSP_USART,band_rate); // 设置波特率 usart_parity_config(BSP_USART,USART_PM_NONE); // 没有校验位 usart_word_length_set(BSP_USART,USART_WL_8BIT); // 8位数据位 usart_stop_bit_set(BSP_USART,USART_STB_1BIT); // 1位停止位 /* 使能串口 */ usart_enable(BSP_USART); // 使能串口 usart_transmit_config(BSP_USART,USART_TRANSMIT_ENABLE); // 使能串口发送 usart_receive_config(BSP_USART,USART_RECEIVE_ENABLE); // 使能串口接收 /* 中断配置 */ nvic_irq_enable(BSP_USART_IRQ, 2, 2); // 配置中断优先级 usart_interrupt_enable(BSP_USART,USART_INT_RBNE); // 读数据缓冲区非空中断和溢出错误中断 usart_interrupt_enable(BSP_USART,USART_INT_IDLE); // 空闲检测中断 ``` 在borad.c中添加头文件,这一步是为了将bsp_usart.h中的一些宏定义引入,不然会报错 ```c #include "bsp_usart.h" ``` ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/1b6e5a9eb65b1cb8a954c838a3ae2e69.png.webp) 最后再将下图中是波特率修改为115200(这个就是控制台串口的波特率,后面如果需要使用其他通信速率,可以来这里修改) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/e162781033d886bbe493455c981f42c9.png.webp) 串口初始化完成 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/63490b3cd1b54658ed1639d4cac8c7d5.png.webp) 3、实现 rt_hw_console_output 这个就相当于串口输出,实现了它,RT-Thread的串口输出函数rt_kprintf才能够使用 将下面代码复制到rt_hw_console_output函数中去 ```c rt_size_t i = 0, size = 0; char a = '\r'; size = rt_strlen(str); for (i = 0; i < size; i++) { if (*(str + i) == '\n') { usart_send_data((uint8_t)a); } usart_send_data((uint8_t)*(str + i)); } ``` 复制前 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/76a0dc7c7c493b0d29f41a5a8fc4932e.png.webp) 复制后(编译无错) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/d42365ed792787a0934b0185f2c95ef8.png.webp) ------------ 以上就实现了在梁山派的Nano上添加UART控制台(实现打印) 搞个例程试一试 在main函数的循环中添加 ```c rt_kprintf("RT-Thread\r"); ``` ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/8e74e306d61e95315b7c986d84e4c76c.png.webp) 例程现象如下: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230925/7bc83d7d62e50e3fc677e1f015f2eead.png.webp) 总结如下: 在梁山派的Nano上添加UART控制台 编写使用rt_kprintf函数串口打印的例程 参考资料: 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 "立创梁山派") 4、[梁山派GD32F450/470-RT-Thread Nano 移植(一)](https://club.rt-thread.org/ask/article/2d32c106484f38da.html "梁山派GD32F450/470-RT-Thread Nano 移植(一)")
5
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
子牧r
这家伙很懒,什么也没写!
文章
5
回答
6
被采纳
0
关注TA
发私信
相关文章
1
求高手指点,RTThread下nanosleep()函数功能如何实现?在线等啊
2
RTT1.2.2在新塘Nano130KE3BN的移植中始终出现栈溢出的问题
3
官方能否出一个nano在mdk下移植finsh到stm32的教程
4
从裸机开始,创建一个RT-Thread Nano系统工程
5
Nano版如何启用shell
6
项目从RTT 2.x NANO移植到 RTT 3.x ENV 环境
7
nano 版本有没有集成到 IAR 中啊?
8
关于MDK5的RT-THREAD NANO中添加MSH组件的例程
9
rtt_nano版本,源代码在哪里下载啊?
10
RTT Nano 在keil 使用C++11 的问题
推荐文章
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
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部