linux orangepi串口5开发并且初始化

因为串口5文件并没有配置,所以需要我们进行配置;

#include   // 包含标准输入输出库  
#include  // 包含字符串处理函数库  
#include   // 包含错误号库  
#include  // 包含POSIX线程库  
#include  // 包含WiringPi库,用于GPIO控制  
#include  // 应该是包含WiringPi串口库的,但注意这个头文件可能不是标准WiringPi的一部分  
#include  // 包含标准库函数,如malloc和free  
  
int fd; // 声明一个文件描述符变量,用于串口通信  
  
// 发送数据的线程处理函数  
void* Sendhandler()  
{  
    char *sendBuf; // 声明一个字符指针,用于指向发送缓冲区  
    // 注意:这里的malloc用法是错误的,应该是malloc(32 * sizeof(char))或者更简单地malloc(32)  
    sendBuf = (char *)malloc(32*sizeof(32)); // 分配32*32字节的内存,这是过多的,只需要32字节  
    while(1){ // 无限循环  
        memset(sendBuf,'\0',32); // 将发送缓冲区清零  
        scanf("%s",sendBuf); // 从标准输入读取字符串到发送缓冲区  
        while(*sendBuf){ // 遍历发送缓冲区直到遇到字符串结束符'\0'  
            serialPutchar(fd, *sendBuf++); // 逐个字符通过串口发送数据  
        }  
        // 注意:这里缺少了对malloc分配的内存的释放,应该在适当的位置添加free(sendBuf);  
    }  
}  
  
// 接收数据的线程处理函数  
void* Revhandler()  
{  
    while(1){ // 无限循环  
        while (serialDataAvail(fd)) // 检查串口是否有数据可读  
        {  
            printf("%c", serialGetchar(fd)); // 从串口读取一个字符并打印到标准输出  
            fflush(stdout); // 刷新标准输出缓冲区,确保字符立即打印  
        }  
    }  
}  
  
int main()  
{  
    int count; // 声明一个未使用的变量count  
    unsigned int nextTime; // 声明一个未使用的变量nextTime  
    pthread_t idSend; // 声明发送线程的线程ID  
    pthread_t idRev; // 声明接收线程的线程ID  
  
    // 尝试打开串口设备  
    if ((fd = serialOpen("/dev/ttyS5", 115200)) < 0)  
    {  
        fprintf(stderr, "Unable to open serial device: %s\n", strerror(errno)); // 打印错误信息  
        return 1; // 返回错误代码  
    }  
  
    // 创建发送线程  
    pthread_create(&idSend, NULL, Sendhandler, NULL);  
    // 创建接收线程  
    pthread_create(&idRev, NULL, Revhandler, NULL);  
  
    // 初始化WiringPi库  
    if (wiringPiSetup() == -1)  
    {  
        fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno)); // 注意:这里应该使用stderr而不是stdout来打印错误信息  
        return 1; // 返回错误代码  
    }  
  
    // 主线程进入休眠状态,防止程序立即退出  
    while(1){sleep(10);}  
    // 注意:这里的while(1){sleep(10);}是多余的,因为程序已经创建了线程,主线程可以安全地退出  
    // 但是,如果你希望主线程保持活动状态以监视其他条件,可以保留它  
  
    printf("\n"); // 这行代码永远不会执行,因为前面的while循环是无限循环  
    return 0; // 这行代码也永远不会执行  
}

有的串口5并没有初始化:可以参考【Orangepi Zero2】串口通信_orangepi 串口-CSDN博客

你可能感兴趣的:(linux,运维,服务器)