Bootstrap

STM32 HAL库 STM32CubeMx -- 串口的使用(USART/UART)


前言

在上一篇博客里面写了串口通信的理论知识,在这一篇中将讲述串口通信在STM32CubeMx里面的配置,以及在函数里面怎么使用。

对于串口发送信息,分为三种方法:串口阻塞方式收发串口中断方式收发串口DMA方式收发。(DMA方式在之后的DMA章节讲解)


一、串口阻塞方式收发

STM32CubeMx配置

关于STM32CubeMx的基础配置讲解可以参考这篇博客STM32 CubeMx教程 – 基础知识及配置使用教程

配置RCC时钟,选择外部晶振模式:
RCC
配置SYS,debug模式SYS
然后配置串口,首先选择一种模式,我使用的是 USB转TTL,(VCC GND RXD TXD)没有使用时钟线(CLK),所以选择使用异步通信。Mode 选择 Asynchronous ;Hardware Flow Control 选择disable

USART
Mode:

Asynchronous:全双工异步通信

Synchronous:发送方为同步传输提供时钟的同步通信。在USART_CR2寄存器上写CLKEN位选择同步模式,用户可以以主模式方式控制双向同步串行通信,增加CK引脚作为USART发送器时钟的输出。

Single Wire:单线半双工通信。 单线半双工模式通过设置USART_CR3寄存器的HDSEL位选择。RX引脚不再被使用,TX和RX引脚在芯片内部互联,通过单线半双工协议与对侧交互数据。

Multiprocessor Communication:多处理器通信。 可以将几个USART连载一个网络里。

IrDA: (红外线数据协会) SIR ENDEC规范 。通过设置USART_CR3寄存器的IREN位选择IrDA模式。

LIN:局域互联网模式。 通过设置USART_CR2寄存器的LINEN位选择LIN模式。

Smart Card:智能卡模拟功能。 设置USART_CR3寄存器的SCEN位选择智能卡模式。智能卡是一个单线半双工通信协议。

Smart Card with Card Clock: CLKEN位可以被设置,以提供时钟给智能卡。

Hardware Flow Control
Hardware Flow Control :

Disable: 只通过RX和TX实现基本的串口通信

CTS Only: 在RX和TX的基础上增加CTS引脚,发送清除信号。若为高电平,在当前数据传输结束时阻断下一次的数据发送。

RTS Only: 在RX和TX的基础上增加RTS引脚,发送请求信号。若为低电平,表明USART准备好接收数据。在485通信中,需要使用该引脚。

CTS/RTS: 在RX和TX的基础上增加CTS和RTS引脚。

配置串口详细参数:

如果有自己喜欢的波特率可以改一改,大部分情况下是默认就行,不用改;

Parameter Settings
Parameter Settings:

Baud Rate:波特率。 通过波特率寄存器(USART_BRR)设置。

Word Length:字长。 数据位可选8位或9位 ,通过控制寄存器1(USART_CR1)中的M位设置。

Parity:奇偶校验选择。 校验位可选无校验(None)、偶校验(Even)、奇校验(Odd)。通过控制寄存器1(USART_CR1)中的PCE位和PS位设置。

Stop Bits:停止位。 停止位可选1位、2位。通过控制寄存器2(USART_CR2)中的STOP位设置。

Data Direction:数据方向。 可选收发(Receive and Transmit)、只接收(Receive Only)、只发送(Transmit Only)。通过控制寄存器1(USART_CR1)中的TE和RE位设置。

然后配置时钟树

时钟树
配置项目设置:

Project
Project
然后生成工程。

串口发送/接收函数

HAL_UART_Transmit();串口发送数据,使用超时管理机制 
HAL_UART_Receive();串口接收数据,使用超时管理机制
HAL_UART_Transmit_IT();串口中断模式发送  
HAL_UART_Receive_IT();串口中断模式接收
HAL_UART_Transmit_DMA();串口DMA模式发送
HAL_UART_Transmit_DMA();串口DMA模式接收

阻塞发送函数

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, 
;