0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

梁山派GD32F450/470-RT-Thread Nano移植(二)

冬至子 来源:子牧r 作者:子牧r 2023-09-25 15:40 次阅读

在上一篇文章中,我实现了在keil中给梁山派移植RT-Thread Nano,但在官方的移植教程中,除了系统的移植,还有在 RT-Thread Nano 上添加UART控制台与 FinSH的教程,所以我在本文中将实现在梁山派的Nano上添加UART控制台。

文件信息如下

1.jpg

移植步骤如下:
1、打开不含UART控制台的文件,将梁山派的串口文件加到工程中,如下图所示

1.jpg

在keil工程中双击Hardware文件夹,并在弹出的窗口中选中串口文件并添加进工程中

1.jpg

1.jpg

添加完成后再将文件路径添加到工程包含路径中

1.jpg

然后我们再将需要的GD32F4库函数文件加入工程,双击Firmware文件夹,找到
�02库函数点灯FirmwareGD32F4xx_standard_peripheralSource
路径下的gd32f4xx_misc.c和gd32f4xx_usart.c文件添加到工程中(方法与添加串口文件基本一致,这里不再赘述)

1.jpg

编译无错

1.jpg

2、实现串口初始化
RT-Thread的控制台需要通过uart_init实现串口初始化,在board.c文件中已经搭好了基本框架,但是未开启

1.jpg

所以我们首先要在rtconfig.h 中使能 RT_USING_CONSOLE 宏定义(这个时候编译有错是正常的)

1.jpg

然后在board.c文件中完善串口初始化函数uart_init
进入bsp_usart.c文件
复制usart_gpio_config函数中的全部代码,粘贴到board.c的uart_init函数中

1.jpg

/* 开启时钟 /
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中的一些宏定义引入,不然会报错

#include "bsp_usart.h"

1.jpg

最后再将下图中是波特率修改为115200(这个就是控制台串口的波特率,后面如果需要使用其他通信速率,可以来这里修改)

1.jpg

串口初始化完成

1.jpg

3、实现 rt_hw_console_output
这个就相当于串口输出,实现了它,RT-Thread的串口输出函数rt_kprintf才能够使用
将下面代码复制到rt_hw_console_output函数中去

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));
}

复制前

1.jpg

复制后(编译无错)

1.jpg

以上就实现了在梁山派的Nano上添加UART控制台(实现打印)
搞个例程试一试
在main函数的循环中添加

rt_kprintf("RT-Threadr");

1.jpg

例程现象如下:

1.jpg

总结如下:
在梁山派的Nano上添加UART控制台
编写使用rt_kprintf函数串口打印的例程

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15234

    浏览量

    171206
  • UART接口
    +关注

    关注

    0

    文章

    123

    浏览量

    15068
  • 串口中断
    +关注

    关注

    0

    文章

    63

    浏览量

    13609
  • RT-Thread
    +关注

    关注

    31

    文章

    1149

    浏览量

    38892
收藏 人收藏

    评论

    相关推荐

    梁山GD32F450/470-RT-Thread Nano移植(一)

    之所以使用Nano版本,是因为暂时对软件包没什么需求,只是想使用RT-Thread的内核,而Nano版本正好满足我目前的需求,所以最后选择Nano版本进行
    的头像 发表于 09-25 15:33 1089次阅读
    <b class='flag-5'>梁山</b>派<b class='flag-5'>GD32F450</b>/<b class='flag-5'>470-RT-Thread</b> <b class='flag-5'>Nano</b><b class='flag-5'>移植</b>(一)

    梁山GD32F450/470-RT-Thread Nano移植(三)

    RT-Thread FinSH 是 RT-Thread 的命令行组件(shell),提供一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息。
    的头像 发表于 09-26 14:50 830次阅读
    <b class='flag-5'>梁山</b>派<b class='flag-5'>GD32F450</b>/<b class='flag-5'>470-RT-Thread</b> <b class='flag-5'>Nano</b><b class='flag-5'>移植</b>(三)

    rt-thread studio新建gd32f450工程

    rt-thread studio 软件版本是:2.2.6;开发板的软件包是:GD32450Z-GD-EVAL版本是V1.0.1;开发板使用兆易的官方开发板GD32F450ZKT6。
    的头像 发表于 09-28 14:17 1214次阅读
    <b class='flag-5'>rt-thread</b> studio新建<b class='flag-5'>gd32f450</b>工程

    如何基于CubeMX移植RT-Thread Nano

    档介绍了如何使用 CubeMX 移植 RT-Thread Nano,并以一个 stm32f103 的基础工程作为示例进行讲解。
    发表于 03-29 06:56

    移植RT-Thread操作系统到GD32星空开发板

    。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。本次移植所使用开发板为GD32星空: 2 代码下载目前RT-Thread提供很
    发表于 10-13 15:56

    移植RT-Thread操作系统到GD32星空开发板

    。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。本次移植所使用开发板为GD32星空: 2 代码下载目前RT-Thread提供很
    发表于 10-13 16:06

    GD32F4系列芯片移植RTOS Demo工程 GD32F407移植FreeRTOS GD32F407移植RT-Thread

    GD32F4系列移植FreeRTOS和RT-Thread工程例程GD32F407/GD32F450
    发表于 06-07 22:10

    现有的BSP工程可以直接在GD32F470上进行开发吗

    大家好:有关于GD32F470的BSP工程的问题咨询,我在GD官网上查照资料了解470450是很相似的,目前因为项目需要使用的470芯片,
    发表于 08-01 10:39

    GD32F310开发板试用+RT-Thread nano移植简介

    Nano 离线安装包下载3、打开一个可以运行的正常的GD32F310K的工程,这里可以到官网下载GD32F3x0_Demo_Suites_V2.2.0。我使用的工程
    发表于 09-22 10:44

    移植RT-Thread BSP中GDF450工程运行在GD32F470芯片上失败如何修改

    各位好:如题,移植GD32F450的工程运行在GD32F470的芯片上,加载成功后程序会死在rt_smem_alloc函数里面的289行代码,RT
    发表于 11-07 14:18

    GD32F450的开发板工程RT系统启动错误如何解决呢?

    我自己设计的GD32F405的板子,在RT-Thread Studio里用的GD32F450的开发板工程,改了一下RAM大小,从128改成了192然后把SDRAM、eth删除,在主函数里写了个打印hello world。然后修改
    发表于 02-21 11:33

    【立创·梁山GD32F4】-1.47寸彩屏模块移植

    例程移植梁山GD32F470上。按照以下步骤,即可完成移植。 将源码导入工程; 根据编译报错处进行粗改; 修改引脚配置; 修改时序配置;
    发表于 08-28 18:18

    基于 Keil MDK 移植 RT-Thread Nano

    本文介绍如何基于 Keil MDK 移植 RT-Thread Nano ,并以一个 stm32f103 的基础工程作为示例进行讲解。 RT-Thread
    发表于 01-26 17:04 16次下载
    基于 Keil MDK <b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>

    如何创建RT-Thread Nano工程

    简单(比freeRTOS移植还简单)等,本文将讲解如何将RT-Thread Nano移植GD32L233C。
    的头像 发表于 03-19 12:13 3291次阅读

    RT-Thread开发GD32F450添加spiflash外设的步骤

    gd32f450工程上使用env工具增加spi falsh。
    的头像 发表于 08-07 14:58 1377次阅读
    <b class='flag-5'>RT-Thread</b>开发<b class='flag-5'>GD32F450</b>添加spiflash外设的步骤