#include "bsp_uart.h"
/************************************
* void Uart1Init(void)
* 初始化6ULL的串口1
* UART1_Tx -> GPIO1_IO6
* UART1_Rx -> GPIO1_IO7
************************************/
void Uart1Init(void)
{
//1.初始化串口1对应的IO
SW_MUX_UART1_TX = 0; //设置GPIO1_6为UART1_Tx
SW_MUX_UART1_RX = 0; //设置GPIO1_7为UART1_Rx
SW_PAD_UART1_TX = 0X10B0; //配置UART1_Tx IO属性
SW_PAD_UART1_RX = 0X10B0; //配置UART1_Rx IO属性
GPIO1_GDIR |= (1 <<6); //配置UART1_Tx IO为输出
GPIO1_GDIR &= ~(1 <<7); //配置UART1_Rx IO为输入
//2.初始化UART1
UART1_UCR1 &= ~(1<<0); //关闭串口1
UART1_UCR1 = 0; //清除UART1_UCR1
UART1_UCR2 = 0; //清除UART1_UCR2
UART1_UCR3 = 0; //清除UART1_UCR3
UART1_UCR2 &= ~(1<<0); //软复位串口1
while((UART1_UCR2 & 0x1)== 0); //等待复位完成
UART1_UCR1 &= ~(1<<14); //关闭自动波特率检测
UART1_UCR2 |= (1<<5); //数据位为8位
UART1_UCR2 &= ~(1<<8); //无效验位
UART1_UCR2 &= ~(1<<6); //1个停止位
UART1_UCR2 |= (1<<14); //忽略RST引脚
UART1_UCR2 |= (1<<2); //使能发送
UART1_UCR2 |= (1<<1); //使能接收
UART1_UCR3 |= (1<<2); //UCR3的bit2必须为1
//3.设置UART1波特率
// 波特率计算公式:Baud Rate = Ref Freq / (16 * (UBMR + 1)/(UBIR+1))
// 如果要设置波特率为 115200,那么可以使用如下参数:
// Ref Freq = 80M 也就是寄存器 UFCR 的 bit9:7=101, 表示 1 分频
// UBMR = 3124
// UBIR = 71
UART1_UFCR |= (5<<7); //ref freq 等于 ipg_clk/1=80Mhz
UART1_UBIR = 71;
UART1_UBMR = 3124;
UART1_UCR1 |= (1<<0); //打开串口1
}
/************************************
* void UART1_SendByte(unsigned char byte)
* 串口1 发送一个字节数据
************************************/
void UART1_SendByte(unsigned char byte)
{
UART1_UTXD = (byte & 0xFF); //发送数据
while(((UART1_UCR2 >>3) & 0x01) == 0); //等待发送完成
}
/************************************
* void UART1_SendStr(unsigned char *str)
* 串口1 发送字符串数据
************************************/
void UART1_SendStr(unsigned char *str)
{
while(*str== '\0')
{
UART1_SendByte(*str++);
}
}
/************************************
* unsigned char UART1_RecvByte(void)
* 串口1 接收一个字节数据
************************************/
unsigned char UART1_RecvByte(void)
{
while((UART1_USR2 & 0x1) == 0); // 等待接收完成
return UART1_URXD; // 返回接收到的数据
}
|