串口接收中断hal接收浮点数
时间: 2025-01-11 17:46:50 浏览: 94
### 使用STM32 HAL库通过UART中断接收浮点数
为了实现通过串口(UART)中断方式接收浮点数,在初始化配置阶段需设置好相应的硬件参数并编写回调函数处理接收到的数据。对于STM32系列微控制器而言,可以利用HAL库简化这一过程。
#### 初始化UART外设
首先定义UART句柄结构体`huart`用于保存UART的相关配置信息,并调用`MX_USARTx_UART_Init()`完成基本的波特率、字长等属性设定[^1]:
```c
UART_HandleTypeDef huart1;
void MX_USART1_UART_Init(void){
/* USART1 parameter configuration */
huart1.Instance = USART1;
huart1.Init.BaudRate = 9600; // 设置波特率为9600bps
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();
}
}
```
#### 启用UART中断服务程序
接着开启UART接收中断功能以便能够实时响应外部输入事件。这一步骤通常是在上述初始化完成后立即执行,确保当有新字符到达时能触发对应的ISR(Interrupt Service Routine):
```c
/* Enable the UART Data Register not empty Interrupt */
__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);
```
#### 编写中断处理逻辑
每当发生一次有效的UART接收动作后就会跳转到预定义好的中断向量表位置运行特定的服务例程。在此期间应该读取寄存器中的最新值并将它们存储起来等待后续解析成实际意义下的数值。考虑到浮点类型的特殊性,这里假设发送方按照IEEE754标准打包了四个连续字节表示一个float变量,则接收侧也需要按同样规则解码这些原始二进制位流[^2]:
```c
uint8_t rxBuffer[4]; // 存储接收到的4个字节数据
volatile float receivedFloatValue = 0.0f;
// 中断服务例程模板
void USART1_IRQHandler(void){
uint8_t tempChar;
/* Check whether this interrupt is triggered by RXNE flag */
if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE)!=RESET)){
/* Read one byte from DR register into temporary variable */
tempChar=huart1.Instance->DR & (uint8_t)0xFF;
static int index = 0;
rxBuffer[index++] = tempChar;
if(index >= sizeof(float)){
memcpy((char*)&receivedFloatValue,(const char*)rxBuffer,sizeof(float));
// Reset buffer and counter for next reception cycle
memset(rxBuffer, 0 ,sizeof(rxBuffer));
index = 0;
// Process or display 'receivedFloatValue' as needed...
}
}
__HAL_UART_CLEAR_IT(&huart1,UART_IT_TC);
}
```
以上代码片段展示了如何基于STM32 HAL库构建一套完整的机制来捕捉来自UART接口上的任意长度为四字节序列,并将其解释为目标平台所理解的形式——即单精度实数(`float`)类型。值得注意的是,由于不同架构间可能存在字序差异(大端/小端),因此务必确认双方遵循一致的标准进行通信协议设计。
阅读全文
相关推荐


















