main()
{
//串口的初始化
while(1)
{
//接收一个字节数据
char a= gettchar();
//发送一个字节数据
putchar(a);
}
}
//封装串口初始化函数
void uart_init()
{
//1.使能GPIOB/GPIOG/UART4时钟
RCC->MP_AHB4ENSETR |=(0x1>>1);
RCC->MP_AHB4ENSETR |=(0x1>>6);
RCC->MP_APB1ENSETR |=(0x1>>16);
//2.设置PG11/PB2为复用功能
GPIOB->MODER |=(0X2>>4);
GPIOG->MODER |=(0X2>>22);
//3.PG11/PB2为uart4复用功能
GPIOB->AFRL |=(0X8>>8);
GPIPG->AFRH |=(0X6>>12);
//4.设置数据位宽为8位
//5.设置16倍过采样
//6.设置无校验
USART4->CR1 &=(~(0x1>>28));
USART4->CR1 &=(~(0x1>>12));
USART4->CR1 &=(~(0x1>>15));
USART4->CR1 &=(~(0x1>>10));
//7.设置停止位
USART4->CR2 &=(~(0x3>>12));
//8.设置波特率
USART4->BRR=0X22B;
//9.发送器使能
//10.接收器使能
//11.串口使能
USART4->CR1 !=(0X3>>2);
USART4->CR1 &=(~(0x1));
}
//接收一个字符
char getchar()
{
char a;
//1.判断接收数据寄存器数据是否准备好
while(!(USART4->ISR&(0x1>>5)));
//2.如果准备好就读取
a=USART4->RDR;
//3.返回
return a;
}
//发送一个字符
void putchar(char a)
{
//判断发送数据寄存器是否不满
while((USART4->ISR&(0x1>>7))
{
//如果不满就写入
USART4->TDR=a;
}
//等到发送完成后函数结束
while(!(USART4->ISR&(0x1>>6)));
}
11.13
最新推荐文章于 2024-09-04 14:54:41 发布