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

本文介绍了串口通信中ASCII值如何转换为10进制数,通过减去ASCII码的'0'(48)进行转化。以接收字符123为例,通过逐位转换并组合得到实际数值。同时提到了串口助手发送的ASCII值转换为16进制时同样需要参照ASCII表进行转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

串口发送的是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表。

### STM32 串口接收 ASCII 码 为了实现STM32通过串口中断方式接收ASCII字符并且回显接收到的数据长度和内容,在`main.c`文件中可以按照如下方式进行编程: #### 初始化配置 确保已经包含了必要的头文件,并完成了LED模块与USART模块初始化函数调用。 ```c #include "stm32f10x.h" #include "hal_led.h" #include "hal_usart.h" int main(void) { hal_LEDInit(); hal_USARTInit(); // 开启全局中断 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); NVIC_EnableIRQ(USART1_IRQn); while (1) {} } ``` 上述代码片段展示了如何设置NVIC优先级分组、使能USART1接收缓冲区非空中断以及允许USART1中断请求[^3]。 #### 中断服务程序编写 接下来定义处理接收到数据的中断服务子程序(ISR),当有新数据到达时会触发该ISR执行相应操作: ```c uint8_t receivedData; char buffer[64]; volatile uint8_t dataLength = 0; void USART1_IRQHandler(void){ if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){ receivedData = USART_ReceiveData(USART1); // 将接收到的数据存入缓存数组 if(dataLength < sizeof(buffer)){ buffer[dataLength++] = receivedData; // 如果遇到终止符'\n'则停止读取更多输入 if(receivedData == '\n'){ buffer[dataLength - 1] = '\0'; // 结束字符串 // 发送反馈信息给PC端 char responseBuffer[64]; sprintf(responseBuffer,"Received %d bytes:%s\r\n",dataLength-1,buffer); HAL_UART_Transmit(&huart1,(uint8_t*)responseBuffer,strlen(responseBuffer),HAL_MAX_DELAY); // 清除计数器以便下次接收新的消息 dataLength = 0; } } } } ``` 此部分实现了对接收字符数量统计及判断是否完成一次完整的命令输入的功能。每当检测到换行符(`\n`)即认为一条完整的信息被接收完毕,随后将这条信息连同其长度一起返回给发送方作为确认回应[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值