赞
踩
dtoverlay -h uart2
,终端输出:sudo nano /boot/config.txt
打开配置文件,在文件末尾添加dtoverlay=uart2
ls /dev/ttyAMA*
查看是否成功开启,有ttyAMA1说明成功开启,另外这里的/dev/ttyAMA0是默认开启的,用于树莓派的蓝牙通信。现在就可以使用该串口了!#include <iostream> #include <unistd.h> #include <fcntl.h> #include <termios.h> #include <string.h> int main() { // 打开串口 int serialPort = open("/dev/ttyAMA1", O_RDWR | O_NOCTTY | O_NDELAY); if (serialPort < 0) { std::cerr << "Error opening serial port" << std::endl; return 1; } // 配置串口 struct termios tty; if(tcgetattr(serialPort, &tty) != 0) { std::cerr << "Error from tcgetattr" << std::endl; return 1; } cfsetospeed(&tty, B9600); cfsetispeed(&tty, B9600); tty.c_cflag &= ~PARENB; tty.c_cflag &= ~CSTOPB; tty.c_cflag &= ~CSIZE; tty.c_cflag |= CS8; tty.c_cflag &= ~CRTSCTS; tty.c_cflag |= CREAD | CLOCAL; tty.c_lflag &= ~ICANON; tty.c_lflag &= ~ECHO; tty.c_lflag &= ~ECHOE; tty.c_lflag &= ~ECHONL; tty.c_lflag &= ~ISIG; tty.c_iflag &= ~(IXON | IXOFF | IXANY); tty.c_iflag &= ~(ICRNL | INLCR); tty.c_oflag &= ~OPOST; if (tcsetattr(serialPort, TCSANOW, &tty) != 0) { std::cerr << "Error from tcsetattr" << std::endl; return 1; } // 发送数据 unsigned char data[] = {0xff, 0x44, 0xfe}; write(serialPort, data, sizeof(data)); // 设置非阻塞模式 fcntl(serialPort, F_SETFL, FNDELAY); // 循环读取数据 unsigned char byte; int numBytesRead; while (true) { numBytesRead = read(serialPort, &byte, 1); // 读取一个字节 if (numBytesRead == 0) { // 没有数据 usleep(10000); // 等待 10 毫秒 } else { // 打印接收到的字节,收到0xff退出 std::cout << "Received byte: " << std::hex << (int)byte << std::endl; if (byte == 0xff) {std::cout<<"recived 0xff, exit!\n";break;} } } // 关闭串口 close(serialPort); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。