杨培文

使用NanoPi2的串口

今天我们目的是实现串口回环测试,意思就是自己给自己发,然后自己接收到自己发送的内容。

首先呢,根据pinMap我们可以知道,8脚是UART3_TXD,10脚是UART3_RXD,所以我们需要将NanoPi2的8脚和10脚用杜邦线接起来。

然后呢,我们连接NanoPi2,写一个程序循环读取串口数据,并打印到屏幕上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
int main()
{
int fd = -1;
fd = open("/dev/ttyAMA2", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
perror("Open Serial Port Error!\n");
return -1;
}

struct termios options;
tcgetattr(fd, &options);
//115200, 8N1
options.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
options.c_iflag = IGNPAR;
options.c_oflag = 0;
options.c_lflag = 0;
options.c_cc[VTIME]=0;
options.c_cc[VMIN]=1;
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &options);
unsigned char rx_buffer[256];
while(1){
int rx_length = read(fd, (void*)rx_buffer, 255);
if (rx_length > 0)
{
//Bytes received
rx_buffer[rx_length] = '\0';
printf("%i bytes read : %s\n", rx_length, rx_buffer);
}
}
close(fd);
return 0;
}
1
2
3
nano read.c
gcc read.c -o read
./read

然后我们向串口写入数据:

1
2
3
echo hello > /dev/ttyAMA2
echo test > /dev/ttyAMA2
echo hahaha > /dev/ttyAMA2

read程序就会输出刚才发送的字符,带换行。