8、串口(下)

4 USART配置

4.1 USART/UART异步通信配置

1、配置串口工作参数:HAL_UART_Init()

2、串口底层初始化:HAL_UART_MspInit()

3、开启串口异步接收中断:HAL_UART_Receive_IT()

4、设置优先级,使能中断:HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()

5、编写中断服务函数:USARTx_IRQHandler()、USARTx_IRQHandler()

6、串口数据发送:HAL_UART_Transmit()

4.2 相关函数

1、配置串口工作参数函数HAL_UART_Init(),其函数原型为:

HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)

其返回值为枚举类型,可能值有

HAL_OK:配置成功

HAL_ERROR:配置失败

HAL_TIMEOUT:配置超时

HAL_BUSY:串口正忙

内部参数UART_HandleTypeDef为嵌套结构体,其内部关键结构体成员为 USART_TypeDef *Instance和UART_InitTypeDef Init,分别用于配置外设基址和通信参数。

对于外设基址,可选值有USART1~3、UART4、5。

而对于通信参数,其内部关键成员和可选值如下所示:

成员名称

类型

功能

可选值

BaudRate

uint32_t

设定串口通信速率

任意在硬件范围内的数值,常为115200

WordLength

uint32_t

设定数据位长度

UART_WORDLEGTH_8B:8位

UART_WORDLENGTH_9B

:9位

StopBits

uint32_t

设定停止位长度

UART_STOPBITS_1:1位

UART_STOPBITS_0_5:0.5位

UART_STOPBITS_1_5:1.5位

UART_STOPBITS_2:2位

Parity

uint32_t

设置校验模式

UART_PARITY_NONE:无校验

UART_PARITY_EVEN:偶校验

UART_PARITY_ODD:奇校验

Mode

uint32_t

设置收发模式

UART_MODE_TX:仅发送

UART_MODE_RX:仅接收

UART_MODE_TX_RX:同时接收发送

HwFlowCtl

uint32_t

设置硬件流控

UART_HWCONTROL_NONE:不用硬件流控

UART_HWCONTROL_RTS:使能RTS流控

UART_HWCONTROL_CTS:使能CTS流控

UART_HWCONTROL_RTS_CTS:使能RTS和CTS流控

2、串口底层初始化函数HAL_UART_MspInit(),该函数被弱定义,允许用户重定义,该函数在HAL_UART_Init()中已调用,无需单独调用。

3、串口异步接收中断开启函数HAL_UART_Receive_IT(),函数原型为

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

其中pData用以存放收到的数据,Size表示期待接收的字节数。

4、配套回调函数HAL_UART_RxCpltCallback(),函数原型为

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

由于HAL_UART_Receive_IT()是一次性的,若要持续不断接收数据,需要在回调函数中再次调用接收中断函数。

5、串口数据发送函数HAL_UART_Transmit(),函数原型为

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout)

其中pData表示要发送的数据,Size表示发送数据的字节数,Timeout表示设置的超时时间(以毫秒为单位)。

该函数以阻塞方式发送数据,当数据过大时会占用大量CPU资源。

6、中断模式串口数据发送函数HAL_UART_Transmit_IT(),函数原型为

HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)

7、DMA模式串口数据发送函数HAL_UART_Transmit_DMA(),其函数原型为

HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)

在使用该模式前需要提前分配DMA通道且数据缓冲区必须保持有效

5 IO引脚复用

5.1 通用和复用

通用:IO端口的输入或输出由GPIO外设控制

复用:IO端口的输入或输出由其他外设(USART、DMA、ADC)等控制

5.2 复用配置步骤

1、使能GPIO端口时钟

2、使能对应复用功能的外设时钟

3、配置GPIO的引脚模式(输出:一般配置为复用推挽,输入:一般配置为浮空输入或上/下拉的输入,开漏总线:配置为复用开漏输出)

5.3 重映射

同一时间一个IO引脚只能使用一种复用功能,否则会发生复用功能冲突问题,当发生冲突时,需要使用重映射,将冲突功能转移到其他引脚。重映射需要通过AFIO的配置实现。

重映射的步骤如下:

一、使能AFIO时钟

二、调用重映射宏。命名格式为__HAL_AFIO_REMAP_PPP_MMM,其中PPP为外设名称,MMM为重映射模式,分为:1、完全重映射:ENABLE;2、部分重映射:PARTIAL;3、禁用:DISABLE

三、后续配置。重映射后需对新的备用引脚进行GPIO初始化,配置为复用功能模式。

posted @ 2026-08-17 11:38  老鼠学32  阅读(13)  评论(0)    收藏  举报