微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 基于STM32的示波器数据丢失的问题

基于STM32的示波器数据丢失的问题

时间:10-02 整理:3721RD 点击:
求大神指导..
我现在是用STM32内置AD采集数据,然后发送TFT显示屏显示波形...
采用的是把一整个屏幕要显示的adc值放进一个数组,然后将送到显示屏显示,然后再用这个数组清除显示...
现在的问题是 显示--清屏--显示 的过程中,在处理上面的时候,是有一部分数据是丢失的,要怎样才能做到真正的实时显示,数据不丢失
void Dispvave(u16 *Padval, u16 vavecolor, u16 linecolor, u16 backcolor,u8 n_Szu)
{
         u16 i;
         u32 point1,point2;
//                 for(i=0; i<=320; i+=40)                //??DDY?áμ???
//                 {
//                         POINT_COLOR=linecolor;
//                         LCD_DrawLine(i,0,i,240);
//                 }
//                
//                 for(i=0;i<=240;i+=40)
//                 {
//                         POINT_COLOR=linecolor;
//       LCD_DrawLine(0,i,320,i);                       
//                 }
               
                POINT_COLOR=vavecolor;
//                    for(i=0; i<320*n_Szu; i++)
                for(i=0; i<320; i++)
                  {
                                point1=Padval[i]/High;                  //High?a??ê?μ?·ù?è,???a1?ò??2,?a1ê±·ù?è??′ó,?a2ê±?é??ò?°?.è±ê??μ?a1
                                point2=Padval[i+1]/High;
                               
                                if(point2<=240&&point1<240)         //X×?±êD?óú170ê±2??-??,
                                {
                                //LCD_DrawLine(point1+10,  i/n_Szu, point2+10, (i+1)/n_Szu);
//                                 LCD_DrawLine(i/n_Szu,  240-point1, (i+1)/n_Szu, 240-point2);
                                        LCD_DrawLine(i,point1, i+1,point2);
                                }
                        }
                       
                        delay_ms(20);
                        //??3yμ?
                        POINT_COLOR=backcolor;
//                    for(i=0; i<320*n_Szu; i++)
                for(i=0; i<320; i++)
                  {
                                point1=Padval[i]/High;                  //High?a??ê?μ?·ù?è,???a1?ò??2,?a1ê±·ù?è??′ó,?a2ê±?é??ò?°?.è±ê??μ?a1
                                point2=Padval[i+1]/High;
                               
                                if(point2<=240&&point1<240)         //X×?±êD?óú170ê±2??-??,
                                {
                                //LCD_DrawLine(point1+10,  i/n_Szu, point2+10, (i+1)/n_Szu);
//                                 LCD_DrawLine(i/n_Szu,  240-point1, (i+1)/n_Szu, 240-point2);
                                        LCD_DrawLine(i,point1, i+1,point2);
                                }
                        }
                       
                        for(i=0; i<=320; i+=40)                //??DDY?áμ???
                {
                        POINT_COLOR=linecolor;
                        LCD_DrawLine(i,0,i,240);
                }
               
                for(i=0;i<=240;i+=40)
                {
                        POINT_COLOR=linecolor;
      LCD_DrawLine(0,i,320,i);                       
                }
}

需要做个缓冲,这样 显示--清屏--显示 的过程中,就可以把ad采集的额数据暂存,这个处理放在中断中。可以做到实时处理以免丢失数据

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top