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

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-22 15:21
dlamji 发表于 2017-4-27 22:40
之前我有过类似的问题,当时是波特率没设置好
你确认下uart设置的波特率是不是115200

波特率是对的 暂时没找到问题出在哪儿
llliux
2楼-- · 2019-08-22 16:45
你的眼睛 发表于 2017-4-28 08:32
你可能没有清除中断标志或者波特率不对

你好我是新手,我在中断的程序结尾加了USART_ClearITPendingBit(USART1,USART_IT_TC);
但是也没啥用啊
llliux
3楼-- · 2019-08-22 17:17
你的眼睛 发表于 2017-4-28 08:32
你可能没有清除中断标志或者波特率不对

改成这个USART_ClearITPendingBit(USART1,USART_IT_RXNE);就好了 但是数据只能发送一次啊,第二次发送就没反应了。。为啥
llliux
4楼-- · 2019-08-22 21:25
小小怪 发表于 2017-4-28 12:39
把串口助手左下角的“发送新行”的勾去掉就好了

谢谢大神 真的是这个问题!

一周热门 更多>