STM32Cube 是 STMicroelectronics 公司推出的用于 STM32 系列微控制器开发的一套免费工具。它包含了丰富的库文件和图形化配置工具,可以帮助开发人员快速、轻松地开发 STM32 应用程序。
串口通信是 STM32 常用的一种外设通信方式。STM32Cube 提供了完善的串口通信库,可以方便地配置和使用串口。
1. 串口初始化
串口初始化是串口通信的第一步。STM32Cube 提供了 HAL_UART_Init() 函数来初始化串口。该函数需要传入以下参数:
- 串口句柄:指向串口结构体的指针
- 波特率:串口通信的波特率
- 数据位:数据位数,可以是 5、6、7、8、9
- 停止位:停止位数,可以是 1 或 2
- 奇偶校验:奇偶校验模式,可以是 None、Even 或 Odd
- 流控:流控模式,可以是 None、RTS/CTS 或 Hardware Flow Control
例如,以下代码初始化 USART1 串口,波特率为 115200,数据位为 8 位,停止位为 1 位,无奇偶校验,无流控:
C
UART_HandleTypeDef huart1;huart1.Instance = USART1;huart1.Init.BaudRate = 115200;huart1.Init.WordLength = UART_WORDLENGTH_8BIT;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWFLOWCTL_NONE;if (HAL_UART_Init(&huart1) != HAL_OK){ Error_Handler();}
2. 数据收发
串口数据收发可以使用 HAL_UART_Transmit() 和 HAL_UART_Receive() 函数。
HAL_UART_Transmit() 函数用于发送数据。该函数需要传入以下参数:
- 串口句柄:指向串口结构体的指针
- 待发送数据:指向待发送数据的缓冲区
- 待发送数据长度
例如,以下代码发送字符串 \"Hello, world!\" 到 USART1 串口:
C
uint8_t data[] = \"Hello, world!\";size_t len = sizeof(data) - 1;if (HAL_UART_Transmit(&huart1, data, len) != HAL_OK){ Error_Handler();}
HAL_UART_Receive() 函数用于接收数据。该函数需要传入以下参数:
- 串口句柄:指向串口结构体的指针
- 待接收数据:指向待接收数据的缓冲区
- 待接收数据长度
该函数会阻塞等待数据接收完成。
例如,以下代码从 USART1 串口接收数据,并将其存储在 data 缓冲区中:
C
uint8_t data[10];size_t len = sizeof(data);if (HAL_UART_Receive(&huart1, data, len) != HAL_OK){ Error_Handler();}
3. 中断处理
串口中断可以用于提高数据收发的效率。STM32Cube 提供了 HAL_UART_RxCpltCallback() 和 HAL_UART_TxCpltCallback() 中断回调函数,用于处理接收完成和发送完成事件。
例如,以下代码配置 USART1 串口接收中断:
C
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART1_IRQn);HAL_UART_RxCpltCallback(&huart1, &rx_complete);
rx_complete 函数是接收完成中断回调函数,用于处理接收到的数据:
C
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ // 处理接收到的数据}
STM32Cube 提供了完善的串口通信库,可以方便地配置和使用串口。本文介绍了