uart

BeagleBone Black UART software FIFO size?

守給你的承諾、 提交于 2020-02-04 07:01:59
问题 I'm developing a custom application on the BeagleBone Black that has to use the UART capabilities of the device via the Debian Linux that runs on the BBB, for reading big chunks of data. For reading from the UART I'm opening one of the /dev/ttyO0, /dev/ttyO1, etc. devices with the open() function in nonblocking mode. And then I'm trying to read from this port with the read(2) function: ssize_t read(int fd, void *buf, size_t count); I would like to know what is the biggest reasonable number

UART串口的H4协议和H5协议

∥☆過路亽.° 提交于 2020-02-02 03:08:04
链接 https://www.cnblogs.com/-glb/p/11617662.html 于3线串口和5线串口,它们之间有什么差别呢? 对于3线串口,它只有三条线:TxD、RxD、GND。5线串口比三线串口多了两条线:CTS、RTS,用来控制流量。 使用三线串口和无线串口传输同一个数据时,它们使用的协议不一样。 假设图中红色的部分就是要发送的数据,当使用三线串口时可能给它加上头部、尾部后再发送给硬件,当使用五线串口时可能将数据直接发给硬件。 从这个地方可以产出,无论是三线串口还是五线串口,它们的底层硬件操作都是一样的。因此在硬件的这一层,又抽象出了一个结构体:uart_driver。使用该结构体来操作硬件。 H5协议只是将数据加上各种头部和各种尾部,H4协议也只是对数据进行了某种处理。 来源: CSDN 作者: 半片饼干 链接: https://blog.csdn.net/lwx62/article/details/104132442

S3C2440-裸机篇-06 | UART数据发送和接收实验(扫描模式)

烈酒焚心 提交于 2020-01-31 08:37:26
关于RS-232C串口总线通信标准请参见我的另一个系列专题文章: 【嵌入式系统通信协议②】EIA RS-232C串口总线标准 实验 —— UART数据收发实验 1. 看原理图确定UART硬件如何连接 由原理图可以看出,JZ2440开发板上将三个串口全部引出,其中 UART0设置了板载的USB转串口电路 ,只需连接板上的USB口就可以,所以接下来我们使用UART0进行数据收发实验。 2. 看芯片手册设置引脚复用功能(GPHCON)、开启片内上拉(GPHUP) 由原理图可以看出,UART0的引脚是: GPH2 :TXD0 GPH3 :RXD0 这两个引脚都是普通的GPIO口,所以需要设置引脚复用功能,作为串口UART0的引脚: 在【 【嵌入式系统通信协议②】EIA RS-232C串口总线标准 】一文中讲解通信协议的时候讲过,串口的两根信号线在空闲的时候需要保持高电平,所以要开启这两个引脚的片内上拉电阻: 3. 看芯片手册设置串口 3.1.设置串口数据帧格式(ULCONn) 3.2.设置串口(UCONn) 3.2.1.设置串口波特率产生器的时钟源([11:10]) 之前在【 【S3C2440⑤】S3C2440时钟体系 】中进行实验设置了时钟 PCLK=50Mhz ,所以在此基础上选择 PCLK 作为串口UART0的波特率发生器的时钟来源: 3.2.2.设置发送/接收数据模式([3:0])

UART协议详解

荒凉一梦 提交于 2020-01-27 06:42:14
UART(Universal Asynchronous Receiver/Transmitter)是一种异步全双工串行通信协议,由Tx和Rx两根数据线组成,因为没有参考时钟信号,所以通信的双方必须约定串口波特率、数据位宽、奇偶校验位、停止位等配置参数,从而按照相同的速率进行通信。 异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。当波特率为9600bps时,传输一个bit的时间间隔大约为104.16us;波特率为115200bps时,传输一个bit的时间间隔大约为8us。 数据传送速率用波特率来表示,即每秒钟传送的二进制位数。例如数据传送速率为120字符/秒,而每一个字符为10位(1个起始位,7个数据位,1个校验位,1个结束位),则其传送的波特率为10×120=1200字符/秒=1200波特。 数据通信时序图: 其中各位的意义如下: 起始位:先发出一个逻辑”0”信号,表示传输字符的开始 数据位:可以是5~8位逻辑”0”或”1”;如ASCII码(7位),扩展BCD码(8位);小端传输,即LSB先发,MSB后发 校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验) 停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平(用于双方同步,停止位时间间隔越长,容错能力越强)

ZigBee 裸机 uart 配置

旧城冷巷雨未停 提交于 2020-01-26 17:18:10
一、 usart 数据发送 1、 usart介绍 1)cc2530中,有两个串口, UART0 对应的外部设备 IO 引脚关系为:P0_2------RX, P0_3------TX UART1 对应的外部设备 IO 引脚关系为:P0_5------RX, P0_4------TX 2)模式 UART 模式和 SPI 模式 2、 uart 配置 1) CLKCONCMD&=~0x40; // 选择系统时钟源为外部 32MHzcrystaloscillator。 2) while(CLKCONSTA&0x40); // 等待晶振稳定 3) CLKCONCMD&=~0x47; // 设置系统主时钟频率 32MHZ 4) PERCFG=0x00; //位置 1P0 口 5) P0SEL=0x3c; //P0_2,P0_3 用作串口(IO 复用) 6) P2DIR&=~0XC0; //P0 优先作为 UART0 ,优先级 7) U0CSR|=0x80; //UART 方式 8) U0GCR|= 11; //U0GCR 与 U0BAUD 配合 9) U0BAUD|=216; // 波特率设为 115200 10) UTX0IF =0; //UART0TX 中断标志初始置位 1(收发时候) 3、 其他 当 USART 收/发数据缓冲器、寄存器 UxBUF 写入数据时,该字节发送到输出引脚

CC2530在IAR下printf重定向

给你一囗甜甜゛ 提交于 2020-01-26 13:11:59
CC2530在IAR下的printf函数重定向,与8051的方法是一致的: 第一步包含头文件: # include <stdio.h> 第二步定义putchar函数: __near_func int putchar ( int c ) { UTX0IF = 0 ; U0DBUF = ( char ) c ; while ( UTX0IF == 0 ) ; return ( c ) ; } 第三步:在初始化函数时配置好串口 void SampleApp_Init ( uint8 task_id ) 函数里添加 halUARTCfg_t uart_config ; uart_config . configured = TRUE ; uart_config . flowControl = FALSE ; uart_config . baudRate = HAL_UART_BR_9600 ; //这里的波特率是9600 HalUARTOpen ( HAL_UART_PORT_0 , & uart_config ) ; 完成以上步骤就可以使用printf函数了 参考: https://blog.csdn.net/bsaver/article/details/51120040 来源: CSDN 作者: qq_40787630 链接: https://blog.csdn.net/qq

AVR单片机教程——UART进阶

社会主义新天地 提交于 2020-01-25 23:27:48
本文隶属于 AVR单片机教程 系列。 在第一期中,我们已经开始使用UART来实现单片机开发板与计算机之间的通信,但只是简单地讲了讲一些概念和库函数的使用。在这一篇教程中,我们将从硬件与软件等各方面更深入地了解UART。 USART组件 一直在讲的UART其实是USART组件的一部分,USART比UART多了同步的一部分,但这一部分用得太少(我从来没用过),而且缺乏实例,所以就略过了。然而,单片机的设计者很机智地把这个鸡肋功能升华了一下,USART组件可以支持SPI模式。SPI是一种同步串行总线,可以支持很高的传输速率。这个功能使得ATmega324PA支持最多3个SPI通道,其中一个是纯SPI,另两个就是SPI模式下的USART。我们将在下一讲中揭开SPI的神秘面纱。 回到UART模式下的USART组件。开发板引出的 RX 和 TX 引脚是属于USART0组件的,因此使用时以下 n 都用 0 代替。 UART共有5个寄存器: UDRn 是收发数据寄存器,收( RXB )和发( TXB )使用不同的寄存器,但都通过 UDRn 来访问。向 TXB 写入一个字节,UART就开始发送; RXB 保存接收到的数据,带有额外一个字节的缓冲(如同下一节要讲的缓冲区)。 UCSRnA 包含UART状态位,如三个中断对应的标志,以及一些不常用的设置位。 UCSRnB 主要用于使能

ARM裸编程系列---UART

久未见 提交于 2020-01-25 11:52:39
S5PV210 UART说明 通用异步收发器缩写UART,这是UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER。它被用来传送串行数据。当发送数据,CPU将并行数据写入UART,UART依照一定的格式在一根电线上串行发出;接收数据 时。UART检測还有一根电线的信号,将串行收集在缓冲区中。CPU就可以读取UART获得这些数据。 在S5PV210中。UART提供了4对独立的异步串口I/Oport,有4个独立的通道,每个通道能够工作于DMA模式或者中断模式。当中,通道0有 256byte的的发送FIFO和256byte的接收FIFO,通道1有64byte的的发送FIFO和64byte的接收FIFO,而通道2和3仅仅有 16byte的的发送FIFO和16byte的接收FIFO。 S5PV210的uart结构图例如以下: UART使用标准的TTL/CMCOS逻辑电平来表示数据,为了增强数据抗干扰能力和提高传输长度,通常将TTL/CMOS逻辑电平转换为RS-232逻辑电平,查看原理图可知Mini210S使用的是MAX3232SOP芯片,使用的是TX0和DX0: 搜索“XuTXD0”,可知: 通过设置UART相关寄存器。我们就能够驱动UART工作,达到发送和接收字符的目的。 样例: int main() { char c; uart_init();

linux下uart应用编程

喜夏-厌秋 提交于 2020-01-24 10:01:08
目的: 在用户空间通过读写uart设备文件,控制uart串口发送和接收数据。 在用户空间设置uart波特率、奇偶校验使能等操作是通过 termios结构体 和 termios库函数 完毕。须要在应用程序中包括 termios.h 头文件。 一、termios结构体定义 #define NCCS 17 // 控制字符数组的长度。 struct termios { unsigned long c_iflag; // 输入模式标志 unsigned long c_oflag; // 输出模式标志 unsigned long c_cflag; // 控制模式标志 unsigned long c_lflag; // 本地模式标志 unsigned char c_line; // 线路规程(速率) unsigned char c_cc[NCCS]; // 控制字符数组 }; c_iflag标记參数有: #define IGNBRK 0000001 // 输入时忽略BREAK 条件 #define BRKINT 0000002 // 假设没有设置IGNBRK,则在BREAK 时产生SIGINT 信号 #define IGNPAR 0000004 // 忽略奇偶校验和帧错误 #define PARMRK 0000010 // 标记奇偶校验错,在INPCK被设置且IGNPAR未被设置时才实用

NB与stm32通信

▼魔方 西西 提交于 2020-01-24 01:44:22
##用NB-IOT上的stm32单片机通过UART和USART串口与电脑通信 ###串口通信流程下收发数据流程: 中断触发—>进入中断服务函数—>根据中断服务函数中的状态(中断向量表)运行相对应的函数—>执行回调(callback)函数 [有关callback函数的定义请参见《windows环境下32位汇编》.作者罗云彬.第二章.windows环境下消息处理队列] ###函数解释: USART2_IRQ_HANDLER(void);//中断服务函数,主要工作是判断标志位,判断接收的数据是否是错误的,如果是错的就进入对应的回调函数,如果没错的话就进入static void UART_RxlSR_8BIT(UART_HandleTypeDef *huart2); static void UART_RxlSR_8BIT(UART_HandleTypeDef *huart2);//隶属于接收使能函数,这个函数就是在流程中提到的中断服务函数相对应的函数 HAL_UART_RECEIVE_IT(UART_HandleTypeDef *huart2,uint8_t *pData,uint16_t Size); /*接收使能函数,如果通信过程中收到数据想要保存,必须运行接收使能函数。我在调试过程中,因为没有加这个函数,所以一直收不到32发来的数据。 参数解释:*huart2指串口2的句柄。