首页天道酬勤uart串口通信原理,linux串口读取命令

uart串口通信原理,linux串口读取命令

张世龙 05-13 01:05 25次浏览

URT串行通信无论是单片机开发还是嵌入式Linux开发,串行端口都是最常用的外围设备。 可以通过串行端口连接开发板和电脑,然后在电脑上通过串行调试助手调试程序。 许多模块(如蓝牙、GPS和GPRS )使用串行端口与主设备进行通信,但在嵌入式Linux上通常使用串行端口作为控制台

1. UART配置文件串行全称串行接口是指数据按顺序一个个传输,通信线路简单(两条线即可)。 URT需要三条线: TXD (发送)、RXD (接地)和GND (接地)才能与外部连接。 通信形式如下。

空闲位)数据线是在空闲状态下高电平开始位(降低数据线,表示开始数据传输的数据位)用于奇偶校验数据中的1位数的停止位)数据即,1秒钟内传送数据位数UART的一般的接口电平是TTL和RS232,TTL在低电平表示逻辑0,在高电平表示逻辑1; RS232采用差分线,-3 ~ -15V表示逻辑1,-3 ~ -15V表示逻辑0

IMX6U共有8个UART,多为UART功能,但这里只使用其最基本的串行功能。 UART的时钟源在寄存器CCM_CSCDR1中的UART_CLK_SEL比特中选择,并且分频值在UART_CLK_PODF比特中设置。 以下是UART的一些重要寄存器。

UARTx_UCR1控制寄存器1

ADBR :自动波特率检测有效位UARTEN:UART有效位UARTx_UCR2控制寄存器2

IRTS:RTS引脚功能在0时使用,1时为PREN :奇偶校验使能位PROE :奇偶校验模式选择位STOP :停止位数,0时为1位停止位,1时为2位停止位WS :

RXDMUXSEL :始终设置1 UARTx_UCR3状态寄存器2

TXDC )发送完成标志位,1表示发送缓冲器和移位寄存器为空(即发送完成) RDR )数据接收标志位,1表示至少一个数据UARTx_USR2,http://www.Sina

UARTx_UFCR接收数据寄存器

UARTx_UBMR发送数据寄存器

使用UARTx_UBIR和UART1完成开发板与串行助手之间的通信。 UART1的构成步骤如下。

通过设置UART1的时钟源初始化UART1,UART1可以创建UART1的数据发送和接收函数2。 硬件介绍了此例程所需的硬件资源。

LED0UART1

使用USB串行电缆连接串行端口1和电脑后,使用串行调试助手与电脑进行通信

3 .程序创建新的uart文件夹、uart驱动文件bsp_uart.c和bsp_uart.h /*函数声明*/voidUART_init(void ); voidUart_io_init(void; void UART _ disable (UART _ type * base ); voidUart_enable(Uart_type*base ); void UART _ soft reset (UART _ type * base; 通用密码(void putc ); 语音推送(char * str ); 无符号密码(void; /*初始化串行端口1,将波特率设置为115200*/voiduart_init(void ) ) {uart_io_init; //串行端口IO/*初始化UART1*.UART_disable(UART1); //首先关闭UART1UART_softreset(UART1)//软件复位UART1UART1-UCR1=0; 清除//UCR1寄存器后设置UART的UCR1寄存器,关闭自动波特率* bit14: 0关闭自动波特率检测,自己设置波特率*/UART1-UCR1=~(114 ) 设定内容包括字长、停止位、检查模式。 关闭RTS硬件流控制* bit1: 1忽略RTS引脚*关闭bit 8:0奇偶校验*bit6:1位停止位* bit5: 1 8位数据位* bit2: 1打开发送* uart1-UCR2| /* UART1的UCR3寄存器* bit2: 1请务必设置为1。 参考IMX6ULL参考手册第3624页*/UART1-g

t;UCR3 |= 1<<2; /* 设置波特率 * 波特率计算公式: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=80MhzUART1->UBIR = 71;UART1->UBMR = 3124;/* 使能串口 */uart_enable(UART1);}/* 初始化串口1所使用的IO引脚 */void uart_io_init(void){/* 1、初始化IO复用 * UART1_RXD -> UART1_TX_DATA * UART1_TXD -> UART1_RX_DATA */IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_TX,0);/* 复用为UART1_TX */IOMUXC_SetPinMux(IOMUXC_UART1_RX_DATA_UART1_RX,0);/* 复用为UART1_RX *//* 2、配置UART1_TX_DATA、UART1_RX_DATA的IO属性 *bit 16:0 HYS关闭 *bit [15:14]: 00 默认100K下拉 *bit [13]: 0 keeper功能 *bit [12]: 1 pull/keeper使能 *bit [11]: 0 关闭开路输出 *bit [7:6]: 10 速度100Mhz *bit [5:3]: 110 驱动能力R0/6 *bit [0]: 0 低转换率 */IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_TX,0x10B0);IOMUXC_SetPinConfig(IOMUXC_UART1_RX_DATA_UART1_RX,0x10B0);}/* @description : 关闭指定的UART * @param - base: 要关闭的UART * @return: 无 */void uart_disable(UART_Type *base){base->UCR1 &= ~(1<<0);}/* @description : 打开指定的UART * @param - base: 要打开的UART * @return: 无 */void uart_enable(UART_Type *base){base->UCR1 |= (1<<0);}/* @description : 复位指定的UART * @param - base: 要复位的UART * @return: 无 */void uart_softreset(UART_Type *base){base->UCR2 &= ~(1<<0); /* UCR2的bit0为0,复位UART */while((base->UCR2 & 0x1) == 0); /* 等待复位完成 */}/* @description : 发送一个字符 * @param - c: 要发送的字符 * @return: 无 */void putc(unsigned char c){while(((UART1->USR2 >> 3) &0X01) == 0);/* 等待上一次发送完成 */UART1->UTXD = c & 0XFF; /* 发送数据 */}/* @description : 发送一个字符串 * @param - str: 要发送的字符串 * @return: 无 */void puts(char *str){char *p = str;while(*p)putc(*p++);}/* @description : 接收一个字符 * @param : 无 * @return: 接收到的字符 */unsigned char getc(void){while((UART1->USR2 & 0x1) == 0);/* 等待接收完成 */return UART1->URXD;/* 返回接收到的数据 */} 主程序main.c编写 int main(void){unsigned char a = 0;unsigned char state = OFF;int_init(); /* 初始化中断(一定要最先调用!) */imx6u_clkinit();/* 初始化系统时钟 */delay_init();/* 初始化延时 */clk_enable();/* 使能所有的时钟 */led_init();/* 初始化led */beep_init();/* 初始化beep */uart_init();/* 初始化串口,波特率115200 */while(1){puts("请输入1个字符:");a = getc();putc(a);//回显功能puts("您输入的字符为:");putc(a);puts("\r\n\r\n");state = !state;led_switch(LED0, state);}return 0;} 4. 下载验证 修改Makefile文件:修改TARGET为uart,追加“bsp/uart”文件夹,还需修改如下代码 $(SOBJS) : obj/%.o : %.S$(CC) -Wall -nostdlib -fno-builtin -c -O2 $(INCLUDE) -o $@ $<$(SOBJS) : obj/%.o : %.c$(CC) -Wall -nostdlib -fno-builtin -c -O2 $(INCLUDE) -o $@ $<#加入了“-fno-builtin”选项,表示不使用内建函数,使用自已实现的函数#如果不加该选项,编译的时候回提示“putc”“puts”这两个函数与内建函数冲突 使用imxdownload软件将wxdhj文件下载到SD卡中烧写成功后,插入SD卡,使用串口工具连接开发板,复位后提示输入字符,输入字符后会回显出来

uart串口扩展芯片,uart串口最大速度 nrf52832开发环境,nrf51822中文手册