STM32hal库学习(F1)-串口UART

通信基础概念

串行/并行

串行STM32hal库学习(F1)-串口UART_第1张图片

并行

STM32hal库学习(F1)-串口UART_第2张图片

串行并行的区别

特点

传输速率

抗干扰能力

通信距离

IO资源占用

成本

串行通信

较低

较强

较长

较少

较低

并行通信

较高

较弱

较短

较多

较高

单工/半双工/全双工

单工通信:数据只能沿一个方向传输

STM32hal库学习(F1)-串口UART_第3张图片

半双工通信:数据可以沿两个方向传输,但需要分时进行

STM32hal库学习(F1)-串口UART_第4张图片

全双工通信:数据可以同时进行双向传输

STM32hal库学习(F1)-串口UART_第5张图片

同步/异步通信

同步通信:共用同一时钟信号

STM32hal库学习(F1)-串口UART_第6张图片

异步通信:没有时钟信号,通过在数据信号中加入起始位和停止位等一些同步信号

STM32hal库学习(F1)-串口UART_第7张图片

波特率/比特率

比特率:每秒钟传送的比特数,单位bit/s

波特率:每秒钟传送的码元数,单位Baud

比特率 = 波特率 * log2 M ,M表示每个码元承载的信息量。

二进制波特率视为比特率也可

常用串行通信

通信接口

接口引脚

数据同步方式

数据传输方向

UART

(通用异步收发器)

TXD:发送端

RXD:接收端

GND:公共地

异步通信

全双工

1-wire

DQ:发送/接收端

异步通信

半双工

IIC

SCL:同步时钟

SDA:数据输入/输出端

同步通信

半双工

SPI

SCK:同步时钟

MISO:主机输入,从机输出

MOSI:主机输出,从机输入

CS:片选信号

同步通信

全双工

几种电平

RS-232                                   逻辑1:-15V ~ -3V        逻辑0:+3V ~ +15V

COMS电平(3.3V)                 逻辑1:3.3V                  逻辑0:0V

TTL电平(5V)                         逻辑1:5V                     逻辑0:0V

RS232通信示意图

STM32hal库学习(F1)-串口UART_第8张图片

USB串口通信

STM32hal库学习(F1)-串口UART_第9张图片

RS-232异步通信协议

STM32hal库学习(F1)-串口UART_第10张图片

启动位:必须占1个位长,保持逻辑0电平

有效数据位:可选5、6、7、8、9个位长,LSB最低有效位在前,MSB最高有效位在后

校验位:可选占1个位长,也可以没有该位

停止位:必须有,可选占0.5、1、1.5、2个位长,保持逻辑1电平

USART

F1/F4/F7 USART框图

STM32hal库学习(F1)-串口UART_第11张图片

简化框图

STM32hal库学习(F1)-串口UART_第12张图片

设置UASRT波特率

STM32hal库学习(F1)-串口UART_第13张图片

波特率计算公式

064acd72bd2f47e688bd2c18ee76466c.png

其中Fck是串口时钟,USART1的时钟是PCLK2,其他串口都是PCLK1

波特比率寄存器BRR

STM32hal库学习(F1)-串口UART_第14张图片

用寄存器方法设置波特率

以波特率115200为例

a9e7146f7a474a90b58f4371bdcfc36d.png

寄存器代码

uint16_t mantissa; 
uint16_t fraction; 
mantissa=39; //整数部分
fraction=0.0625*16+0.5=0x01    //四舍五入减少误差

/* USARTDIV = DIV_Mantissa + (DIV_Fraction/16) */
USART1->BRR = (mantissa << 4) + fraction;

USART寄存器介绍

控制寄存器(CR1)

位13:使能USART

位12:配置8个数据位

位10:禁止检验控制

位5:使能接收缓冲区非空中断

位3:使能发送

位2:使能接收

控制寄存器(CR2)

配置1个停止位

STM32hal库学习(F1)-串口UART_第15张图片

控制寄存器(CR3)

配置不选择半双工模式

STM32hal库学习(F1)-串口UART_第16张图片

数据寄存器(DR)

设置好控制和波特率寄存器,往该寄存器写入数据即可发送,接受数据即可读该寄存器STM32hal库学习(F1)-串口UART_第17张图片

状态寄存器

通过TC位知道能否发数据

通过RXNE位知道是否收到数据

STM32hal库学习(F1)-串口UART_第18张图片

USART/UART异步通信配置步骤

STM32hal库学习(F1)-串口UART_第19张图片

函数介绍

HAL_UART_Init()

HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
typedef struct 
{    uint32_t BaudRate; 		/* 波特率 */ 
     uint32_t WordLength; 	    /* 字长 */
     uint32_t StopBits; 		/* 停止位 */ 
     uint32_t Parity; 			/* 奇偶校验位 */ 
     uint32_t Mode; 			/* UART 模式 */ 
     uint32_t HwFlowCtl; 		/* 硬件流设置 */ 
     uint32_t OverSampling; 	/* 过采样设置 */ 
}UART_InitTypeDef

HAL_UART_Receive_IT()

//作用:以中断的方式接收指定字节的数据
//形参 1 是 UART_HandleTypeDef 结构体类型指针变量
//形参 2 是指向接收数据缓冲区
//形参 3 是要接收的数据大小,以字节为单位
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

                                                                                                           

HAL_UART_Transmit()

//作用:以阻塞的方式发送指定字节的数据
//形参 1 :UART_HandleTypeDef 结构体类型指针变量
//形参 2:指向要发送的数据地址
//形参 3:要发送的数据大小,以字节为单位
//形参 4:设置的超时时间,以ms单位
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

                                                                             

HAL回调

MSP回调

STM32hal库学习(F1)-串口UART_第20张图片

例子

STM32hal库学习(F1)-串口UART_第21张图片

中断回调

STM32hal库学习(F1)-串口UART_第22张图片

例子

STM32hal库学习(F1)-串口UART_第23张图片

引脚复用

复用映射图

STM32hal库学习(F1)-串口UART_第24张图片

GPIO 复用功能低位寄存器(AFRL)

STM32hal库学习(F1)-串口UART_第25张图片

STM32hal库学习(F1)-串口UART_第26张图片

GPIO 复用功能高位寄存器(AFRH)

STM32hal库学习(F1)-串口UART_第27张图片

该文章参考正点原子资料,请勿商用

有错误地方请大家指点

你可能感兴趣的:(STM32,stm32,学习,嵌入式硬件)