标题:
linux下的串口编程—线程接收
[打印本页]
作者:
yuyang911220
时间:
2016-9-16 16:47
标题:
linux下的串口编程—线程接收
前言:
在稍微大点的项目中,且是并发的,基本上都要使用线程来接收数据。
一,源码
(1) 头文件
点击(此处)折叠或打开
/
*
*
upper
,
上位机
*
{
*
/
/
*
串口的初始化
*
/
extern int32_t com_init_upper
(
void
*
param
)
;
/
*
串口的发送
*
/
extern int32_t com_send_upper
(
uint8_t
*
send_buffer
,
int32_t buffer_len
)
;
/
*
串口参数设置
*
波特率,停止位,校验位,流控制,异步同步等
*
/
extern int32_t com_set_upper
(
void
*
param
)
;
/
*
串口设置参数生效
*
/
extern int32_t com_set_effect_upper
(
void
*
param
)
;
/
*
串口关闭
*
/
extern int32_t com_close_upper
(
void
*
param
)
;
/
*
串口接收线程关闭
*
/
extern int32_t com_recv_thread_close
(
void
*
param
)
;
/
*
*
upper
,
上位机
*
}
*
/
(2) *.c 文件
点击(此处)折叠或打开
/
*
*
upper
,
上位机
*
{
*
/
#define UPPER_DEVICE_COM
"/dev/ttySAC3"
/
*
串口数据接收线程
(
是上位机
(
pc
)
与 Real210开发板通信
)
*
/
static pthread_t com_recv_threadid
=
0
;
static int32_t upper_device_comfd
=
0
;
/
*
与上位机通信的串口的描述符
(
PC机
)
*
/
/
*
串口的基本配置
*
/
static int32_t _com_set_upper
(
)
{
int32_t
ret
=
0
;
//
ret
=
__com_set
(
upper_device_comfd
,
B115200
)
;
int32_t fd
=
upper_device_comfd
;
struct
termios opt
;
//
struct
timeval start
;
tcgetattr
(
fd
,
&opt
)
;
cfsetispeed
(
&
opt
,
B115200
)
;
cfsetospeed
(
&
opt
,
B115200
)
;
// cfsetispeed
(
&
opt
,
baud_rate
)
;
// cfsetospeed
(
&
opt
,
baud_rate
)
;
// 8n1
opt
.
c_cflag &
=
~CSIZE
;
opt
.
c_cflag &
=
~CSTOPB
;
opt
.
c_cflag &
=
~PARENB
;
// 无奇偶校验
opt
.
c_cflag
|
=
CS8
;
opt
.
c_cflag &
=
~CRTSCTS
;
// 没有使用硬件流控制
// opt
.
c_cflag &
=
~INPCK
;
opt
.
c_cflag
|
=
(
CLOCAL
|
CREAD
)
;
// Enable the receiver
and
set
local
mode
// opt
.
c_lflag &
=
~
(
ICANON
|
ECHO
|
ECHOE
|
ISIG
)
;
// 原始数据
opt
.
c_lflag
|
=
(
ICANON
|
ECHO
|
ECHOE
)
;
// 经典数据
opt
.
c_oflag &
=
~OPOST
;
opt
.
c_oflag &
=
~
(
ONLCR
|
OCRNL
)
;
// 添加的
opt
.
c_iflag &
=
~
(
ICRNL
|
INLCR
)
;
opt
.
c_iflag &
=
~
(
IXON
|
IXOFF
|
IXANY
)
;
// 没有软件流控制
tcflush
(
fd
,
TCIOFLUSH
)
;
opt
.
c_cc
[
VTIME
]
=
1
;
// 以 十分之一秒
(
1/10 s
)
为单位
opt
.
c_cc
[
VMIN
]
=
0
;
if
(
tcsetattr
(
fd
,
TCSANOW
,
&opt
)
!
=
0
)
{
perror
(
"tcsetattr error"
)
;
return
-
COM_CONFIG_ERROR
;
}
return OPER_OK
;
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0