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

电子说

1.2w人已加入

描述

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

文件信息如下

RT-Thread

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

RT-Thread

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

RT-Thread

RT-Thread

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

RT-Thread

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

RT-Thread

编译无错

RT-Thread

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

RT-Thread

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

RT-Thread

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

RT-Thread

/* 开启时钟 /
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"

RT-Thread

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

RT-Thread

串口初始化完成

RT-Thread

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

复制前

RT-Thread

复制后(编译无错)

RT-Thread

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

rt_kprintf("RT-Threadr");

RT-Thread

例程现象如下:

RT-Thread

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

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分