LabVIEW 串口四通道示波器 沈亚非 2013/04/05
利用 stm32 作为下位机 ADC 采集数据,利用串口将采集到的数据发送到电脑上利用
LabVIEW 进行波形显示。
数据交流的基本操作如下:stm32 首先判断标志位 FLAG 是否为 1,满足则发送 stm32
发送一帧数据,并将标志位 FLAG 清零,LabVIEW 接收到数据后,处理数据,并返回一个
消息通知,即发送一个字符。Stm32 接收到该字符后,将 FLAG 置 1,如此循环,可以摆正
数据的正确性,不至于数据流的错位。
基本流程图如下:
Y
接收到 W?
中断处理机制
FLAG=1
FLAG==1?
N
Y
发送一帧数据
FLAG 清零
LabVIEW 接收一帧数据
数据分离、显示
数据处理完毕,向下位
机发送字符 W
燕山大学里仁学院 QQ:931312252
1
LabVIEW 串口四通道示波器 沈亚非 2013/04/05
Stm32 部分代码如下:
int main(void)
{
Int LFAG=1;
int i;
/* 配置 USART1 */
USART1_Config();
/* 使能 DMA 模式*/
ADC1_Init();
NVIC_Configuration();
//以上代码为各种配置函数,在这里不重点介绍,如有疑问,可进一步交流
while(1)
{
if(FLAG == 1)
{
int i;
for(i = 0;i < 4; i++)
{
ADC_ConvertedValueLocal[i]=(float)ADC_ConvertedValue[i]/4096*3.3;
}
printf("%6f%6f%6f%6f",ADC_ConvertedValueLocal[0],ADC_ConvertedValueLocal[1]
ADC_ConvertedValueLocal[2],ADC_ConvertedValueLocal[3]);
FLAG = 0;
}
}
}
Stm32 中断处理 LAbVIEW 发送来的数据如下:
void USART1_IRQHandler(void)
{
u8 c;
extern int FLAG;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
c=USART1->DR;
if(c == 'W')
FLAG = 1;
{
}
}
}
由以上可知,stm32 发送的一帧数据里面包含了四个通道的数据,通道一至通道四顺序
存放,一帧数据为 32 个字节。
燕山大学里仁学院 QQ:931312252
2
LabVIEW 串口四通道示波器 沈亚非 2013/04/05
以下为 LAbVIEW 的处理程序:
串口配置部分:
串口波特率 56000,数据位 8,无校验,停止位 1。等到接收完 32 个字节后,将缓冲区
里面的数据读取出来,进行下一步处理。
将接受的 32 字节数据分离,数据后分别送入到示波器中进行显示,显示完毕后,想 stm32
燕山大学里仁学院 QQ:931312252
3
LabVIEW 串口四通道示波器 沈亚非 2013/04/05
发送一个‘W’字符,告诉 stm32 数据已处理完毕,可以进行下一帧数据的发送。
串口接收到的数据是以 ASCII 码的形式过来的,因此需要进行转换,利用下图中的这
能
控
以
件
可
完
成
此
功
个
该控件的功能在帮助文件里可以看到,如图:
每 8 个字节为一个通道数据。至此,核心部分已经完成,前面板的显示界面如图:
同时通过偏移量可以完成数据的分离,即
燕山大学里仁学院 QQ:931312252
4
LabVIEW 串口四通道示波器 沈亚非 2013/04/05
至此,整体完成。
整体程序图如下:
燕山大学里仁学院 QQ:931312252
5
LabVIEW 串口四通道示波器 沈亚非 2013/04/05
该文章可自由转载,请注明作者
燕山大学里仁学院 QQ:931312252
6