打开的串口设备有很多设置选项。本文中使用int
setup_com(int
fd)设置。在系统头文件中
定义了终端控制结构struct
termios,tcgetattr()和tcsetattr()两个系统函数获得和设置这些属性。结构
struct
termios中的域描述的主要属性包括:
c_cflag
:
控制选项
c_lflag
:
线选项
c_iflag
:
输入选项
c_oflag
:输出选项
c_cc
:控制字符
c_ispeed
:输入数据波特率
c_ospeed
:输出数据波特率
如果要设置某个选项,那么就使用"|="运算,如果关闭某个选项就使用"&="和"~"运算。本文使用的各个选项的意义定义如下:
c_cflag:
CLOCAL
本地模式,不改变端口的所有者
CREAD
表示使能数据接收器
PARENB
表示偶校验
PARODD
表示奇校验
CSTOPB
使用两个停止位
CSIZE
对数据的bit使用掩码
CS8
数据宽度是8bit
c_lflag:
ICANON
使能规范输入,否则使用原始数据(本文使用)
ECHO
回送(echo)输入数据
ECHOE
回送擦除字符
ISIG
使能SIGINTR,SIGSUSP,
SIGDSUSP和
SIGQUIT
信号
c_iflag:
IXON
使能输出软件控制
IXOFF
使能输入软件控制
IXANY
允许任何字符再次开启数据流
INLCR
把字符NL(0A)映射到CR(0D)
IGNCR
忽略字符CR(0D)
ICRNL
把CR(0D)映射成字符NR(0A)
c_oflag:
OPOST
输出后处理,如果不设置表示原始数据(本文使用原始数据)
c_cc[VMIN]:
最少可读数据
c_cc[VTIME]:
等待数据时间(10秒的倍数)
根据以上设置的定义,串口端口设置函数setup_com()定义如下:
int
setup_com(int
fd){
struct
termios
options;
tcgetattr(fd,
&options);
/
Set
the
baud
rates
to
38400/
cfsetispeed(&options,
B38400);
cfsetospeed(&options,
B38400);
/
Enable
the
receiver
and
set
local
mode/
optionsc_cflag
|=
(CLOCAL
|
CREAD);
/
Set
c_cflag
options/
optionsc_cflag
|=
PARENB;
optionsc_cflag
&=
~PARODD;
optionsc_cflag
&=
~CSTOPB;
optionsc_cflag
&=
~CSIZE;
optionsc_cflag
|=
CS8;
/
Set
c_iflag
input
options
/
optionsc_iflag
&=~(IXON
|
IXOFF
|
IXANY);
optionsc_iflag
&=~(INLCR
|
IGNCR
|
ICRNL);
optionsc_lflag
&=
~(ICANON
|
ECHO
|
ECHOE
|
ISIG);
/
Set
c_oflag
output
options
/
optionsc_oflag
&=
~OPOST;
/
Set
the
timeout
options
/
optionsc_cc[VMIN]
=
0;
optionsc_cc[VTIME]
=
10;
tcsetattr(fd,
TCSANOW,
&options);
return
1;
}串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。
串行通信
a,波特率:这是一个衡量符号传输速率的参数。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位240个/秒=2400bps。一般调制速率大于波特率,比如曼彻斯特编码)。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。
b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据往往不会是8位的,标准的值是6、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准
ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。[1]
c,停止位:用于表示单个包的最后一位。典型的值为1,15和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:如何将 iTOP-4418 的串口控制台配置为普通串口。在最终的产品中,如果需要额外的串口,可以将调试用的控制台串口作为普通串口使用,因为交付给最终用户手中的产品,一般不需要调试串口。屏蔽串口控制台需要做内核和文件系统的控制台屏蔽。注意:本文档中的 uboot 配置,也是为了屏蔽 uboot 设置的环境变量传递到内核和 android 系统中,本质上也是为了屏蔽内核和文件系统中的串口控制台。
1 内核配置
在 4418 的 android 源码目录中,使用命令“cd kernel”进入内核源码目
录,使用“export ARCH=arm”命令配置目标平台为 arm,接着使用“make
menuconfig”命令(注意 *** 作这一步,首先要配置好缺省文件),进入内核配置,
使用“make menuconfig”之后
找到“Device Drivers --->”。
进入“Device Drivers --->”,
找到“Character devices --->”。
进入“Character devices --->”,
找到“Serial drivers --->”。
进入“Serial drivers --->”,
找到“Support for console on AMBA serial port”。
将“Support for console on AMBA serial port”选项去掉,
退出 menuconfig,并保存,得到新的“config”配置文件。
接着使用命令“vim config”打开缺省文件,搜索关键词“android”,找到
“CONFIG_CMDLINE”配置选项,
删除掉“androidbootconsole=ttyAMA0”,
然后保存,内核配置完成。
2 uboot配置
在 4418 的 android 源码目录中,使用命令“cd u-boot”进入 uboot源
码目录,使用命令“vim board/s5p4418/drone2/boardc”打开环境变量配置的文件。
搜索“console=ttyAMA0,115200n8”,去掉“sprintf(bootargs,
"console=ttyAMA0,115200n8 androidboothardware=drone2
androidbootconsole=ttyAMA0 androidbootserialno=0123456789abcdef
initrd=0x49000000,0x1000000 init=/init lcdtype=%s", p);”中的
“console=ttyAMA0,115200n8”和“androidbootconsole=ttyAMA0”。注意:一共有
三处,需要全部修改。1、你说用串口助手可以接收数据,你的程序不能:这个时候仪器和你的开发板如何接线?
2、你的串口接线是2,3,5三根吗?
3、到Modem Line状态里面设置DTR和RTS,选择相应的设置属性(Line CTS State、Line DCD State、Line DSR
State、Line DTR State、Line RI State或Line RTS State)。在串行通信中,收发双方对发送或接收数据的速率要有约定。通过软件可对单片机串行口编程为四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。
串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。
方式0的波特率 = fosc/12
方式2的波特率 =(2SMOD/64)· fosc
方式1的波特率 =(2SMOD/32)·(T1溢出率)
方式3的波特率 =(2SMOD/32)·(T1溢出率)
当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时器方式(即方式2,且TCON的TR1=1,以启动定时器)。这时溢出率取决于TH1中的计数值。
T1 溢出率 = fosc /{12×[256 -(TH1)]}
在单片机的应用中,常用的晶振频率为:12MHz和110592MHz。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表所示。
1通讯控制要求:
2两边接口参数要一致;
3设置合适的通讯参数;
4串口通信参数设置 工具:串口调试助手
5波特率 串口通信时的速率。 如每秒钟传送1920个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),波特率为240Bd,比特率为10位240个/秒=2400bps。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)