基于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);
}
}
我现在是用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采集的额数据暂存,这个处理放在中断中。可以做到实时处理以免丢失数据