linux 笔记(五)关于串口


前言

串口是工业产品中最常见的通讯端口,布线简单,抗干扰能力强。广泛的应用于各种项目、产品中。所以很多设备都支持串口通讯,我在学习imx6ull的过程中厂家的学习板也提供串口。NXP厂家也提供UART的串口设备驱动,只需要改写设备树就可以完成UART驱动的编写,看来linux下的串口驱动程序有时比MCU的UART稍微简单一些。
竟然驱动已经有了。我们只需使用C语言编写一个应用测试就可以了。

一、IMX6ULL的UART设备树

在设备树中增加uart3的描述:
pinctrl_uart3: uart3grp {
fsl,pins = <
MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1
MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1
>;
};
&uart3 {
pinctrl-names = “default”;
pinctrl-0 = <&pinctrl_uart3>;
status = “okay”;
};

二、编写测试程序

 
/*----------------------------------------------------------------------------------------
Includes
*/
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <sys/types.h>  
#include <sys/stat.h>  
#include <fcntl.h>  
#include <unistd.h>  
#include <termios.h>  
 
/*----------------------------------------------------------------------------------------
Macros
*/
 
 
/*----------------------------------------------------------------------------------------
Variables
*/
struct termios newtio,oldtio;  
 
int main(int argc , char ** argv)
{  
	int hFile;
    int nset,nread;  
 
	char buf1[100] = {0};  
	char *filename;
 
    /*1.参数校验*/
	if(argc !=2)
	{
		printf("输入错误!!!\r\n");	
		printf("请向终端输入: ./uartApp  /dev/ttymxc2  \r\n");
		return -1;
	}
 
	filename = argv[1];
 
    hFile = open( filename, O_RDWR);  
    if (hFile == -1) 
	{
		printf("打开执行文件 %s 错误\r\n",filename);
		exit(1);  
	}		
    printf("打开执行文件  %s  成功!!\n",filename);  
 
 
    /*初始化串口*/
    if ( tcgetattr( hFile,&oldtio)  !=  0)
    {  
        perror("获取终端失败");  
        exit(1);  
    }  
 
   bzero( &newtio, sizeof( newtio ) );  
 
    newtio.c_cflag  |=  CLOCAL | CREAD;      //CLOCAL:忽略modem控制线  CREAD:打开接受  
    newtio.c_cflag &= ~CSIZE;     
    newtio.c_cflag |= CS8;      //字符长度掩码。取值为:CS5,CS6,CS7或CS8  
    newtio.c_cflag &= ~PARENB;  
    newtio.c_cflag &=  ~CSTOPB;   //停止位设置
 
    //波特率设置
    cfsetispeed(&newtio, B115200);  
    cfsetospeed(&newtio, B115200);  
 
    newtio.c_cc[VTIME]  = 0; //VTIME:非cannoical模式读时的延时,以十分之一秒位单位  
    newtio.c_cc[VMIN] = 0; //VMIN:非canonical模式读到最小字符数  
    tcflush(hFile,TCIFLUSH); // 改变在所有写入 fd 引用的对象的输出都被传输后生效,所有已接受但未读入的输入都在改变发生前丢弃。  
    if((tcsetattr(hFile,TCSANOW,&newtio))!=0) 
    {  
       printf("串口初始化失败!!\n");  
       exit(1);  
    }  
 
    printf("串口初始化成功,请输入参数测试!!\n");  
 
	while (1)  
	{   
        	nread = read(hFile, buf1, 100);  
        	if(nread > 0)
            {  
            		printf("输入参数为= %s\n", buf1);
                    printf("请再次输入参数测试!!\n");
                    memset(buf1, 0, sizeof(buf1));  
        	}  
        	sleep(1);  
    }  
 
    close(hFile);  
    
	return 0;
}
 
/****************************************End of file************************************/

``

三.测试

在这里插入图片描述

标题hello world是通过出口助手发送:

在这里插入图片描述

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值