【STM32学习笔记——串口接收问题】

串口发送的是ASCII值
所以当串口接收到时要转化成10进制数时,需要一位一位的进行转换,比如接收到的是123,就需要减去48 (0x30)

接收的字符以ascii码形式存储,要减去字符‘0’,对应ascii码就是数字48

	LCD_ShowString(10,130,240,24,24,USART_RX_BUF);
x=(USART_RX_BUF[0]-48)*100+(USART_RX_BUF[1]-48)*10+(USART_RX_BUF[2]-48);
y=(USART_RX_BUF[3]-48)*100+(USART_RX_BUF[4]-48)*10+(USART_RX_BUF[5]-48);

串口助手发送的也是ASCII值,转成16进制时,也需要对应ASCII表来转换。ASCII表。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将 STM32串口接收到的数据转换为十进制,可以使用以下步骤: 1. 首先,使用适当的函数从串口接收数据。在 STM32 中,可以使用 HAL 库提供的函数 `HAL_UART_Receive()` 来实现。该函数的原型如下: ```c HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) ``` 其中,`huart` 是 UART 外设的句柄,`pData` 是接收数据的缓冲区指针,`Size` 是要接收的数据字节数,`Timeout` 是超时时间。 2. 接收到的数据是以字节形式存储在缓冲区中的。如果你确定接收到的数据是 ASCII 码表示的十进制数字字符,可以直接将每个字符转换为对应的整数值即可。可以使用标准库函数 `atoi()` 或 `sscanf()` 来实现,这些函数都需要包含头文件 `<stdlib.h>`。 以下是使用 `atoi()` 函数的示例代码: ```c #include <stdlib.h> // 假设接收到的数据存储在 recvBuffer 中 char recvBuffer[10]; int decimalValue = atoi(recvBuffer); ``` 以下是使用 `sscanf()` 函数的示例代码: ```c #include <stdio.h> // 假设接收到的数据存储在 recvBuffer 中 char recvBuffer[10]; int decimalValue; sscanf(recvBuffer, "%d", &decimalValue); ``` 这样,`decimalValue` 就是转换后的十进制数值。 需要注意的是,以上示例代码仅适用于接收到的数据是有效的十进制数字字符的情况。如果接收到的数据可能包含其他非数字字符,那么在转换之前需要进行适当的数据校验和错误处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值