楼主,你可以参考一些我写的,/***********************************
该初始化为串口2的初始化(包括管脚跟时钟),初始化只含发送,接受的
未弄,USART2_TX(PA2),USART2_RX(PA3)
************************************/
void USART2_Init(u32 Buand)
{
RCC->APB1ENR |= BIT(17);//开启USART2时钟
RCC->APB2ENR |= BIT(2); //使能GPIOA时钟
//此IO口初始化只针对USART2
/****************************************************************
模拟输入模式 0 浮空输入模式 4
上拉/下拉输入模式 8 保留 C
通用推挽输出模式(50M) 3 通用开漏输出模式(50M) 7
复用推挽输出模式(50M) B 复用开漏输出模式(50M) F
****************************************************************/
GPIOA->CRL &= 0XFFFF00FF;
GPIOA->CRL |= 0x00000B00;//复用推挽输出,50M,USART2_TX(PA2)
GPIOA->CRL |= 0X00008000;//上拉输入USART2_RX(PA3)
//设置波特率
switch(Buand)
{
case 2400: USART2->BRR =0x3A98;break;
case 9600: USART2->BRR =0xEA6; break;
case 19200: USART2->BRR =0x753; break;
case 57600: USART2->BRR =0x271; break;
case 115200: USART2->BRR =0x138; break;
case 230400: USART2->BRR =0x9C; break;
}
USART2->CR1 &=~BIT(12);//一个起始位,8位数据位
USART2->CR1 &=~BIT(10);//禁止校验
USART2->CR2 &=~(BIT(13)|BIT(12));//一个停止位
USART2->CR3 &=~BIT(3);//全双工模式
USART2->CR1 |= BIT(3)|BIT(2);//发送使能,接收使能
USART2->CR1 |= BIT(13);//USART使能
},void USART2_SendData(u8 data)
{
while(!(USART2->SR &0x40));//等待数据发送完成
USART2->DR = data;
}
|