四轴飞行器1.2.2 RT-Thread 串口
首先在rt_hw_board_init()函数里面有个rt_hw_usart_init(),这个就是串口初始化的函数了,而且RTT已经写好了三个串口的初始化,只需要修改下宏定义就可以使用,RTT实在用心良苦啊,这都帮我们写好了。
个人的一点看法,可能不是很全面,能力有限。其实我对函数rt_hw_usart_init()的名字有点异议,我觉得应该写成rt_hw_mcu_usart_init(),为什么呢?没错,我们一般会把系统框架从底层到上层分为 硬件层、驱动层、系统层和应用层,但是在硬件层中我以前做项目的时候会更加细分一下,这样可以方便以后的移植,怎么说呢,我会把它具体分为IO口部分这是硬件层最底层的,然后再分为MCU设备部分,MCU设备部分就包括MCU自带的硬件模块(串口,IIC,SPI,DCMI,SDIO,DMA,定时器等等)。IO口部分是定义各IO口的连接的设备。这样在系统中就会有一个最底层的文件叫做Pindefs.h,用来定义IO口,然后就是MCU部分的各自带设备的驱动。之后才是驱动层,如果只直接操作IO口的驱动可以直接调用Pindefs.h,如果是通过MCU的设备(串口,IIC,SPI)操作外围器件,驱动可以调用MCU部分的驱动。之所以把MCU设备部分放在硬件层而不是驱动层我是这样考虑的,很简单,驱动层调用MCU设备部分对外围设备进行操作,MCU设备部分比驱动层第一级,所以放在硬件层了,也比较好理解。然后将驱动层和硬件层统一划为BSP层,也就是班级支持包层。这样细分之后的好处就是当更改板子布局,改变IO口功能的时候,只需要改变Pindefs.h就完成了移植,如果更换了MCU,只需要更换MCU设备部分的代码,可以提高系统的灵活性,而且代码重用率也可以很高,用过一个MCU后,以后用这款MCU大部分代码就都可以重用了。
接下来讲正事,在rt_hw_usart_init() 函数里面,可以看到通过三个宏定义进行预编译,需要用哪个就定义对应的宏定义,RTT就会对对应的串口进行初始化了,宏定义如下:
#define RT_USING_UART1
#define RT_USING_UART2
#define RT_USING_UART3
宏定义在 Board.h里面,呵呵,我又觉得这个名字是mcu.h对我来说会更习惯些。。
宏定义好了,然后串口怎么输出数据呢?在RTT里面调用设备驱动的接口函数rt_device_write就可以实现串口的打印了,具体我们以控RTT的控制台应用(finsh)为例进行下说明。
在rt_hw_usart_init() 下面有个函数
#ifdef RT_USING_CONSOLE
rt_console_set_device(CONSOLE_DEVICE);
#endif
这是个控制台初始化函数,关于CONSOLE_DEVICE 有在Board.h 里面有如下定义,意思就是定义控制台通过哪个串口和外界通讯,我们板子是窗口1,所以#define STM32_CONSOLE_USART 1 ,同时RT_USING_CONSOLE 预编译宏定义一定要记得打开。
#define STM32_CONSOLE_USART 1
#if STM32_CONSOLE_USART == 0
#define CONSOLE_DEVICE "no"
#elif STM32_CONSOLE_USART == 1
#define CONSOLE_DEVICE "uart1"
#elif STM32_CONSOLE_USART == 2
#define CONSOLE_DEVICE "uart2"
#elif STM32_CONSOLE_USART == 3
#define CONSOLE_DEVICE "uart3"
#endif
这个控制台是怎么用的呢?主要是通过rt_kprintf函数调用的,类似于VC中的printf函数,printf通过电脑屏幕显示,rt_kprintf是通过串口打印出来,在电脑装个串口调试助手就可以显示出来了。在rt_kprintf函数中可以看到函数 rt_device_write(_console_device, 0, rt_log_buf, length); 其中_console_device就是在之前rt_console_set_device设定好的串口对应的设备的句柄(暂时称之为句柄),调用rt_device_write数据就通过串口发出去了。

四轴飞行器1.2.2 RT-Thread 串口的更多相关文章
- 四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法
四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法 原创文章,欢迎转载,转载请注明出处 最近时间花在最多的地方就是STM32的I2C上了.之前就知道STM32的I2C并不好用, ...
- 四轴飞行器1.1 Matlab 姿态显示
四轴飞行器1.1 Matlab 姿态显示 开始做四轴了,一步一步来,东西实在很多,比较杂.先做matlab上位机,主要用来做数据分析,等板子到了可以写飞控的程序了,从底层一层一层开始写..希望能好好的 ...
- 四轴飞行器1.5 各种PID对比分析及选择
原创文章,欢迎转载,转载请注明出处 这篇文章主要介绍我对PID的理解,以及选择PID算法的过程. 一 PID的理解和学习过程 二 飞控的PID效果 先上个飞控PID的响应的视频:介绍在后面 地址:ht ...
- 四轴飞行器1.7 NRF24L01P无线通讯和改进型环形缓冲(转)
源: 四轴飞行器1.7 NRF24L01P无线通讯和改进型环形缓冲
- 从零开始的四轴飞行器-开篇flag
在这里立下flag,我要理解学会四轴飞行器的控制方法.
- 四轴飞行器飞行原理与双闭环PID控制
四轴轴飞行器是微型飞行器的其中一种,相对于固定翼飞行器,它的方向控制灵活.抗干扰能力强.飞行稳定,能够携带一定的负载和有悬停功能,因此能够很好地进行空中拍摄.监视.侦查等功能,在军事和民用上具备广泛的 ...
- RT Thread 通过ENV来配置SFUD,操作SPI Flash
本实验基于正点原子stm32f4探索者板子 请移步我的RT Thread论坛帖子. https://www.rt-thread.org/qa/forum.php?mod=viewthread& ...
- STM32 + RT Thread OS 串口通讯
1. 创建项目 a) 禁用Finsh和console b) 默认情况下,项目文件包含了finsh,它使用COM1来通讯,另外,console输出(rt_kprintf)也使用了COM1.因 ...
- STM32 + RT Thread OS 学习笔记[二]
串口通讯例程 通过上面的练习,对STM32项目开发有了一个直观印象,接下来尝试对串口RS232进行操作. 1. 目标需求: 开机打开串口1,侦听上位机(使用电脑串口测试软件)发送的信息,然后原样输 ...
随机推荐
- ASP.NET动态引用WebService接口
尊重原著作:本文转载自http://www.mhzg.net/a/20124/20124912180589.html 有经验的朋友都知道,通常我们在引用webservice的时候,是在项目中就添加了引 ...
- GCD 续集
1.延迟执行 1.1.perform... // 3秒后自动回到当前线程调用 self 的 download: 方法,并且传递参数:@“http://xxx.jpg” [self performSel ...
- Linux学习之sed命令详解
概述 sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区 ...
- QF——网络之JSON解析和XML解析
JSON解析和XML解析: 用苹果原生的代理方式的网络请求后返回的都是二进制数据(NSData). 若是json,则通过NSJSONSerialization把NSData数据转换为JSON对象. N ...
- mysql开启慢查询方法
1,配置开启 Linux: 在mysql配置文件my.cnf中增加 log-slow-queries=/var/lib/mysql/slowquery.log (指定日志文件存放位置,可以为空,系统会 ...
- Struts2部分标签
由于Struts多用OGNL语言所以使用给类标签之前需引入<%@taglib prefix="s" uri="/struts-tags"%> 1.f ...
- 走进C标准库(1)——assert.h,ctype.h
默默觉得原来的阅读笔记的名字太土了,改了个名字,叫做走进C标准库. 自己就是菜鸟一只,第一次具体看C标准库,文章参杂了对<the standard C library>的阅读和对源码的一些 ...
- SQL Server一些重要视图 1
第一个: sys.indexs 每个堆与索引在它上有一行. 第二个: sys.partitions每个堆与索引的每一个分区返回一行.每一张表最多可以有1000个区. 第三个: sys. allocat ...
- Apache开启expires响应头,优化缓存
apache开始expires响应头输出 expires是什么 指示资源什么时候过期的时间值(GMT时间),在指定的过期时间前,浏览器可以直接使用自身缓存的版本,而不用向服务器发请求,大大减轻服务器压 ...
- [置顶] ProcessOn:划时代性的在线作图工具
ProcessOn是一款专业作图人员的社交网络,这里汇聚很多业界专家.学者,同时他们分享的作品又形成一个庞大的知识图库,你在学习专业知识的同时还可以结交一些志同道合的新朋友. ProcessOn核心设 ...