您的位置:首页 > 运维架构 > Linux

linux-usart串口的使用记录

2016-12-16 16:10 519 查看
linux下,查询可用的串口的信息如下

root@NanoPi2:~# ls /proc/tty/driver/
ttyAMA     usbserial
root@NanoPi2:~# cat /proc/tty/driver/ttyAMA
serinfo:1.0 driver revision:
0: uart:PL011 rev3 mmio:0xC00A1000 irq:7 tx:701 rx:38 RTS|DTR
1: uart:PL011 rev3 mmio:0xC00A0000 irq:6 tx:0 rx:0 DSR|CD
2: uart:PL011 rev3 mmio:0xC00A3000 irq:9 tx:0 rx:0
3: uart:PL011 rev3 mmio:0xC006D000 irq:10 tx:0 rx:0
fa@NanoPi2:~/Desktop$ ls /dev/ttyAMA
ttyAMA0  ttyAMA1  ttyAMA2  ttyAMA3


找到对应的ttyAMA*串口,将UARTn_TXD,UARTn_RXD用线连接起来做下回循测试(就是自发自收),

串口的操作函数主要在termios.h中,下面是读取串口并显示接收到的信息。

编译完成后执行下,在另一端口使用
echo msg > /dev/ttyAMAn
向串口写信息(msg),这时执行程序会回显msg信息。

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
#define USART_DEV "/dev/ttyAMA2"
void main(void)
{
int fd = -1;
fd = open(USART_DEV,O_RDWR|O_NOCTTY|O_NDELAY);
if(-1==fd)
return;
printf("open %s success.\n",USART_DEV);
struct termios opt;
tcgetattr(fd,&opt);
opt.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
opt.c_iflag = IGNPAR;
opt.c_oflag = 0;
opt.c_lflag = 0;
opt.c_cc[VTIME] = 0;
opt.c_cc[VMIN] = 1;
tcflush(fd,TCIFLUSH);
tcsetattr(fd,TCSANOW,&opt);
unsigned char rx_buffer[512];
while(1)
{
memset(rx_buffer,0,sizeof(rx_buffer));
int len = read(fd,(void*)rx_buffer,sizeof(rx_buffer));
if(len > 0 && strcmp(rx_buffer,"") )
{
printf("%d bytes read:%s\n",len,rx_buffer);
}
}
close(fd);
return;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: