四轴飞行器1.2.2 RT-Thread 串口
       本来是打算说根据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数据就通过串口发出去了。

在rtthread_startup函数中调用了rt_show_version(),用来现实RTT版本信息,rt_show_version() 里面调用的是rt_kprintf函数输出的信息。
可以清楚的看到版本信息,这里我们打开了finsh的功能,可以方便调试,里面调用了两个命令,list和list_thread命令,具体可以看 RTT的手册。 

四轴飞行器1.2.2 RT-Thread 串口的更多相关文章

  1. 四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法

    四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法  原创文章,欢迎转载,转载请注明出处      最近时间花在最多的地方就是STM32的I2C上了.之前就知道STM32的I2C并不好用, ...

  2. 四轴飞行器1.1 Matlab 姿态显示

    四轴飞行器1.1 Matlab 姿态显示 开始做四轴了,一步一步来,东西实在很多,比较杂.先做matlab上位机,主要用来做数据分析,等板子到了可以写飞控的程序了,从底层一层一层开始写..希望能好好的 ...

  3. 四轴飞行器1.5 各种PID对比分析及选择

    原创文章,欢迎转载,转载请注明出处 这篇文章主要介绍我对PID的理解,以及选择PID算法的过程. 一 PID的理解和学习过程 二 飞控的PID效果 先上个飞控PID的响应的视频:介绍在后面 地址:ht ...

  4. 四轴飞行器1.7 NRF24L01P无线通讯和改进型环形缓冲(转)

    源: 四轴飞行器1.7 NRF24L01P无线通讯和改进型环形缓冲

  5. 从零开始的四轴飞行器-开篇flag

    在这里立下flag,我要理解学会四轴飞行器的控制方法.

  6. 四轴飞行器飞行原理与双闭环PID控制

    四轴轴飞行器是微型飞行器的其中一种,相对于固定翼飞行器,它的方向控制灵活.抗干扰能力强.飞行稳定,能够携带一定的负载和有悬停功能,因此能够很好地进行空中拍摄.监视.侦查等功能,在军事和民用上具备广泛的 ...

  7. RT Thread 通过ENV来配置SFUD,操作SPI Flash

    本实验基于正点原子stm32f4探索者板子 请移步我的RT Thread论坛帖子. https://www.rt-thread.org/qa/forum.php?mod=viewthread& ...

  8. STM32 + RT Thread OS 串口通讯

    1.   创建项目 a)   禁用Finsh和console b)   默认情况下,项目文件包含了finsh,它使用COM1来通讯,另外,console输出(rt_kprintf)也使用了COM1.因 ...

  9. STM32 + RT Thread OS 学习笔记[二]

    串口通讯例程 通过上面的练习,对STM32项目开发有了一个直观印象,接下来尝试对串口RS232进行操作. 1.   目标需求: 开机打开串口1,侦听上位机(使用电脑串口测试软件)发送的信息,然后原样输 ...

随机推荐

  1. utf8+bom格式保存php curl乱码问题

    今天开发遇到一个php curl取数据乱码问题 不是gzip也不是编码设置问题 最后有一同事判断为utf8+bom保存数据原因,懒得深入了解utf8+bom,仅做记录 [root@centos5 ~] ...

  2. iOS 自定义button

    UIButton默认的布局是左侧image,右侧title,如果想要改变image与title的frame,直接设置是不会有效果的.可以通过titleEdgeInsets.imageEdgeInset ...

  3. 自己配置的WAMP环境,扩展oracle函数库(oci)

    同事昨天接到一个任务,要用php处理oracle数据库的内容,但是php打开oracle扩展不是像mysql那样直接用就行,需要下一点东西才能打开 第一步 需要到oracle官方下载一个install ...

  4. Android 树形菜单

    首先来一张萌萌哒的效果图(比较懒 - -) 然后是代码: // Node package com.example.treeview.utils; import java.util.ArrayList; ...

  5. Apache开启expires响应头,优化缓存

    apache开始expires响应头输出 expires是什么 指示资源什么时候过期的时间值(GMT时间),在指定的过期时间前,浏览器可以直接使用自身缓存的版本,而不用向服务器发请求,大大减轻服务器压 ...

  6. (15)Visual Studio中使用PCL项目加入WCF WebService参考

    原文 Visual Studio中使用PCL项目加入WCF WebService参考 Visual Studio中使用PCL项目加入WCF WebService参考 作者:Steven Chang 2 ...

  7. spark install

    https://chongyaorobin.wordpress.com/2015/07/01/step-by-step-of-installing-apache-spark-on-apache-had ...

  8. 面向对象程序设计-C++_课时22向上造型

    赋值兼容规则是指在公有派生情况下,一个派生类的对象可以作为基类的对象来使用的情况. 约定类derived是从类base公有派生而来的,则指如下3种情况: (1)派生的对象可以赋给基类的对象.例如: d ...

  9. 程序猿的量化交易之路(20)--Cointrader之Assert实体(8)

    转载需说明出处:http://blog.csdn.net/minimicall, http://cloudtrade.top 不论什么可交易的都能够称之为Assert,资产.其类代码例如以下: pac ...

  10. 采用proguard困惑android代码

    当前是有些工具比方apktool,dextojar等是能够对我们android安装包进行反编译.获得源代码的.为了降低被别人破解,导致源代码泄露,程序被别人盗代替码,等等.我们须要对代码进行混淆.an ...