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、代码
代码下载