imx6ul+uart使用

来源:互联网 发布:绝地求生优化软件 编辑:程序博客网 时间:2024/06/01 09:57
应用库第二弹:uart
串口通信大家肯定很熟悉了,但是linux上串口大家一定用的比较少吧,大多人在mpu的板子都是做一些数据处理,opencv之类的,都比较高大上。
写这一系列库就是可以让mpu板子和stm32一样玩;

程序主函数:
int main(int argc, char** argv)
{
    int dev_fd;
   
    if ((dev_fd = uart_init()) == -1) {
        printf("uart_init error\n");
        return -1;
    }   
    unsigned char data = 0;
    uart_send_buf(dev_fd, (unsigned char*)mesg_buf, strlen(mesg_buf));
    while (1) {
        if (uart_get_char(dev_fd, &data) > 0)
            uart_send_char(dev_fd, data);
        sleep(1);
        uart_send_char(dev_fd, 'C');
    }
    uart_deinit(dev_fd);
    return 0;
}

1) 先初始化了串口
2) 打印了一串信息
3)进入while死循环,非阻塞式读取接收端是否有数据,有则打印
4)每秒打印一个C字符


1)串口初始化
EXPORT int uart_init(void)
{
        int dev_fd;
        if ((dev_fd = open_hardware(CON6, O_RDWR | O_NONBLOCK)) < 0) {
        printf("Fail to open uart device\n");
        return -1;
    }

        if (uart_setup_port(dev_fd, 115200, 8, 0, 1) < 0) {
                printf("uart_setup_port error\n");
                return -1;
        } else {
                return dev_fd;
        }
}
先用非阻塞方式打开了设备,在进行串口的配置,设置了波特率,数据位数,奇偶校检和停止位数

2) 打印信息效果图:


3)串口接收,非阻塞方式读取
EXPORT int uart_get_buf(int dev_fd, unsigned char *buf, int len)
{
         return read_hardware(dev_fd, buf, len);
}

EXPORT int uart_get_char(int dev_fd, unsigned char *byte_data)
{
        return uart_get_buf(dev_fd, byte_data, 1);
}
4)串口发送
EXPORT int uart_send_buf(int dev_fd, unsigned char *_buf, int len)
{
        int ret = write_hardware(dev_fd, _buf, len);
        if (ret < 0) {
                printf("Failed to write_hardware to the output!\n");
                return -1;
        } else {
                return 0;
        }
}

EXPORT int uart_send_char(int dev_fd, unsigned char value)
{
        return uart_send_buf(dev_fd, &value, 1);
}
串口的发送和接收都是利用write和read函数实现,直接读取设备和写设备。
5)释放设备
EXPORT int uart_deinit(int dev_fd)
{
        int ret = 0;
        if ((ret = uart_reset_port(dev_fd)) == -1) {
                return -1;
        }
        close_hardware(dev_fd);
        return ret;
}
串口恢复默认设置,关闭串口设备。
原创粉丝点击