void uart0_init(void)//uart0的初始化
{
GPIOD.ALTFN0 &= ~( 3 << 28 );//将UART0对应的gpio口设置为UART模式
GPIOD.ALTFN0 |= ( 1 << 28 );
GPIOD.ALTFN1 &= ~( 3 << 4 );
GPIOD.ALTFN1 |= ( 1 << 4 );
UART0.UBRDIV = 26; //这里是设置串口的波特率,UBRDIV是整数部分
UART0.UFRACVAL = 2; //UFRACVAL是小数部分,算出的小数 * 16 就是该位的值
UART0.ULCON = 3; //这里是设置一次传输位数:这里是8位
UART0.UCON &= ~(0XF << 0 ); //这里是设置串口模式,这里设置的是收发位的模式
UART0.UCON |= ( 5 << 0 ); //设置为 中断或轮训模式
}
void uart0_putc(char data)
{
while((UART0.UTRSTAT & (1 << 2)) == 0) ;//这里UTRSTAT寄存器的对应为是用来检测发送
//缓存器是否为空
UART0.UTXH = data; //将数据放到UTXH寄存器中,芯片会自动发送数据
}
char uart0_getc(void)//用来接收数据的函数
{
char data = 0;
while((UART0.UTRSTAT & 1) == 0) ;//判断是否接受到数据
data = UART0.URXH & 0XFF; //接收到的数据会放到URXH寄存器中,将数据取出放到data中
return data;
}
int main()
{
char data;
uart0_init(); //初始化串口
while(1)
{
data = uart0_getc(); //接收数据
uart0_putc(data); //发送数据
}
}