C Raspberry PI 3 USB到串行通信

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” 因此,请帮助我如

我已经在USB上对Raspbery PI3上的串行进行了环回,我已经用C编写了配置端口的代码(
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;我认为在您显示一些代码并解释您尝试执行的操作之前,任何人都无法帮助您。好的,这是我的代码。看起来您只有在发送数据后才能启用接收器。。。