C Raspberry PI 3 USB到串行通信
我已经在USB上对Raspbery PI3上的串行进行了环回,我已经用C编写了配置端口的代码(C Raspberry PI 3 USB到串行通信,c,raspberry-pi,C,Raspberry Pi,我已经在USB上对Raspbery PI3上的串行进行了环回,我已经用C编写了配置端口的代码(ttyUSB0),设置了波特率:9600,奇偶校验:无,数据位:8,我已经在DB9连接器上环回了引脚2(rx)和3(tx) 2) 在调试期间,我知道raspberryPI3只写入5位数据,而不是8位 示例: 1) 如果将值写入“A”,则二进制值将被读取为“000001”而不是“00000001” 2) 如果我将值写为“d”,我将得到二进制值,读作“00100”而不是“01100100” 因此,请帮助我如
ttyUSB0
),设置了波特率:9600,奇偶校验:无,数据位:8
,我已经在DB9连接器上环回了引脚2(rx)和3(tx)
2) 在调试期间,我知道raspberryPI3只写入5位数据,而不是8位
示例:
1) 如果将值写入“A
”,则二进制值将被读取为“000001
”而不是“00000001
”
2) 如果我将值写为“d”,我将得到二进制值,读作“00100
”而不是“01100100
”
因此,请帮助我如何获得3位
请帮帮我
我写的代码是
#include <stdio.h>
#include <conio.h>
#include <termios.h>
#include <unistd.h>
void main()
{
int fd,a,n;
fd =open("/dev/ttyUSB0",O_RDWR | ONOCTTY);
if(fd==-1)
{
printf("\n error in opening the port \n");
}
else
printf("port successfully opened");
struct termios SerialPortSettings;
tcgetattr(fd,&SerialPortSettings);
cfsetispeed(&SerialPortSettings,B115200); |
cfsetospeed(&SerialPortSettings,B115200);
SerialPortSettings.c_cflag &= PARENB;
SerialPortSettings.c_cflag &= ~CSTOPB;
SerialPortSettings.c_cflag &= ~CSIZE;
SerialPortSettings.c_cflag |= CS8;
SerialPortSettings.c_cflag &= CRTCTS;
SerialPortSettings.c_cflag |= (CREAD | CLOCAL);
SerialPortSettings.c_iflag &= ~(IXON | IXOFF | IXANY);
SerialPortSettings.c_iflag &= ~(ICANON | ECHO | ECHOE | ISIG);
tcsetattr(fd,TCSANOW,&SerialPortSettings);
char write_buffer[] = "A";
int bytes_written = 0 ;
bytes_written = write(fd,write_buffer,sizeof(write_buffer));
tcgetattr(fd, &SerialPortSettings);
//Configure Baudrate()
//Configure data bits()
SerialPortSettings.c_cflag |= CREAD | CLOCAL;//enable receiver
/* Setting Time outs */
SerialPortSettings.c_cc[VMIN] = 10; /* Read 10 characters */
SerialPortSettings.c_cc[VTIME] = 0; /* Wait indefinitely */
tcsetattr(fd,TCSANOW,&SerialPortSettings);
char read_buffer[32];
int i=0,bytes_read = 0;
bytes_read = read(fd,&read_buffer,32);
for (i=0;i<bytes_read;i++)
{
printf("Char read : %x\n",read_buffer[i]);
}
#包括
#包括
#包括
#包括
void main()
{
int-fd,a,n;
fd=打开(“/dev/ttyUSB0”,O|RDWR|onactty);
如果(fd==-1)
{
printf(“\n打开端口时出错\n”);
}
其他的
printf(“端口已成功打开”);
struct termios SerialPortSettings;
tcgetattr(fd和SerialPortSettings);
cfsetispeed(&SerialPortSettings,B115200)|
cfsetospeed(&SerialPortSettings,B115200);
SerialPortSettings.c_cflag&=PARENB;
SerialPortSettings.c_cflag&=~CSTOPB;
SerialPortSettings.c_cflag&=~CSIZE;
SerialPortSettings.c_cflag |=CS8;
SerialPortSettings.c_cflag&=CRTCTS;
SerialPortSettings.c|u cflag |=(CREAD | CLOCAL);
SerialPortSettings.c_iflag&=~(IXON | IXOFF | IXANY);
SerialPortSettings.c|u iflag&=~(ICANON | ECHO | ECHO | ISIG);
tcsetattr(fd、TCSANOW和SerialPortSettings);
字符写入缓冲区[]=“A”;
int bytes_writed=0;
字节写入=写入(fd,写入缓冲区,sizeof(写入缓冲区));
tcgetattr(fd和SerialPortSettings);
//配置波特率()
//配置数据位()
SerialPortSettings.c_cflag |=CREAD | CLOCAL;//启用接收器
/*设置超时*/
SerialPortSettings.c_cc[VMIN]=10;/*读取10个字符*/
SerialPortSettings.c_cc[VTIME]=0;/*无限期等待*/
tcsetattr(fd、TCSANOW和SerialPortSettings);
字符读取缓冲区[32];
int i=0,字节数_read=0;
字节读取=读取(fd和读取缓冲区,32);
对于(i=0;我认为在您显示一些代码并解释您尝试执行的操作之前,任何人都无法帮助您。好的,这是我的代码。看起来您只有在发送数据后才能启用接收器。。。