四轴飞行器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,侦听上位机(使用电脑串口测试软件)发送的信息,然后原样输 ...
随机推荐
- webView的一些经验总结
部分内容再录于:http://www.360doc.com/content/14/0611/13/15210553_385676271.shtml 一. 加载资源的速度不慢,但是资源多了,就很慢 ...
- MySQL报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:NO)
1.关闭mysql # service mysqld stop2.屏蔽权限 # mysqld_safe --skip-grant-table 屏幕出现: Starting demo fro ...
- Oracle中使用透明网关链接到Sqlserver[Z]
Oracle中使用透明网关链接到Sqlserver 在最近项目中需要从Oracle中访问SQL Server数据库, 自然想到了透明网关. 因为Oracle数据库是Linux上的, 而Linux上的O ...
- MySQL 中文显示乱码以及中文查询条件返回0条结果的问题解决
最近关于中文显示乱码的贴子比较多,所以也做了个总结: 可以参考一下杨涛涛版主的<各种乱码问题汇总>http://topic.csdn.net/u/20071124/08/3b7eae6 ...
- 20151217--Ajax的一点补充
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- return break continue 的区别
1)break 直接跳出当前的循环,从当前循环外面开始执行,忽略循环体中任何其他语句和循环条件测试.他只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来 ...
- std::string 字符替换函数
// 替换路径中所有“\”为“/” #include <algorithm> static std::string ConvertSlash(std::string& strUrl ...
- Apache配置参数
Apache的配置文件 配置文件所在目录:/etc/httpd/conf/主配置文件:httpd.conf旧版本中的配置文件:资源配置文件:srm.conf访问许可权配置文件:access.conf ...
- 比callback更简洁的链式执行promise
promise自己理解的也不够深刻,具体知识点不在这里细说了 直接上个例子,清晰明了,自己去悟吧 <script type="text/javascript"> //模 ...
- 关系数据库标准语言SQL的基本问答
1 .试述 sQL 语言的特点. 答: (l)综合统一. sQL 语言集数据定义语言 DDL .数据操纵语言 DML .数据控制语言 DCL 的功能于一体. (2)高度非过程化.用 sQL 语言进行数 ...