一、UART常用配置函数
1. UART_HandleTypeDef huart1
**功能:**UART句柄结构体变量
UART_HandleTypeDef huart1; // 定义USART1的句柄
作用: 存储UART外设的所有配置参数和状态信息
包含内容: 波特率、数据位、停止位、校验位、硬件流控制、中断/DMA配置等
**使用方式:**作为所有UART操作的参数传递给HAL库函数
2. void MX_USART1_UART_Init(void)
**功能:**USART1外设初始化函数
void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1; // 指定使用USART1
huart1.Init.BaudRate = 115200; // 波特率115200
huart1.Init.WordLength = UART_WORDLENGTH_8B; // 8位数据位
huart1.Init.StopBits = UART_STOPBITS_1; // 1位停止位
huart1.Init.Parity = UART_PARITY_NONE; // 无校验位
huart1.Init.Mode = UART_MODE_TX_RX; // 收发模式
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 无硬件流控制
huart1.Init.OverSampling = UART_OVERSAMPLING_16; // 16倍过采样
HAL_UART_Init(&huart1); // 调用HAL库初始化函数
}
3. HAL_UART_Transmit
**功能:**阻塞式UART数据发送函数
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
参数:
huart:UART句柄指针
pData:要发送的数据缓冲区指针
Size:要发送的数据字节数
Timeout:超时时间(毫秒)
4. HAL_UART_Receive
**功能:**阻塞式UART数据接收函数
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
5. HAL_UART_Transmit_IT
功能: 中断方式发送
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
6. HAL_UART_Receive_IT
**功能:**中断方式接收
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
7. HAL_UART_Transmit_DMA
**功能:**DMA方式发送
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
8. HAL_UART_Receive_DMA
**功能:**DMA方式接收
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
9. HAL_UART_TxCpltCallback
**功能:**发送完成回调
__weak void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
// 用户重写此函数处理发送完成事件
}
10. HAL_UART_RxCpltCallback
**功能:**接收完成回调
__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
// 用户重写此函数处理接收完成事件
}
二、实验示例
1. 实验现象
在程序的主循环中,通过USART1串口以每秒一次的频率持续发送字符'F'。实验现象是连接到USART1的接收设备(串口调试助手)会每隔1秒收到一个字符'F',形成稳定而有规律的数据流。
2. 示例代码
USART初始化
/**
* @brief USART1串口初始化函数
* @retval 无
*/
void MX_USART1_UART_Init(void)
{
// 配置USART1句柄参数
huart1.Instance = USART1; // 使用USART1外设
huart1.Init.BaudRate = 115200; // 波特率115200
huart1.Init.WordLength = UART_WORDLENGTH_8B; // 8位数据位
huart1.Init.StopBits = UART_STOPBITS_1; // 1位停止位
huart1.Init.Parity = UART_PARITY_NONE; // 无奇偶校验
huart1.Init.Mode = UART_MODE_TX_RX; // 使能发送和接收模式
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 无硬件流控制
huart1.Init.OverSampling = UART_OVERSAMPLING_16; // 16倍过采样
// 调用HAL库初始化函数,检查初始化是否成功
if (HAL_UART_Init(&huart1) != HAL_OK)
{
// 初始化失败时调用错误处理函数
Error_Handler();
}
}
主函数
int main(void)
{
// 初始化HAL库,重置所有外设,初始化Flash接口和系统滴答定时器
HAL_Init();
// 配置系统时钟
SystemClock_Config();
// 初始化所有已配置的外设
MX_GPIO_Init(); // 初始化GPIO
MX_USART1_UART_Init(); // 初始化USART1串口
// 定义要发送的字符
uint8_t ch1 = 'F';
// 主程序循环
while (1)
{
// 通过USART1发送字符'F',使用最大延时等待发送完成
HAL_UART_Transmit(&huart1, &ch1, 1, HAL_MAX_DELAY);
// 延时1秒
HAL_Delay(1000);
}
}