串口发送程序出现乱码了,找不出来问题在哪里,求大侠!

2019-08-20 16:10发布

[mw_shl_code=c,true]void USART1_IRQHandler(void)
{
        u8 res,data[16];
        int res1,i=0,num=16,index=0;
       
       
       
         if(USART_GetITStatus(USART1,USART_IT_RXNE))//判断接收到数据没
{
     res= USART_ReceiveData(USART1);
           res1=(int)res;//强制转化为int型
         
         
         while(res1>0)//十进制转为二进制并存入data数组中
                {
                data[index] = res1%2+'0';//将INT变为char
                res1 = res1/2;
                index++;
                }
               
                while(i<num)//逐个发送data中的二进制数据
        {
               
                USART_SendData(USART1,data);
                while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);//等待发送完毕
                i++;   
        }

  }
}[/mw_shl_code]



先说说我代码想要实现的功能吧,电脑通过串口发送一个数据给单片机,单片机把这个数据转为ASCII数值,然后再将十进制的ASCII数值变为二进制存到数组data[16]中,最后单片机将data中的元素逐个通过串口发送给电脑。

但是发现会出现乱码,而且转化的二进制也不对,所以就来求助各位大侠了,我是个菜鸡,希望有所错误的地方请各位指出!下面是我电脑接收到乱码的图片 乱码 乱码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
llliux
1楼-- · 2019-08-20 21:22
希望大神帮我指点一下迷津!
小小怪
2楼-- · 2019-08-20 21:41
 精彩回答 2  元偷偷看……
lvkanger
3楼-- · 2019-08-21 03:05
data[]初始化一下吧!
llliux
4楼-- · 2019-08-21 06:22
lvkanger 发表于 2017-4-27 19:32
data[]初始化一下吧!

谢谢,我找到问题了1、没有初始化数组。2、转化之后的二进制数组倒序输出才是正确的值。但是又出现了一个新的问题, 我发送了一个a将他转化为二进制本来应该是01100001 才对,结果在串口读出了0110000100001101,后面多出了8位,求大侠指点一下
so
5楼-- · 2019-08-21 11:55
USART_SendData(USART1,data[i]);  //没加换行,输出了2次值
llliux
6楼-- · 2019-08-21 17:33
so 发表于 2017-4-27 19:45
USART_SendData(USART1,data);  //没加换行,输出了2次值

你好!我没太听懂,这里好像有换行额。我在程序中加了个换行结果也没变,还是输出了16位

一周热门 更多>