ARM接口编程—UART(exynos 4412平台)

发布于:2023-09-15 ⋅ 阅读:(72) ⋅ 点赞:(0)

UART简介

  • UART

Universal Asynchronous Receiver Transmitter即通用异步收发器,是一种通用的串行、异步通信总线该总线有两条数据线,可以实现全双工的发送和接收在嵌入式系统中常用于主机与辅助设备之间的通信

  • 波特率

波特率用于描述UART通信时的通信速度,其单位为bps(bit per second)即每秒钟传送的bit的数量

  • UART帧格式

在这里插入图片描述

UART寄存器配置

从电路原理图上可以看到CON7连接到UART_AUDIO_TXD和UART_AUDIO_RXD,最后连接到芯片的GPA1_0和GPA1_1引脚上
在这里插入图片描述

在这里插入图片描述

将GPA1_0和GPA1_1引脚设置成UART模式

在这里插入图片描述

串口控制寄存器

设置UART的帧格式,8位数据位,1位停止位,无校验,正常模式
在这里插入图片描述

设置UCON接收和发送为轮训模式

在这里插入图片描述

串口状态寄存器

存储各个模式的状态及收发的buffer状态
在这里插入图片描述
在这里插入图片描述

发送/接收寄存器

在这里插入图片描述

波特率寄存器

设置波特率的寄存器,公式为DIV_VAL = UBRDIVn + UFRACVALn/16

如果想设置波特率为115200,并且时钟频率为40Mhz:

DIV_VAL = (40000000/(115200 x 16)) – 1
= 21.7 – 1
= 20.7
在这里插入图片描述
代码:

#include "exynos_4412.h"

void uart_Init(void)
{
	// 将GPA1_0, GPA1_1引脚设置成UART收发模式
	GPA1.CON &= ~(0xFF) | 0x22;

	// 设置帧格式,8位数据位,1位停止位,无校验位
	UART2.ULCON2 &= ~(0x7F) | 0x3;

	// 设置串口收发为轮训模式
	UART2.UCON2 &= ~(0xF) | 0x5;

	// 设置串口波特率:DIV_VAL = (100000000 / (115200 x 16)) – 1 = 53.25
	UART2.UBRDIV2 = 53;
	UART2.UFRACVAL2 = 4;
}

void uart_Send(unsigned char c)
{
	// 等待发送缓冲区为空
	while(!(UART2.UTRSTAT2 & (1 << 1)));

	// 发送数据
	UART2.UTXH2 = c;
}

char uart_Revice(void)
{
	char ret = 0;
	// 等待接收缓冲区为1
	if ((UART2.UTRSTAT2 & 1))
	{
		ret = UART2.URXH2;
		return ret;
	}
	
	return 0;
}

void uart_Send_Str(char * pstr)
{
	while(*pstr != '\0')
		UART_Send_Byte(*pstr++);
}

int main()
{
	char ret = 0;

	uart_Send_Str("hello world");
	// 串口初始化
	uart_Init();
	while(1)
	{
		ret = uart_Revice();
		if (ret)
		{
			uart_Send(ret + 1);
		}
	}

	return 0;
}
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到