串口接收AJ-SR04M数据用数组打印出来,搞不懂哪里有错

2019-07-21 04:01发布

本帖最后由 Diviner 于 2019-3-23 11:40 编辑

[mw_shl_code=applescript,true]// 串口2中断服务函数

void DEBUG_USART2_IRQHandler(void)
{
        char Temp2;
        flag=0;
        if(USART_GetITStatus(DEBUG_USART2,USART_IT_RXNE)!=RESET)
        {        

                Temp2 = USART_ReceiveData(DEBUG_USART2);
                //USART_SendData(DEBUG_USART1,Temp2);  
                D[l++]=Temp2;

        }         

}[/mw_shl_code]

[mw_shl_code=applescript,true]int main(void)
{        
        char *str="01";
        USART1_Config();
        USART2_Config();
        LED_GPIO_Config();      
        Usart_SendStr(DEBUG_USART2,(uint8_t*)str);
        printf( "串口printf函数测试 " );

  while (1)
{
  if(Temp2=='')
        {
                break;
        }
}
        LED2_ON;
printf("距离=");
  for(l=0;l<20;l++)
                {
                        printf("%c",D[l]);
                }

        while (1)
        {
        
        }
}[/mw_shl_code]


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
szczyb1314
1楼-- · 2019-07-21 05:28
你的main函数写的有问题,一上电,执行初始化,打印 串口printf函数测试,进入第一个while(1),这时全局变量Temp2是你的初始化的0,也就是'',if条件成立跳出第一个while(1);执行打印 距离=,进入for循环,此时的数组D里面的数据全是0,也就是'',全部打印,进入到第二个while(1).此时你的AJ-SR04M即使输出数据你也打印不出来了

执行结果跟你的程序设计完全一致。
至于你说的得不到你想要的结果,那是你的逻辑设计有问题。
oslll
2楼-- · 2019-07-21 05:49
你这个Temp2在中断里定义,在main里面使用?
oslll
3楼-- · 2019-07-21 07:44
还是你定义了两个重名的局部变量和全局变量
Diviner
4楼-- · 2019-07-21 12:02
oslll 发表于 2019-3-23 14:33
还是你定义了两个重名的局部变量和全局变量

这样子
Diviner
5楼-- · 2019-07-21 16:15
oslll 发表于 2019-3-23 14:32
你这个Temp2在中断里定义,在main里面使用?

我也试过
if(D[l++]=='')
这样子,也是出现那种情况
edmund1234
6楼-- · 2019-07-21 16:43
 精彩回答 2  元偷偷看……

一周热门 更多>