stm32串口接受小数并打印
时间: 2025-04-24 14:55:22 浏览: 34
### STM32串口接收小数并打印
为了实现在STM32上通过串口接收小数并将其打印,在硬件和软件两方面都需要做相应配置。具体来说,需要初始化USART模块用于串行通信,并编写程序处理接收到的数据。
#### 初始化USART模块
在开始之前,确保已经启用了USART外设时钟,并设置了GPIO引脚模式为复用推挽输出。接着,需对USART参数进行设定,包括波特率、字长、停止位等。这些操作可以通过调用HAL库函数来简化[^1]:
```c
// USART初始化结构体定义
static void MX_USART2_UART_Init(void)
{
huart2.Instance = USART2;
huart2.Init.BaudRate = 115200; // 设置波特率为115200bps
huart2.Init.WordLength = UART_WORDLENGTH_8B;// 字符长度为8位数据帧
huart2.Init.StopBits = UART_STOPBITS_1; // 单个停止位
huart2.Init.Parity = UART_PARITY_NONE; // 不使用校验位
huart2.Init.Mode = UART_MODE_TX_RX; // 启用发送/接收功能
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;// 关闭硬件流控
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart2); // 调用API完成初始化工作
}
```
#### 接收浮点数值
当准备就绪后,可以利用中断方式或轮询方法读取来自PC端或其他设备传来的ASCII码字符串形式的小数。这里采用非阻塞的方式等待有效字符输入完毕再转换成实际的float型变量存储起来。考虑到可能存在的负号情况,还需要额外判断首字母是否为'-'号以决定最终结果正负性:
```c
#include <stdio.h>
#include <string.h>
#define BUFFER_SIZE 20
char buffer[BUFFER_SIZE];
volatile float receivedFloatValue = 0.0f;
int isNegative = 0, index = 0;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
if(huart->Instance==USART2){
char ch = buffer[index++];
if(ch=='-') {
isNegative=1;
}else if((ch>='0'&&ch<='9') || ch=='.'){
buffer[index]= '\0';
sscanf(buffer,"%f",&receivedFloatValue);
if(isNegative) receivedFloatValue *= -1;
printf("Received Float Value:%.2f\r\n",receivedFloatValue);
memset(buffer,'\0',BUFFER_SIZE);
index=isNegative=0;
}
HAL_UART_Receive_IT(&huart2,(uint8_t*)buffer,1);
}
}
int main(){
...
/* 开始异步接收 */
HAL_UART_Receive_IT(&huart2,(uint8_t*)buffer,1);
while (1){}
}
```
上述代码片段展示了如何基于STM32CubeMX生成的基础框架之上扩展实现串口接收小数并显示的功能。需要注意的是,此方案假设每次只传输单个小数;对于更复杂的应用场景,则应考虑增加协议解析逻辑以支持连续多组数据交换。
阅读全文
相关推荐


















