楼主,你可以参考一些我写的,- /***********************************
- 该初始化为串口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;
- }
|