文章目录
前言
在上一篇博客里面写了串口通信的理论知识,在这一篇中将讲述串口通信在STM32CubeMx里面的配置,以及在函数里面怎么使用。
对于串口发送信息,分为三种方法:串口阻塞方式收发、串口中断方式收发、串口DMA方式收发。(DMA方式在之后的DMA章节讲解)
一、串口阻塞方式收发
STM32CubeMx配置
关于STM32CubeMx的基础配置讲解可以参考这篇博客STM32 CubeMx教程 – 基础知识及配置使用教程
配置RCC时钟,选择外部晶振模式:
配置SYS,debug模式
然后配置串口,首先选择一种模式,我使用的是 USB转TTL,(VCC GND RXD TXD)没有使用时钟线(CLK),所以选择使用异步通信。Mode 选择 Asynchronous ;Hardware Flow Control 选择disable
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 :
Disable: 只通过RX和TX实现基本的串口通信
CTS Only: 在RX和TX的基础上增加CTS引脚,发送清除信号。若为高电平,在当前数据传输结束时阻断下一次的数据发送。
RTS Only: 在RX和TX的基础上增加RTS引脚,发送请求信号。若为低电平,表明USART准备好接收数据。在485通信中,需要使用该引脚。
CTS/RTS: 在RX和TX的基础上增加CTS和RTS引脚。
配置串口详细参数:
如果有自己喜欢的波特率可以改一改,大部分情况下是默认就行,不用改;
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位设置。
然后配置时钟树
配置项目设置:
然后生成工程。
串口发送/接收函数
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,