stm32串口收发数据 hal库
时间: 2025-02-20 18:28:23 浏览: 69
STM32 HAL库实现串口数据收发
函数介绍
对于STM32系列微控制器而言,利用HAL库可以简化外设操作流程。其中HAL_UART_Transmit()
用于发送指定数量的数据到UART总线[^1]。
该函数原型如下所示:
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
参数说明:
huart
: 指向UART句柄结构体指针;pData
: 发送缓冲区地址;Size
: 待传输字节数量;Timeout
: 超时时间设置;
当采用中断方式处理串口通信时,则需调用HAL_UART_Receive_IT()
来启动接收过程并配置相应的回调机制以便于事件响应[^3]。
对应函数声明为:
void HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
此方法允许设备在后台自动完成字符读取工作而不干扰主线程执行逻辑,从而提高系统的实时性和效率[^2]。
示例代码展示
下面给出一段基于上述原理编写的简单例子:
初始化部分:
UART_HandleTypeDef huart1;
// 初始化USART1
static void MX_USART1_UART_Init(void){
/* USART1 parameter configuration */
huart1.Instance = USART1;
huart1.Init.BaudRate = 9600; // 波特率设定
huart1.Init.WordLength = UART_WORDLENGTH_8B; // 字符长度
huart1.Init.StopBits = UART_STOPBITS_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;
if (HAL_UART_Init(&huart1) != HAL_OK){
Error_Handler();
}
}
主循环内加入以下内容以触发一次消息传递动作:
uint8_t message[] = "Hello from STM32\r\n";
if(HAL_UART_Transmit(&huart1,message,sizeof(message),HAL_MAX_DELAY)!= HAL_OK){
// 错误处理...
}
为了支持异步I/O模型下的输入捕捉,在适当位置注册好对应的ISR入口点之后还需要重写特定的钩子函数来进行进一步定制化开发:
extern "C" void USART1_IRQHandler(void){
HAL_UART_IRQHandler(&huart1);
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
if(huart->Instance==USART1){
// 处理接收到的新数据包...
// 继续监听下一个到来的信息帧
HAL_UART_Receive_IT(&huart1,(uint8_t *)&Rdata,1);
}
}
以上即完成了基本框架搭建工作,后续可根据实际应用场景灵活调整各项参数以及扩展更多功能特性。
相关推荐


















