初始化
1.计算波特率,公式 = (pclk2 * 1000000) / (bound * 16);
pclk2为APB2外设时钟,bound为波特率如9600(注意有4位小数部分)
2.使能串口所在的PORT时钟与串口时钟,PORT用来接收发送数据,串口用来处理,相当于一个是门,一个是内部的接收。(RCC->APB2ENR)
3.将串口对应的IO口初始化为相应的输入模式(手册P.110)。(GPIO)
4.复位串口RCC->APB2RSTR
5.将波特率的值(包括4位小数的16位)存入USART->BRR寄存器
6.USART1->CR1设置收发数据的格式,并打开UE
//如果是发送数据可以省略中断,但建议加上,可以在接收数据中断函数判断SR第5位(看看此次是否是接收数据)
7.设置中断USART1->CR1 |= 1 << 5;接收缓冲区非空中断使能
8,设置串口中断优先级MY_NVIC_Init(3,3,USART1_IRQn,2);
接收中断函数
注:读取DR会自动清除中断标志 USART1->SR第5位置1为标志
判断如果标志USART1->SR 1 << 5;
读取USART->DR
(可以设置接收协议)
发送函数
while(USART1->SR & 0x40)判断TC是否发送完成
USART1->DR = (u8)ch;
(注:以上为一次数据的收发)