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

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;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值