与串口基本配置直接相关的寄存器:
1、串口时钟使能。串口最为STM32的一个外设,其时钟由外设时钟使能寄存器控制(RCC->APB2ENR RCC->APB1ENR,具体哪个看参考手册时钟树)。
2、串口复位。当外设出现异常的时候可以通过复位寄存器里面对应位的设置实现该外设的复位,然后重新配置该外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外设的操作(APB1RSTR APB2RETR)。
3、串口波特率设置。SMT32的每一个串口都有一个自己独立的波特率寄存器USART_BRR,通过配置该寄存器就可以达到配置不同波特率的目的。
4、串口控制。STM32的每个串口都有3个控制寄存器USART_CR1~3。串口的很多配置都是通过这3个寄存器来设置的。
5、数据的发送与接收。STM32的发送与接收是通过数据寄存器USART_DR来实现的。这是一个双寄存器,包含TDR和RDR.当向该寄存器写数据的时候,串口就会自动发送,当收到数据的时候,也是存在该寄存器中。
6、串口状态。串口的状态可以通过状态寄存器USART_SR读取。
串口最基本的设置,就是波特率的设置。
STM32的串口使用步骤:
1、开启串口时钟
2、设置相应IO口的模式
3、配置波特率,数据位长度,奇偶检验等信息
4、使用串口
void uart_init(u32 pclk2,u32 bound) { float temp; u16 mantissa; u16 fraction; //根据波特率计算USART1->BRR的值 temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV mantissa=temp; //得到整数部分 fraction=(temp-mantissa)*16; //得到小数部分 mantissa<<=4; mantissa+=fraction; //使能外设 RCC->APB2ENR|=1<<2; //使能PORTA端口 RCC->APB2ENR|=1<<14; //使能串口 //设置复用的IO端口模式 GPIOA->CRH&=0XFFFFF00F;//PA9 PA10输入输出模式设置 GPIOA->CRH|=0X000008B0;// //外设复位 取消复位 RCC->APB2RSTR|=1<<14; //外设复位 RCC->APB2RSTR&=~(1<<14);//取消复位 //设置串口模式 波特率 停止位 校验位 是否使能接收 USART1->BRR=mantissa; // 波特率设置 USART1->CR1|=0X200C; //串口控制寄存器设置 1位停止位,无校验位 #if EN_USART1_RX //如果使能了接收 USART1->CR1|=1<<5; //接收缓冲区非空中断使能 MY_NVIC_Init(3,3,USART1_IRQn,2);//中断分组,组2,最低优先级 #endif }