通信协议——uart
来源:互联网 发布:wirelessmon mac版 编辑:程序博客网 时间:2024/06/05 13:47
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上,且UART可实现全双工通信。
UART初始化需要定义的一些参数:
1. 起始位
2. 数据位(8位或9位)
3. 奇偶校验位(第9位)
4. 停止位
5. 波特率设置
如下图所示
UART接收数据过程
1. 输入移位寄存器将在串行数据输入线上的数据逐位移入,当数据装满后,发送到输入缓冲寄存器(SBUF)中
2. 当SBUF装载完数据时,产生中断,并且接收中断标志位置1
3. CPU可以此时可以在中断函数中读取SBUF中的数据
其接收中断函数如下:
/******************************************************************************** 函 数 名 :Uart_Interrupt()* 函数功能 :串口中断接收* 输 入 :无* 输 出 :无*******************************************************************************/void Uart_Interrupt(void) interrupt 4{ if(RI) {ES = 0; //串口中断禁止 RI = 0; //清除接收标志位 res = SBUF; //将接收到的数据存入一个变量if(res != 0x0a) //判断接收到的数据是否为换行符,0xa0为换行符的ASCII码 { Buff[len++] = res; //存入缓存数组}else{if(Buff[len-1] == 0x0d) //判断前一个数据是否为回车符{ urt_flag = 1; //置串口标志位为1,说明数据已经接收完成len--; //接收的数据不包括回车符,所以减1后为实际的字符数目}}ES=1;}}
UART发送数据过程
1. CPU将需要发送的数据传递给输出缓冲寄存器(SBUF,发送和接收缓冲寄存器是地址重叠,但物理结构独立的两个缓冲寄存器)
2. 输出移位寄存器接收输出缓冲寄存器的数据,然后一位一位进行输出,在输出完成后,发送标志位置1,完成数据发送
其发送数据函数如下:
/******************************************************************************** 函 数 名 :Uart_Sendstring(unsigned char *str)* 函数功能 :串口发送函数* 输 入 :需要发送的数组数据* 输 出 :无*******************************************************************************/void Uart_Sendstring(unsigned char *str){ unsigned char *str1; str1 = str; while(*str1 != '\0') //空字符,意味着结束,也可以自行定义一个结束字符 { SBUF = *str1;while(TI == 0); //等待发送标志位置位TI = 0; str1++; }}
阅读全文
0 0
- 通信协议——uart
- UART通信协议
- UART通信协议
- UART通信协议
- Uart通信协议
- 通信协议之UART
- UART、I2C、SPI通信协议
- 串口通讯—通信协议
- 串口通讯—通信协议
- 串口通讯—通信协议
- 串口通讯—通信协议
- 串口通讯—通信协议
- 串口通讯—通信协议
- 串口通讯—通信协议
- 串口通讯—通信协议
- 串口通讯—通信协议
- 串口通讯—通信协议
- 嵌入式学习笔记之UART通信协议
- LeetCodeday01
- 简单易用的数据库调用类(增、删、查、改)
- php curl编码类型设置、文件上传与接收数据
- android java中遇到的异常及报错如何解决?
- HihoCoder 1317 题解
- 通信协议——uart
- java jdk配置问题
- JAVA提高篇(25)--PrintWriter简介
- 349. Intersection of Two Arrays
- 【牛客】 操作系统 处理机的所有指令可以在()中执行。
- Java的三大框架
- Linux下解压命令大全
- HashMap全面分析及JDK8对HashMap的相关优化
- 为什么matplotlib显示opencv图像不正常