UART概述
UART全称,Universal Asynchronous Receiver and Transmitter (UART), 一般是每个单片机或开发板必备的一个功能模块,可以用来调试,也可以用来连接一些模块(如,GPS,蓝牙等)。uart具体配置功能或者说应该怎么配置,实际上在硬件设计上已经固定了,例如在SOC芯片设计的时候已经设计UART的数量,使用方法。当你在使用的UART的时候仅仅根据你的需求进行配置相关寄存器来使用即可。
UART开发流程
1.了解UART原理
在开发的过程中,你只要知道,UART需要连接三根线。一根是RX用来接收数据,一根是TX用来发送数据,还有一根是GND用来给双方提供电平参考即可。连接示意图如下:
一般也有用RS-232逻辑电平来增加数据的抗干扰能力和传输数据,只不过是电平的表示方法而已,本文不做过多解释,有需要的可以参考其他文章,运用原理都是一样的。
UART数据帧中可以有5、6、7或8位数据。发送方一位一位的改变数据线的状态,将数据发送出去,首先从低位开始发送。如果需要校验功能,UART在发送数据后还要发送一位校验位。校验方式可以分为:奇偶校验,也就是数据位连同校验位的“1”的数目等于奇数或者偶数。
uart控制器内部原理如下图所示:
从图中可以看出,不管时接受端(RX)还是发送端(TX)都有一个移位寄存器和一个FIFO(这个不是必须的,有些MCU可能没有),通过配置相关的寄存器来收发数据即可。
2.明确目标
Each UART contains a baud-rate generator, transmitter, receiver and a control unit
在了解UART基本原理之后,你要明白你使用UART的目的是什么,uart是否可以满足你的需求。如果可以满足你的目的,你需要配uart什么样的功能。具体的可以参考芯片手册。
The following sections describe the UART operations that include data transmission, data reception, interrupt
generation, baud-rate generation, Loopback mode, Infrared mode, and auto flow control.
3.开发代码
(1)将所涉及的UART通道管脚设为UART功能
(2)设置波特率
(3)设置数据格式
(4)选择时钟源和中断方式
void uart0_init()
{
GPHCON &= ~((3<<4) | (3<<6));
GPHCON |= ((2<<4) | (2<<6));
GPHUP &= ~((1<<2) | (1<<3));
UCON0 = 0x00000005;
UBRDIV0 = 26;
ULCON0 = 0x00000003;
}
(5)读取数据与发送数据
int putchar(int c)
{
while (!(UTRSTAT0 & (1<<2)));
UTXH0 = (unsigned char)c;
}
int getchar(void)
{
while (!(UTRSTAT0 & (1<<0)));
return URXH0;
}
int puts(const char *s)
{
while (*s)
{
putchar(*s);
s++;
}
}
4.调试
在单片机中的main函数中进行串口的揭发数据:
int main(void)
{
unsigned char c;
uart0_init();
puts("Hello, world!\n\r");
while(1)
{
c = getchar();
if (c == '\r')
{
putchar('\n');
}
if (c == '\n')
{
putchar('\r');
}
putchar(c);
}
return 0;
}
利用串口调试助手进行调试,如果有条件的话可以把示波器拿出来,抓取一下波形进行分析。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)