RT-Thread开启串口.中断和DMA接收(手把手教学)

1 串口介绍

       串口是指数据一位一位地顺序传送,其特点是通讯线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位的传送,按位顺序进行,最少只需一根传输线即可完成;成本低但传送速度慢。串行通讯的距离可以从几米到几千米;根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。

2 IO设备管理接口函数

3 DEVICE_FLAG标志

#define RT_DEVICE_FLAG_RDONLY 0x001 /*只读*/
#define RT_DEVICE_FLAG_WRONLY 0x002 /*只写*/
#define RT_DEVICE_FLAG_RDWR 0x003 /*读写*/
#define RT_DEVICE_FLAG_REMOVABLE 0x004 /*可移除*/
#define RT_DEVICE_FLAG_STANDALONE 0x008 /*独立*/
#define RT_DEVICE_FLAG_SUSPENDED 0x020 /*挂起*/
#define RT_DEVICE_FLAG_STREAM 0x040 /*流模式*/
#define RT_DEVICE_FLAG_INT_RX 0x100 /*中断接收*/
#define RT_DEVICE_FLAG_DMA_RX 0x200 /*DMA接收*/
#define RT_DEVICE_FLAG_INT_TX 0x400 /*中断发送*/
#define RT_DEVICE_FLAG_DMA_TX 0x800 /* DMA发送*/

4 中断方式

流程图:

4.1 “中断方式”步骤

1 在RT-Thread Settings中进行设置

 2 在board.h文件中进行配置,具体操作在board.h文件中有介绍

 3  查找设备

#include <rtthread.h>

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#include <serial.h>

rt_thread_t th1 = 0;
rt_device_t dev_uart2;


int main(void)
{
    dev_uart2 = rt_device_find("uart2");
    if (dev_uart2 == RT_NULL)
    {
        LOG_E("uart2 find is failed!");
        return RT_EINVAL;
    }
    return RT_EOK;
}

 4 打开设备

 FLAG如下:

 5 控制设备

 cmd命令如下:

 6 写设备

          1的意思是写的起始位置,介绍如下

       2 rt_strlen函数的作用是计算大小。

write结果如下:

7 设置接受回调函数 

 

8 信号量、线程部分操作(具体操作见我前面文章)

9 写中断回调函数和线程作用函数的内容

10 演示

 5 DMA方式

1 在board.h文件中进行配置,具体操作在board.h文件中有介绍

 

 

2 将此部分改成DMA接收的方式

 

3 演示结果

 

 

 

物联沃分享整理
物联沃-IOTWORD物联网 » RT-Thread开启串口.中断和DMA接收(手把手教学)

发表评论