域格NB模组三组uart串口通信


前言

`
串口通讯(Serial Communication)是指外设和计算机间,通过数据信号线、地线等,按位进行传输数据的一种通讯方式。其通讯协议可分层为协议层和物理层。串口也是“串行接口”的简称,即采用串行通信方式的接口。串行通信将数据字节分成一位一位的形式在一条数据线上逐个传送,其特点是通信线路简单,但传输速度较慢。因此串口广泛应用于嵌入式、工业控制等领域中对数据传输速度要求不高的场合。

一、域格模组uart

1.串口通信的原理

模组两个引脚是专门用来做 UART 串行通信的,它们分别叫做 RXD 和 TXD,由它们组成的通信接口就叫做串行接口,简称串口。
下面是模组和DTE进行 UART 串口通信,接线如下图所示。
在这里插入图片描述

在这里插入图片描述
三根通信线:TX、RX、GND

任何通信都要有信息传输载体,或者是有线的或者是无线的。

串口通信是有线通信,是通过串口线来通信的。

串口线最少需要两根(GND和信号线),可以实现单工通信;也可以使用3根通信线(TX、RX、GND),来实现全双工通信。

一般开发板都会引出SOC上串口引脚直接输出的TTL电平的接口,用的是插针式插座,每个串口引出的都有3根通信线(TX、RX、GND),可以用这些插座直接连接外部的TTL电平的串口设备。

2.uart相关使用原理

整个串口控制器包含transmitter和receiver两部分,receiver由接收缓冲区和接收移位寄存器构成。当有人通过串口线向我发送信息时,信息通过Rx通信线进入我的接收移位寄存器中,然后接收移位寄存器自动移位并将该二进制位保存入我的接收缓冲区,接收完一帧数据后receiver会产生一个中断给CPU,CPU收到中断后即可知道receiver接收满了一帧数据,就会来读取这帧数据。

transmitter由发送缓冲区和发送移位寄存器构成。我们要发送信息时,首先将信息进行编码(一般用ASCII码)成二进制流,然后将一帧数据(一般是8位)写入发送缓冲区(从这里以后程序就不用管了,剩下的发送部分由硬件自动完成),最后发送移位寄存器会自动从发送缓冲区中读取一帧数据,然后自动移位(移位的目的是将一帧数据的各个位分别拿出来)将其发送到Tx通信线上

二、openCPU下使用方法

1.配置USART为115200 Bits/sec

代码如下:

USARTdrv->Control(ARM_USART_MODE_ASYNCHRONOUS |
                      ARM_USART_DATA_BITS_8 |
                      ARM_USART_PARITY_NONE |
                      ARM_USART_STOP_BITS_1 |
                      ARM_USART_FLOW_CONTROL_NONE, 115200);

2.串口收发

代码如下(示例):

#if(RTE_UART_RX_IO_MODE == POLLING_MODE)     //判断接收是否是轮询模式
        USARTdrv->Receive(recBuffer, 1);
        USARTdrv->Send(recBuffer, 1);
#elif (RTE_UART_RX_IO_MODE == IRQ_MODE) || (RTE_UART_RX_IO_MODE == DMA_MODE)//判断接收是否是IRQ模式或者DMA模式

        USARTdrv->Receive(recBuffer, RECV_BUFFER_LEN);

        while((isRecvTimeout == false) && (isRecvComplete == false));

        if(isRecvTimeout == true)
        {
            USARTdrv->Send(recBuffer, USARTdrv->GetRxCount());
            isRecvTimeout = false;
        }
        else
        {
            isRecvComplete = false;
            USARTdrv->Send(recBuffer, RECV_BUFFER_LEN);
        }

3.串口收发

选择串口模式

#define RTE_UART0_TX_IO_MODE    DMA_MODE
#define RTE_UART0_RX_IO_MODE    DMA_MODE
//#define USART0_RX_TRIG_LVL      (30)

#define RTE_UART1_TX_IO_MODE    DMA_MODE
#define RTE_UART1_RX_IO_MODE    DMA_MODE

#define RTE_UART2_TX_IO_MODE    DMA_MODE
#define RTE_UART2_RX_IO_MODE    DMA_MODE

三组uart口开关

#define RTE_UART0                       1
#define RTE_UART1                       1
#define RTE_UART2                       1

除了PAD 复用要配置对,下面代码选择的与 SWD共用的 UART,以UART2为例:

#define RTE_UART2_RX_BIT                9
#define RTE_UART2_RX_FUNC               PAD_MuxAlt3

#define RTE_UART2_TX_BIT                10
#define RTE_UART2_TX_FUNC               PAD_MuxAlt3

具体想要用哪个 pin作为 UART2 的配置见数据手册
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值