资源简介

Hi3516d的GPIO9的2、3、5复用为uart485的管脚,是半双工的,在收发的时候需要设置管脚,程序里有参考。已经实现了数据的收发

资源截图

代码片段和文件信息

#include “TirUart.h“
int speed_arr[] = { B2000000 B1500000 B921600 B115200 B38400 B19200 B9600 B4800 B2400 B1200 B300
                    B2000000 B1500000 B921600 B115200 B38400 B19200 B9600 B4800 B2400 B1200 B300 };
int name_arr[] = {2000000 1500000 921600 115200 38400  19200  9600  4800  2400  1200  300 
2000000 1500000 921600 115200 38400  19200  9600 4800 2400 1200  300 };

pthread_mutex_t uart_write_lock;
pthread_mutex_t uart_read_lock;
void set_speed(int fd int speed)
{
    int   i; 
    int   status; 
    struct termios   Opt;
    tcgetattr(fd &Opt); 
    for ( i= 0;  i < sizeof(speed_arr) / sizeof(int);  i++) { 
        if  (speed == name_arr[i]) {
            tcflush(fd TCIOFLUSH);     
            cfsetispeed(&Opt speed_arr[i]);  
            cfsetospeed(&Opt speed_arr[i]);   
            status = tcsetattr(fd TCSANOW &Opt);  
            if  (status != 0) {        
                perror(“tcsetattr fd1“);  
                return;     
            }    
            tcflush(fdTCIOFLUSH);   
        }  
    }
}

int UartInit(int fd int baudint databitsint stopbitsenum UartCheck mParity)
{
struct termios Opt;
tcgetattr(fd&Opt);  
set_speed(fdbaud);
pthread_mutex_init(&uart_write_lockNULL);
pthread_mutex_init(&uart_read_lockNULL);
Opt.c_cflag &= (~CSIZE);
switch (databits)
    {   
    case 5:
        Opt.c_cflag |= CS5;
break;
    case 6:
        Opt.c_cflag |= CS6;
break;
    case 7:     
        Opt.c_cflag |= CS7; 
        break;
    case 8:     
        Opt.c_cflag |= CS8;
        break;   
    default: 
Opt.c_cflag |= CS8; 
        printf(“Unsupported data size/n“); 
        break;  
    }

    switch (mParity) 
    {   
        case NO_CHECK:    
            Opt.c_cflag &= ~PARENB;   /* Clear parity enable */
            Opt.c_iflag &= ~INPCK;     /* Enable parity checking */ 
            break;   
        case ODD_CHECK:     
            Opt.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/  
            Opt.c_iflag |= INPCK;             /* Disnable parity checking */ 
            break;  
        case PARITY_CHECK:   
            Opt.c_cflag |= PARENB;     /* Enable parity */    
            Opt.c_cflag &= ~PARODD;   /* 转换为偶效验*/     
            Opt.c_iflag |= INPCK;       /* Disnable parity checking */
            break; 
        default:   
            printf(“Unsupported parity/n“);
            Opt.c_cflag &= ~PARENB;
            Opt.c_cflag &= ~CSTOPB;
break;      
    }  
    /* 设置停止位*/  
    switch (stopbits)
    {   
        case 1:    
            Opt.c_cflag &= ~CSTOPB;  
            break;  
        case 2:    
            Opt.c_cflag |= CSTOPB;  
           break;
        default:    
             printf(“Unsupported stop bits/n“);  
             return UART_FALSE; 
    } 
Opt.c_cc[VTIME] = 0;
Opt.c_cc[VMIN] = 0; /* Update the options and do it NOW */

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-07-26 17:40  uart\
     文件         584  2018-07-26 15:33  uart\Makefile
     文件        5631  2018-07-26 17:36  uart\uart_api.c
     文件         857  2018-07-26 15:17  uart\uart_api.h
     文件        1572  2018-07-26 17:38  uart\uart_main.c

评论

共有 条评论