(简单串口程序)debug无法进入while循环

2019-07-21 04:05发布

本帖最后由 1208 于 2019-3-18 15:22 编辑

单片机用stm32F103C8T6,代码很简单,传感器是主动上传的,1s一个数据,通过usart1读取,中断是这样写的。1.44寸屏幕可以直接读取到传感器浓度值(或者USB转TLL串口助手也行),但是debug的话怎么也进不了wihle循环(或者说USART_RX_STA这个值一直就是4000不是8000 ),新手一枚,想知道是哪里错了,求大神指教。
QQ图片20190318141906.png QQ图片20190318141946.png


气体传感器.rar (349.91 KB, 下载次数: 12) 2019-3-18 14:25 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
nashui_sx
2019-07-22 20:41
本帖最后由 nashui_sx 于 2019-3-19 16:31 编辑

USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);        //开启串口空闲IDEL中断


void USART1_IRQHandler(void)                        //串口1中断服务程序
        {
        u8 Res;
    if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)//空闲中断
    {
        USART_RX_STA |= 0x8000;
                        
        USART_ReceiveData(USART1); // Clear IDLE interrupt flag bit
    }

                if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
                {
                                Res =USART_ReceiveData(USART1);        //读取接收到的数据
                          if((USART_RX_STA&0x8000)==0)
                                  USART_RX_BUF[USART_RX_STA++]=Res;
                                if(USART_RX_STA>100)USART_RX_STA |= 0x8000;
                                USART_ClearITPendingBit(USART1, USART_IT_RXNE);                        
                }
}


                while(1)
                {               
                                if( USART_RX_STA&0x8000)
                                {                                       
                                        if(USART_RX_BUF[0]==0xff)
                                        {
                                                 if(USART_RX_BUF[USART_RX_STA&0x3fff-1]==FucCheckSum(USART_RX_BUF,USART_RX_STA&0x3fff))//校验
                                                 {
                                                                        if(USART_RX_BUF[1]==0x86)//处理命令
                                                                        {

                                                                    printf("nongdu=%d ",USART_RX_BUF[2]*256+USART_RX_BUF[3]);
                                                                  }
                                                                  //...
                                                 }
                                                
                                        }                                                
                                        USART_RX_STA=0;
                                }
                }                          
u8 FucCheckSum(unsigned char *i,u32 ln)
{
  unsigned char j,tempq=0;
        i+=1;
        for(j=0;j<ln-2;j++)
        {
           tempq+=*i;
                 i++;
        }
        tempq=(~tempq)+1;
        return tempq;
}              

一周热门 更多>