控制/MCU
UART通信简介
UART即通用异步收发器(UniversalAsynchronousReceiver/Transmitter),和IIC一样,其总线构成只有两根线,即TX和RX,但其可以同步收发,故UART为异步、全双工的串行通信方式;其在嵌入式单片机领域具有极其广泛的应用,如通常的串口通信:RS232、RS485、RS422、TTL等。
UART通信允许两个时钟不同的设备进行通信,其原理就是通过双方约定相同的波特率(即单位时间内传送的码元符号的个数,它是对符号传输速率的一种度量)和数据帧格式(即数据位数,校验方式,停止位等)进行数据的收发,波特率的单位是每秒比特数(bps),常用的波特率有:1200bps,2400bps,4800bps,9600bps,19200bps,38400bps,57600bps,115200bps,921600bps等。
UART通信的实现需要两根通信线:TX和RX,其中TX用于数据的发送,RX用于数据的接收,其中主机的TX接设备的RX,主机的RX接设备的TX。
UART通信协议
要实现双方通信则先要定义双方的通信的波特率,然后再进行数据的收发;下面来介绍一下UART通信中的数据帧是怎样的:
UART通信特点
UART相关代码
UART在我们开发中最常用到的功能就是串口调试功能,以下附上软件UART串口的相关代码供大家参考:
void uart_init(void)//uart初始化
{
UART_InitTypeDef UART_InitStructure;
GPIO_PinRemapConfig(GPIOA, GPIO_Pin_0 | GPIO_Pin_1, GPIO_Remap_0);
UART_InitStructure.UART_BaudRate = 115200;
UART_InitStructure.UART_WordLength = UART_WordLength_8b;
UART_InitStructure.UART_StopBits = UART_StopBits_1;
UART_InitStructure.UART_Parity = UART_Parity_No;
UART_Init(UART0, &UART_InitStructure);
}
以上初始化主要为配置相应IO口复用为UART模式(TX脚配为复用推挽输出,RX脚配为浮空输入),配置串口波特率为115200、数据位为8位、1位停止位、无校验位。
//重定位C库函数printf到UART0, 发送一字节数据到UART
int fputc(int c,FILE*f)
{
while(!UART_IsTXEmpty(UART0));
UART_SendData(UART0, (uint8_t) ch);
return ch;
}
//重定位C库函数scanf到UART0,等待串口输入数据
int fgetc(FILE *f)
{
while(UART_GetFlagStatus(UART0,UART_FLAG_RXNE) == RESET);
return(int)UART_ReceiveData(USART0);
}
全部0条评论
快来发表一下你的评论吧 !