Android Things:外设I/O接口-UART

这篇博客详细介绍了如何在Android Things平台上使用UART接口进行设备通信,通过一个实例代码库展示了UART配置,包括波特率、数据位和校验位的设置。读者可以参考提供的GitHub链接进行实践操作。
摘要由CSDN通过智能技术生成
一、接口简介
UART(Universal Asynchronous Receiver Transmitter)是用来和外围设备交互数据的通用接口,如GPS模块,LCD显示器,XBee收音机等复杂的外围设备,通常使用UART端口(通常简称为串行端口)来通信。
  它是通用的:因为数据传输速率和数据字节格式是可配置的。
  它是异步的:因为没有时钟信号来同步两个设备之间的数据传输,设备的硬件在一个先进先出的缓冲中收集所有的输入数据,直到你的app读取它。
  它是全双工:意味着可以同时发送和接口数据。
  它比I2C更快:但是缺少共享时钟,意味着所有的设备必须同意一个相同的数据传输速率,每个设备可以坚持独立最小定时误差。
  它仅支持点对点通信:不像API和I2C,它仅支持两个设备之间的点对点通信。

UART外围设备通常有两种类型:
  3线端口包含数据接收(RX),数据发送(TX),和接地引用(GUD)信号;
  5线端口添加了请求发送(RTS)和清除发送(CTS)信号,用于硬件流量控制。流量控制允许接收设备标识它的缓冲已满,发送设备应该在发送更多数据之前等待。
二、使用步骤
1.打开连接:创建PeripheralManagerService对象,使用你想打开端口的名称,调用open()方法打开连接。
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {
        PeripheralManagerService manager = new PeripheralManagerService();
        mDevice = manager.openUartDevice(UART_DEVICE_NAME);
    } catch (IOException e) {
        Log.w(TAG, "Unable to access UART device", e);
    }
}
2.配置参数:调用setBaudrate()、setDataSize、setParity()和setStopBits等方法设置波特率、数据大小、错误校验和结束位等。
每个通过UART发送的字符都被包装在数据帧中,它包含以下组件:

  起始位:在发送数据之前,这行保持固定1位持续时间间隔的时间,来指示新的字符的开始。
  数据位:标识数据字符的单个的位。UART可能配置发送5-9数据位来代表字符。更少的比特减少数据的范围,但是可以提高数据传输效率。
  校验位:可选的错误检查值。如果UART被配置为奇偶校验,一个额外的帧将会添加到这个位,预示着数据内容是否匹配奇偶校验。设置为none则从帧移除这位。
  结束位:在所有数据传输后,该行被重置为可配置的时间间隔,指示字符的结尾。它能配置为1或者2位闲置时间。
通过UART传输数据的速率被称为波特率,它代表了接受和发送的速度,比特每秒。
通过UART连接的连个设备没有共享时钟,都需要使用相同的波特率提前配置来保证数据的正确解码。
public void configureUartFrame(UartDevice uart) throws IOException {
    uart.setBaudrate(115200);
    uart.setDataSize(8);
    uart.setParity(UartDevice.PARITY_NONE);
    uart.setStopBits(1);
}
如果你的设备支持5线UART端口,启动硬件流控制可以提交数据传输的可靠性。通常这也意味着你可以安全地使用更快的波特率,而丢失传入数据的几率要低得多。
硬件流控制启动之后,当设备的接收缓冲区已满不能接受任何数据的时候,UART发出发送请求(RTS)信号。一旦缓冲区被耗尽这个信号将被清除。相似的,UART监视清除发送(CTS)信号,如果它发现外部设备这行生效,将会增加数据传输。

public void setFlowControlEnabled(UartDevice uart, boolean enable) throws IOException {
    if (enable) {
        // Enable hardware flow control
        uart.setHardwareFlowControl(UartDevice.HW_FLOW_CONTROL_AUTO_RTSCTS);
    } else {
        // Disable flow control
        uart.set
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值