堆栈溢出,

我迫切需要从C程序中获取Beaglebone Black UART的帮助. 下面列出了我try 使用的代码.密码来自德里克·莫洛伊的《比格尔伯恩》一书的第八章.

代码编译时没有任何警告或错误,并且似乎可以运行.该程序通过了内置在下面的C代码中的健全性判断.程序以打印"已完成发送消息,正在退出"结束.到控制台.

我认为UART4没有发送数据的根本原因是,当我用一个很好的数字O‘Scope进行监测时,我在P9/13上没有看到任何活动.我还try 过通过运行终端程序的PC来监控端口.

我确信C程序正确地读取了我的命令行消息(例如"Testing123").我修改了代码以将消息打印到控制台,它按预期打印了消息.我还修改了在循环中运行的代码,使其更易于使用O‘Scope监视P9/13.O‘Scope在P9/13上显示恒定的3.3VDC.

我还盲目地try 了下拉电阻.这个端口不能提供太多电流.2k欧姆电阻将端口加载到约0.2伏.

我验证了ttyO4和ttyS4在/dev中,不管这意味着什么.

我不知道我使用的是什么版本的Debian.我监视了J1的"header"输出,发现了这个: Debian GNU/Linux 9 ebb ttyS0 BeagleBoard.org Debian Image 2019-08-03

此外,我还发现了这个: 机器ID:229f313330aab6c19873bdc15d4645c7 bootstrap ID:b74381516ae64aefa37415709164f0e4 操作系统:Debian GNU/Linux 9(Stretch) 内核:linux 4.14.108-ti-r113 架构:ARM

我是否需要启用UART端口或引脚?如果是,我如何执行此操作以及如何确认已成功完成?我是否需要硬连线控制线(例如CTS、RTS)?我需要编辑uEnv.txt文件吗?

我几乎可以肯定,我的董事会是一名牧师.

最后,我try 了一种类似于《Bad to the bone》一书中的C代码,但得到了类似的不利结果.

任何帮助都将不胜感激.

谢谢,

常模

/* Simple send message example for communicating with the
*  UART that is connected to a desktop PC.  */

#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<termios.h>
#incl`ude<string.h>

int main(int argc, char *argv[]){
   int file, count;
   if(argc!=2){
       printf("Please pass a message string to send, exiting!\n");
       return -2;
   }
   if ((file = open("/dev/ttyO4", O_RDWR | O_NOCTTY | O_NDELAY))<0){
      perror("UART: Failed to open the device.\n");
      return -1;
   }
   struct termios options;
   tcgetattr(file, &options);
   options.c_cflag = B115200 | CS8 | CREAD | CLOCAL;
   options.c_iflag = IGNPAR | ICRNL;
   tcflush(file, TCIFLUSH);
   tcsetattr(file, TCSANOW, &options);

   // send the string plus the null character
   if ((count = write(file, argv[1], strlen(argv[1])+1))<0){
      perror("UART: Failed to write to the output.\n");
      return -1;
   }
   close(file);
   printf("Finished sending the message, exiting.\n");
   return 0;

推荐答案

取决于您的图像和内核.

  1. try /dev/ttyS4
  2. 或者试试/dev/bone/uart/4

另外,我非常确定在内核4.14.x中可以使用配置销,尽管该内核是从他们的组织中退出的.

如果您遇到/dev/ttyS4不工作的情况,请try 对您使用的特定管脚执行配置……

C++相关问答推荐

GCC:try 使用—WError或—pedantic using pragmas

找出文件是否包含给定的文件签名

为什么双重打印与C中的float具有不同的大小时具有相同的值?

我可以在C中声明不同长度数组的数组而不带变量名吗?

fwrite无法写入满(非常大)缓冲区

`#if`条件中是否允许`sizeof`?

在循环中复制与删除相同条件代码的性能

GDB输出ARM助记符

C整型和_泛型.哪些类型是兼容的?

C:如何将此代码转换为与数组一起使用?

为什么我的半数组测试和奇数组测试不起作用?(我使用Assert进行调试)

*S=0;正在优化中.可能是GCC 13号虫?或者是一些不明确的行为?

哪个首选包含第三个库S头文件?#INCLUDE;文件名或#INCLUDE<;文件名&>?

OMP并行嵌套循环

存储和访问指向 struct 的指针数组

如何在MSVC中使用intSafe.h函数?

如何解释数组中的*(ptr)和*(ptr+2)?

在我的函数中实现va_arg的问题

未使用sem_open正确初始化信号量

尽管将其标记为易失性,但 gcc 是否优化了我的等待代码?