串口相关知识及编程

1. 串口用途

1.打印调试信息
2.外接各种模块(GPS 、蓝牙等模块)
要想将开发板和电脑项链只需要三条线即可
在这里插入图片描述

2. 串口发送数据流程

假设arm开发板(TTL电平)要发送一个字节(1Byte,比如一个字符A)的数据给pc机,详细过程怎样?

开始传输数据(ARM开发板的TXD引脚接到PC机的RXD引脚):
1 > 一开始TXD电平为高电平,当arm开发板要发送数据时,就会把TXD电平拉低,维持传输1bit所需要的时间

2> 拉低的瞬间pc机开始计时
3 > arm根据数据的每一位驱动TXD电平
TXD = Data[0]
TXD = Data[1]

TXD = Data[7]
比方说发 'A' ,A的ASSIC是0x41,二进制是0b 01000001

4 > PC机读取数据:在每一位数据位的中间读取引脚状态,即
Data[0] = RXD[t0]
Data[1] = RXD[t1]

Data[7] = RXD[t7]
5 > 校验位:检验为分奇偶检验为:数据位+校验位中为1的位的个数是奇还是偶
6 > 停止位:停止位的作用是将电平回复到初始时的电平,即完成传输。
在这里插入图片描述
在这里插入图片描述

1. 波特率

双方先约定好每一位所占据的时间,这就是波特率。每一位所占据的时间t=1/波特率,比如波特率为115200,t = 1/115200。

2. 格式:数据位、停止位、校验位、流量控制

数据位:即数据的每一位
停止位:用于恢复初始状态

3. 题外话

1.我们的开发板一般都是TTL电平,但是电脑是RS232逻辑电平,那么怎么连?

这种情况开发板里面会有一个电平转换芯片,自动帮我们转换好。不过现在大多数都直接采用usb。

2.知道波特率怎么算每秒可以传送多少数据

经常会看见115200,8n1这种格式,这种传输1Byte的数据需要10位(开始位+数据位+停止位)
每一位需要的时间t_bit = 1/115200;
传输1Byte需要10位,所以传输1Byte需要的时间t_per_Byte = 10*t_bit = 1/11520
一秒钟可以传输多少位:1/t_per_Byte = 11520;

3.TTY体系中设备节点的差别

/dev/ttyS0、/dev/ttySAC0、/dev/tty、/dev/tty0、/devtty1、/dev/console
它们有什么区别?
TTY/Terminal/Console/UART
他们有什么区别?
在这里插入图片描述

设备节点含义
/dev/ttyS0、/dev/ttySAC0串口
/dev/tty1、/dev/tty2、/dev/tty3、……虚拟终端设备节点
/dev/tty0前台终端
/dev/tty程序自己的终端,可能是串口、也可能是虚拟终端
/dev/console控制台,由内核的cmdline参数确定
术语含义
TTY来自teletype,最古老的输入输出设备,现在用来表示内核的一套驱动系统
Terminal终端,暗含远端之意,也是一个输入输出设备,可能是真实设备,也可能是虚拟设备
Console控制台,含控制之意,也是一种Terminal,权限更大,可以查看内核打印信息
UART串口,它的驱动程序包含在TTY驱动体系之内

4. linux串口应用编程

在Linux系统中,操作设备的统一接口就是:open/ioctl/read/write。
对于UART,又在ioctl之上封装了很多函数,主要是用来设置行规程。
所以对于UART,编程的套路就是:
▲ open
▲ 设置行规程,比如波特率、数据位、停止位、检验位、RAW模式、 一有数据就返回
▲ read/write

学会了再写…

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值