Uart串口


title: Uart串口
tags: ARM
date: 2018-10-20 16:38:28

Uart串口

和单片机的应用没什么区别,首先设置IO复用,设置波特率和数据位,以及中断相关的,简单的应用测试可以先关掉中断.从下图看到,usb转串口连接到COM1COM1是内部的Uart0

mark

mark

程序初始化

UART0
RX0 GPH3
TX0 GPH2
//init uart
void Uart0_init()
{
	//配置GPIO 复用为uart
	//配置相应的 GPHCON 为10 串口
	// 也就是 _BIT5,BIT7 置1  BIT4,BIT6清零
	GPHCON &=~(_BIT4|_BIT5|_BIT6|_BIT7);
	GPHCON |=(_BIT5|_BIT7);

	//设置上拉
	GPHUP &=~(_BIT2|_BIT3);

	//禁止红外,8N1
	ULCON0=(_BIT0|_BIT1);

	// PCLK(50M),中断/查询模式打开
	// FCLK : HCLK : PCLK = 400m : 100m : 50m
	UCON0 = (0x01)|(0x01<<2); 
	UBRDIV0=26;//CLK/(baund*16)-1


	//UFCON0 FIFO 不使用
	//UMCON0 不使用流控
	//UTRSTAT0 中断标志位
	//UERSTAT0 错误标志
	//UFSTAT0  FIFO标志
	//UMSTAT0  模式配置,CTS
	//UTXH0、URXH0    BUF

	//这里要清除标志位,不然好像有点问题
	UTRSTAT0=0x06;
}

int putchar(int c)
{
	while(!(UTRSTAT0&_BIT2));
	// UTXH0 被定义为uint,这里应该是char类型的地址0x50000023(B) 
	UTXH0 = (unsigned char )c;
}
int getchar(void)
{
	while(!(UTRSTAT0&_BIT0));
	return URXH0;
}

int puts(const char *s)
{
	while(*s)
	{
		putchar(*s);
		s++;
	}
}
原文地址:https://www.cnblogs.com/zongzi10010/p/10023572.html