C 为什么我的串行通信不工作?

C 为什么我的串行通信不工作?,c,serial-port,fpga,uart,nios,C,Serial Port,Fpga,Uart,Nios,我在(第177页)中查看了DE2,据我所知,应该可以进行串行通信,例如通过putty和usb到主板的串行电缆,因此我从手册中获取程序: /* A simple program that recognizes the characters 't' and 'v' */ #include <stdio.h> #include <string.h> int main () { char* msg = "Detected the character 't'.\n"; FILE*

我在(第177页)中查看了DE2,据我所知,应该可以进行串行通信,例如通过putty和usb到主板的串行电缆,因此我从手册中获取程序:

/* A simple program that recognizes the characters 't' and 'v' */
#include <stdio.h>
#include <string.h>
int main ()
{
char* msg = "Detected the character 't'.\n";
FILE* fp;
char prompt = 0;
fp = fopen ("/dev/uart1", "r+"); //Open file for reading and writing
if (fp)
{
while (prompt != 'v')
{ // Loop until we receive a 'v'.
prompt = getc(fp); // Get a character from the JTAG UART.
if (prompt == 't')
{ // Print a message if character is 't'.
fwrite (msg, strlen (msg), 1, fp);
}
if (ferror(fp))// Check if an error occurred with the file pointer 
clearerr(fp); // If so, clear it.
}
fprintf(fp, "Closing the JTAG UART file handle.\n");
fclose (fp);
}
return 0;
}
/*识别字符“t”和“v”的简单程序*/
#包括
#包括
int main()
{
char*msg=“检测到字符“t”。\n”;
文件*fp;
字符提示=0;
fp=fopen(“/dev/uart1”,“r+”);//打开文件进行读写
if(fp)
{
while(提示!=“v”)
{//循环,直到我们收到一个“v”。
prompt=getc(fp);//从JTAG UART获取一个字符。
如果(提示='t')
{//如果字符为“t”,则打印消息。
fwrite(msg,strlen(msg),1,fp);
}
if(ferror(fp))//检查文件指针是否发生错误
clearerr(fp);//如果是,则清除它。
}
fprintf(fp,“关闭JTAG UART文件句柄。\n”);
fclose(fp);
}
返回0;
}
我尝试将其作为Nios2硬件运行,但当我将std I/o配置为使用uart时,会收到此消息

nios2终端:无法打开uart:没有这样的文件或目录


然后,当我连接终端程序(putty串行连接)时,它不会连接。我做错了什么?我尝试在projet的属性中将std I/o更改为uart,但没有帮助。你能帮我吗?

在Linux中,我会做以下事情

fp = fopen ("/dev/ttyS0", "r+"); //Open file for reading and writing

寻找ttyS1;如果正在使用ttyS0

fp = fopen ("/dev/ttyS1", "r+"); //Open file for reading and writing
进行dmesg以了解您连接的确切设备

$tail -f /var/log/messages
对于USB串行,它可能是


/dev/ttyUSB0;在Linux中,使用/var/log/messages可以找到确切的数字,我将执行以下操作

fp = fopen ("/dev/ttyS0", "r+"); //Open file for reading and writing

寻找ttyS1;如果正在使用ttyS0

fp = fopen ("/dev/ttyS1", "r+"); //Open file for reading and writing
进行dmesg以了解您连接的确切设备

$tail -f /var/log/messages
对于USB串行,它可能是


/dev/ttyUSB0;使用/var/log/messages

如何调试串行通信,可以找到确切的数字:

使用9针串行电缆,将跨接导线的针脚2和针脚3连接在一起。你可以用回形针或任何你手边有的东西。引脚2和3分别为TX和RX。如果将它们连接在一起,计算机将接收您从计算机发送的任何命令。您已经创建了一个串行环回

打开Putty,尝试连接到串行电缆。按键盘上的任意键。波特率和其他东西并不重要,因为这是一个环回

如果您在终端上看到发送的字符已收到,则串行电缆工作正常!如果没有,您的电缆或油灰有问题。我在过去的串行通信中遇到过putty的问题。如果Putty未连接有问题,请尝试下载


或者为您的串行电缆找到新的驱动程序!祝你好运。

如何调试串行通信:

使用9针串行电缆,将跨接导线的针脚2和针脚3连接在一起。你可以用回形针或任何你手边有的东西。引脚2和3分别为TX和RX。如果将它们连接在一起,计算机将接收您从计算机发送的任何命令。您已经创建了一个串行环回

打开Putty,尝试连接到串行电缆。按键盘上的任意键。波特率和其他东西并不重要,因为这是一个环回

如果您在终端上看到发送的字符已收到,则串行电缆工作正常!如果没有,您的电缆或油灰有问题。我在过去的串行通信中遇到过putty的问题。如果Putty未连接有问题,请尝试下载


或者为您的串行电缆找到新的驱动程序!祝您好运。

请先缩进您的代码。您正在对要修改的文件进行迭代。首先尝试:
“/dev/uart1”
如果显示文件名,则shell上的“/dev/uart1””。。。另外,请先将代码缩进
$sudo./exename
中。您正在对要修改的文件进行迭代。如果显示文件名,请首先尝试:
“/dev/uart1”
。。。您的代码也可以是
$sudo./exename