通信协议——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++;    }}