NUCLEO-F411RE RT-Thread 体验 (3) - GCC环境 uart驱动的移植以及console的使用

NUCLEO-F411RE RT-Thread 体验 (3) - GCC环境 uart驱动的移植以及console的使用

1、准备工作

在第一节里,我们用stm32cubemx将pa2 pa3管脚配置成usart2,用于跟st-link虚拟串口的打印用,那么我们先重定向printf函数,看这条通道是否行的通。
在这里插入图片描述
在rt-thread线程里调用
在这里插入图片描述
烧录进板卡后,打印如下:
在这里插入图片描述
说明硬件连接与软件配置都没问题。

2、uart驱动的移植

1、修改makefile文件,将驱动编译进去

在这里插入图片描述

2、第一次编译报错

在这里插入图片描述
提示这个函数找不到,这个函数在console.c里面,我们也编译进来。console.c与drv_usart.c什么关系呢?
drv_usart.c往下对接hal库,往上对接的是device.c,我们在应用层想要操作串口的话,调用的就是device.c中的函数。而这个console.c也属于一个应用层的封装,调用的也是device.c中的函数。
在这里插入图片描述

3、 第二次编译报错

在这里插入图片描述
这个函数定义在completion.c中,也编译进去。

在这里插入图片描述

4、第三次编译

编译无报错,烧录后LED闪烁,usart驱动添加完成。

3、console的移植

1、打印rt-thread版本信息

我们已经移植好了串口的驱动,这时候调用device.c中操作串口的函数,应该就能够从串口中读写到数据。
console,顾名思义,控制台,rt-thread封装了类似linux控制台的东西,说白了就是利用一路串口,完成与设备的交互。

1、rtconfig.h中使能console的相关配置

在这里插入图片描述

2、初始化代码添加。

在这里插入图片描述
编译烧录进去是不是就有rt-thread的版本信息了?
在这里插入图片描述

2、RT-Thread版本信息打印流程

startup_stm32f411xe.s中调用bl entry
在这里插入图片描述
entry函数调用rtthread_startup();
在这里插入图片描述
rtthread_startup中调用rt_show_version()函数
在这里插入图片描述
rt_show_version中调用rt_kprintf
在这里插入图片描述
而rt_kprintf在使能RT_USING_DEVICE配置时调用的rt_device_write函数。这个就是device.c的函数了。
如果是nano版本,没有使能RT_USING_DEVICE配置,那么就要自己完成rt_hw_console_output函数,也就是对接一下hal库的发送串口发送函数。
在这里插入图片描述

3、finsh组件的移植

之前我们已经将finsh组件编译进去了,可是终端却不能输入。
后来发现这个 INIT_APP_EXPORT 函数声明的函数并没有自动被调用。在这里插入图片描述
后来去查看rt-thread源码里的ld文件时候,发现这么一些差异。
在这里插入图片描述
把这些copy到我们的STM32F411RETx_FLASH.ld文件中
在这里插入图片描述
重新编译烧录
在这里插入图片描述
大功告成!
4、代码
代码下载

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值