野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14121|回复: 13

关于串口通信接收字符,储存起来再一次性发送会乱码,求大佬

[复制链接]
发表于 2018-3-5 10:21:11 | 显示全部楼层 |阅读模式
本人新人,在使用USART从PC上接收信息,然后打算在液晶屏幕上将信息显示出来。我采用uint8_t的数组在每次usart中断中接收有限的数据,但是接收后的数据重新再发出来时就变乱码了,。。。。。1变成49,2变成50.。。应该是接收格式不对吧,,有大神可以帮帮我看看吗?
uint8_t ucTemp[4] ;


void DEBUG_USART_IRQHandler(void)
{
  
        if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET)
        {       
                if(i<5)
                {
                ucTemp=USART_ReceiveData(DEBUG_USARTx);
                }else{
                i=0;
                ucTemp=USART_ReceiveData(DEBUG_USARTx);
                }
                USART_SendData(DEBUG_USARTx,ucTemp);
                printf("%d",ucTemp);
    i++;       
        }         
}



谢谢
回复

使用道具 举报

 楼主| 发表于 2018-3-5 10:44:36 | 显示全部楼层
我自己再试验了两回,发现是USART_ReceiveData(DEBUG_USARTx);返回的值转成字符串的问题,可是uint16_t USART_ReceiveData(USART_TypeDef* USARTx)的返回值如何转成正确字符串呢?
回复 支持 反对

使用道具 举报

发表于 2018-3-5 11:45:53 | 显示全部楼层
1的ASCII码就是49,2就是50,好好学习下
回复 支持 反对

使用道具 举报

发表于 2018-3-5 11:46:27 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2018-3-5 11:47:16 | 显示全部楼层
或者你可以搜索字符串的相关基础知识。https://www.baidu.com/s?wd=USART ... p;tn=02049043_27_pg
回复 支持 反对

使用道具 举报

发表于 2018-3-5 11:48:01 | 显示全部楼层
这种问题就是C语言的基础知识不牢固了,兄dei
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-5 12:49:21 | 显示全部楼层
请问通过ASCII如何转换为字符串。
ChePai是一个Char的数组。。
Chepai是个uint8_t的数组
然后后面
sprintf(ChePai,"A%d%d%d%d%d",Chepai[0],Chepai[1],Chepai[2],Chepai[3],Chepai[4]);
ILI9341_DisplayStringEx(24+a,1*25,36,48,(uint8_t *)ChePai,0);
是不是我sprintf函数用错了??理不清。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-5 14:18:54 | 显示全部楼层
是不怎么牢固。。。。
回复 支持 反对

使用道具 举报

发表于 2018-3-5 15:26:45 | 显示全部楼层
林林林 发表于 2018-3-5 12:49
请问通过ASCII如何转换为字符串。
ChePai是一个Char的数组。。
Chepai是个uint8_t的数组

接收到的本身就是字符,所以你用%c就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-5 15:41:34 | 显示全部楼层
发现使用sprintf(ChePai,"A%d%d%d%d%d",Chepai[0],Chepai[1],Chepai[2],Chepai[3],Chepai[4]);这个函数的时候,到第5个自定义变量时无论如何都显示240。。。。。如果不写第5个自定义变量前面的显示就没有问题,,,
我C真不牢固,求解答。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-5 16:54:26 | 显示全部楼层
flyleaf 发表于 2018-3-5 15:26
接收到的本身就是字符,所以你用%c就可以了

谢谢你,我C基础较差。。。%c能够读取到我想要字符
sprintf函数的第五个变量乱码,这个是数据溢出吗?好迷。。。。
860645001493468913.jpg
回复 支持 反对

使用道具 举报

发表于 2018-3-5 17:16:36 | 显示全部楼层
林林林 发表于 2018-3-5 16:54
谢谢你,我C基础较差。。。%c能够读取到我想要字符
sprintf函数的第五个变量乱码,这个是数据溢出吗? ...

可能本来就没数据吧,你可以用串口先打印出来看看,或者用调试器看看变量是什么值
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-6 08:41:48 | 显示全部楼层
flyleaf 发表于 2018-3-5 17:16
可能本来就没数据吧,你可以用串口先打印出来看看,或者用调试器看看变量是什么值

谢谢大佬。。原来是我数组定的太短了,本来就没有数据。转牛角尖了。。。
回复 支持 反对

使用道具 举报

发表于 2018-3-6 08:52:24 | 显示全部楼层
林林林 发表于 2018-3-6 08:41
谢谢大佬。。原来是我数组定的太短了,本来就没有数据。转牛角尖了。。。

就是钻牛角尖以后才会
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-6 21:28 , Processed in 0.050327 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表