USART波特率为9600,采用8倍过采样 USART6 fck频率:84Mhz;
USARTDIV = 1093.75
DIV_M = (u32)USARTDIV
DIV_F = (USARTDIV - DIV_M) * 8 + 0.5
USART6->BRR |= (DIV_M << 4) |= DIV_F
float USARTDIV;u32 DIV_M,DIV_F;RCC->AHB1ENR |= 1;//端口A使能RCC->APB2ENR |= (1<<4);//usart1时钟使能GPIOA->MODER &= ~(0xf<<18);//PA9,PA10模式清零GPIOA->MODER |= (0xa<<18);//PA9,PA10模式为复用//AFP复位功能高位寄存器GPIOA->AFR[1] |= 7<<8;//USART1_RX 复用到PA10GPIOA->AFR[1] |= 7<<4;//USART1_RX 复用到PA9//配置usart1USARTDIV = 84000000 / 16 / bps;//波特率配置DIV_M = (u32)USARTDIV;//整数部分公式DIV_F = (USARTDIV - DIV_M) * 16 + 0.5f;//小数部分公式USART1->BRR |= DIV_M<<4 | DIV_F;//写入波特率寄存器USART1->CR1 &= ~(1<<15);//过采样为16倍,OVER8 = 0;USART1->CR1 &= ~(1<<12);//字长:1 起始位,8 数据位,n 停止位USART1->CR1 |= (1<<3);//使能发送器USART1->CR1 |= (1<<2);//使能接收器USART1->CR2 &= ~(3<<12);//停止位为1bitUSART1->CR1 |= 1<<13;//串口1使能
串口四要素:波特率,停止位,数据位,校验位
波特率:控制两个器件之间的数据传输速率,波特率越大数据传输速率就快 MCU -à PC通信 波特率设置为9600/115200256000(也是可以的,不建议用)
停止位:代表一帧数据传输的结束 选择1bit
数据位:决定数据传输长度 8bit= 1byte
校验位:奇偶校验 不使用
Odd:奇校验
Even: 偶校验
串口初始化
-
硬件分析,先对原理图进行分析可以复用的IO口,确认IO口
-
复用的IO初始化为复用模式
-
//AFP复位功能高位寄存器 不用担心发送和接受端,硬件自动调整
GPIOA->AFR[1] |= 7<<8;//USART1_RX 复用到PA10
GPIOA->AFR[1] |= 7<<4;//USART1_RX 复用到PA9
-
配置串口
-
USART_BRR波特率寄存器
-
USART_CR1对着配,使能以及过采样的倍数,最后串口使能
-
USART_CR2设置停止位
USART_SR为状态寄存器,判断是否发送和接收数据
USART_DR为数据寄存器,包括数据接收和发送两个寄存器,是数据所在地