Ubuntu下的CuteCom串口详细调试教程

I.MX6ULL嵌入式开发学习——串口调试

一、Ubuntu下的串口调试助手安装

  嵌入式开发学习过程中学习到串口调试这一章,以前在Win10操作时都有相对应的串口调试界面,安装个串口驱动在电脑设备端口里面看到COM3时就可以实现串口通信。所以在乌班图系统学习串口实验时也希望能够有个串口调试界面。

1、CuteCom串口调试工具安装

   安装,首先下载这个软件,终端和软件中心均可下载,在Ubuntu软件商店直接搜索一下CuteCom这个软件就可以直接下载了,也可以通过终端输入如下命令下载。

sudo apt-get install cutecom

下载安装好后,可以通过所以软件中心搜索到图标打开(可能因没有root权限不能正常工作),所以建议终端输入利用命令行打开,输入:

sudo cutecom

打开后串口图形界面:
在这里插入图片描述

2、配置CuteCom串口调试工具

   和win一样也是需要找到相对应的串口端口,我们在实际使用的时候,大部分都用了USB转串口。也就是ttyUSB*。可以插拔一下USB转串口线,然后看看内核打印:

dmesg | grep ttyS*   

在这里插入图片描述
比较前后插拔打印信息的不同找到自己对应的串口。
  在嵌入式开发中,大部分都用了USB转串口。也就是ttyUSB*。但是在CuteCom中,奇怪的是device里面是找不到 ttyUSB0 这个串口,所以在这里我们需要自己手动输入添加自己的端口。如图是我自己添加我电脑的串口,波特率设置为115200。

在这里插入图片描述

如果提示Could not open /dev/ttyUSB0,这是因为 ttyUSB0的读写权限不够, 更改权限即可。

sudo chmod 666 /dev/ttyUSB0

3、调试CuteCom

  确定好后,选择Device,设置好需要通讯的设备的波特率、校验位等等,点击Open,打开串口。如果需要发送十六进制数据,界面右下角选input就行了。一切准备就绪后就可以和下位机通讯啦!
在这里插入图片描述

二、I.MX6ULL程序编写

1、UART原理篇

  UART 作为串口的一种,其工作原理也是将数据一位一位的进行传输,发送和接收各用一条线,因此通过 UART 接口与外界相连最少只需要三条线:TXD(发送)、RXD(接收)和 GND(地线)。UART 一般的接口电平有 TTL 和 RS-232,一般开发板上都有 TXD 和 RXD 这样的引脚,这些引脚低电平表示逻辑 0,高电平表示逻辑 1,这个就是 TTL 电平。RS-232 采用差分线,-3~-15V 表示逻辑 1,+3~+15V 表示逻辑 0。
  空闲位:数据线在空闲状态的时候为逻辑“1”状态,也就是高电平,表示没有数据线空闲,没有数据传输。
  起始位:当要传输数据的时候先传输一个逻辑“0”,也就是将数据线拉低,表示开始数据传输。
  数据位:数据位就是实际要传输的数据,数据位数可选择 5~8 位,我们一般都是按照字节传输数据的,一个字节 8 位,因此数据位通常是 8 位的。低位在前,先传输,高位最后传输。
  奇偶校验位:这是对数据中“1”的位数进行奇偶校验用的,可以不使用奇偶校验功能。
  停止位:数据传输完成标志位,停止位的位数可以选择 1 位、1.5 位或 2 位高电平,一般都选择 1 位停止位。
  波特率:波特率就是 UART 数据传输的速率,也就是每秒传输的数据位数,一般选择 9600、19200、115200 等

2、UART代码篇

  这里只讲I.MX6ULL串口这一部分。
  通过寄存器UCR1编写两个开闭串口函数和软复位函数。

//关闭串口函数
void uart_disable(UART_Type *base)  
{
    
    
    base->UCR1 &= ~(1<<0);   //关闭串口1
}

//打开串口函数
void uart_enable(UART_Type *base)  //打开串口函数
{
    
    
    base->UCR1 |= (1<<0);   //打开串口1
}
//软复位
void uart_softreset(UART_Type *base)
{
    
    
    base->UCR2 &= ~(1<<0); /* 复位 UART */
    while((base->UCR2 & 0x1) == 0); /* 等待复位完成 */
}

  通过库函数初始化RX和TX的IO引脚。

//串口IO初始化
void uart_io_init(void)
{
    
    
    //配置TX,RX引脚的服用io口和电器属性

    IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_TX, 0);                    //TX脚IO复用配置,....
    IOMUXC_SetPinMux(IOMUXC_UART1_RX_DATA_UART1_RX, 0);                    //RX脚IO复用配置,....
    IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_TX, 0x10B0);            //TX脚电器属性
    IOMUXC_SetPinConfig(IOMUXC_UART1_RX_DATA_UART1_RX, 0x10B0);            //RX脚电器属性
}

  串口初始化函数

//串口初始化
void uart_init(void)
{
    
    
    uart_io_init();  //串口IO初始化
   
    uart_disable(UART1); /* 先关闭 UART1 */
    uart_softreset(UART1); //软复位
    UART1->UCR1 = 0; /* 先清除 UCR1 寄存器 */
    UART1->UCR1 &= ~(1<<14); /* 关闭自动波特率检测 */

    UART1->UCR2 |= (1<<14) | (1<<5) | (1<<2) | (1<<1); //  设置 UART 的 UCR2 寄存器,设置字长,停止位,校验模式,关闭硬件流控
    UART1->UCR3 |= 1<<2; /* UCR3 的 bit2 必须为 1 */
/*
* 设置波特率
* 波特率计算公式:Baud Rate = Ref Freq / (16 * (UBMR + 1)/(UBIR+1)) 
* 如果要设置波特率为 115200,那么可以使用如下参数:
* Ref Freq = 80M 也就是寄存器 UFCR 的 bit9:7=101, 表示 1 分频
* UBMR = 3124
* UBIR = 71
* 因此波特率= 80000000/(16 * (3124+1)/(71+1))
* = 80000000/(16 * 3125/72) 
* = (80000000*72) / (16*3125) 
* = 115200
*/
    UART1->UFCR = 5<<7; /* ref freq 等于 ipg_clk/1=80Mhz */
    UART1->UBIR = 71;
    UART1->UBMR = 3124;

#if 0
uart_setbaudrate(UART1, 115200, 80000000); /* 设置波特率 */
#endif
 
uart_enable(UART1); /* 使能串口 */

}

  最后是,发送字符和接受字符函数。

//通过串口发送字符
void put_char(unsigned char c)
{
    
    
    while(((UART1->USR2 >> 3) &0X01) == 0);/* 等待上一次发送完成 */
    UART1->UTXD = c & 0XFF; /* 发送数据 */
}

//通过串口接受数据
unsigned char get_char(void)
{
    
    
    while(((UART1->USR2) &0X01) == 0);/* 等待上一次发送完成 */
    return UART1->URXD; /* 接受数据 */
}

//通过串口发送一串字符
void put_string(char *str)
{
    
    
    char *p = str;
    while(*p)
    {
    
    
        put_char(*p++);
    }
}

  main函数的编写验证

while(1)			
	{
    
    	
		// state = !state;
		// led_switch(LED0,state);
		// delay_ms(1000);
		
		
		put_string("wang zong gong niu bi !");
		
		put_string("\r\n\r\n");
		delay_ms(1000);
		a = get_char();
		put_char(a);	//回显功能
		put_string("\r\n\r\n");
}

  下入程序验证,结果正确!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/XZDMEN/article/details/109047712
今日推荐