任意波形动态显示
简易示波器功能描述:
1.测量直流信号、交流信号的电压幅度;
2.测量交流信号的周期,并计算频率;
3.显示交流信号波形;
4.波形的放大和缩小;
5.···········
暂时就先实现以上几个简单的基本功能,STM32芯片是3.3V供电,AD采样也只有0-3.3V,前端没有做硬件电路,所以这些测量暂时都是0-3.3V;
目前实现功能:任意波形动态显示
首先看一下效果:
1.采集IO引脚翻转:
2.采集DAC模拟输出锯齿波:
3.采集DAC模拟输出方波:
大致实现过程:
首先在之前贴基础上更改:STM32F469I_Discovery简易示波器(三)方波简单显示
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=480838&fromuid=593777
(出处: 电子工程世界-论坛)
uint16_t uhADCxConvertedValue[1024*6] ={ 0};
a.ADC连续采集1024*6个数据并使能DMA存储在uhADCxConvertedValue数组中;
HAL_ADC_Stop(&AdcHandle);
for(i = 0; i < 1024*5; i++)
{
y3 =400 - (80*3.3*uhADCxConvertedValue[i+512]/4095);
}
HAL_ADC_Start(&AdcHandle);
flag = 1;
b.DMA完成后进入中断,关闭ADC采样并将数据复制到显示缓冲区的数组中,设定标志位置1,开启ADC继续采集(如果不暂停ADC,新采集的值会打乱完整的1024*6个数据,所以复制过程中暂停采集);
if(temp == 0)
{
for(i = 0; i<500;i++)
{
aPointsRe.y = y3;
//aPointsRe.x = x;
}
}
else if(temp < 10)
{
for(i = 0; i<500;i++)
{
aPointsRe.y = y3[i+temp*500];
//aPointsRe.x = x;
}
}
GUI_SetColor(GUI_GREEN);
GUI_DrawPolyLine(aPointsRe, /* Ö¸ÏòòaÏÔê¾μÄÕÛÏß */
GUI_COUNTOF(aPointsRe), /* μãáD±íÖDÖ¸¶¨μÄμãêyá¿ */
50, /* Ô-μãμÄXλÖà */
40);
temp++;
if(temp == 10)
{
temp = 0;
flag = 0;
}
GUI_Delay(100);
c.回到主函数进行数据处理,由于每次显示的是500个数据,所以显示10次后在此读取ADC数据进行显示;