
本帖最后由 fengye5340 于 2015-1-8 14:44 编辑 . k K6 F5 g0 B$ ^ LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。 LabVIEW软件是NI设计平台的核心,也是开发测量或控制系统的理想选择。LabVIEW开发环境集成了工程师和科学家快速构建各种应用所需的所有工具,旨在帮助工程师和科学家解决问题、提高生产力和不断创新。 这 一篇文章讲解一下利用Labview软件实现和STM32-NUCLEO-072RB开发平台的通信,并实现一个简易数据采集系统。文章第一部分讲解 labview串口通信VI函数的实现。第二部分讲解一下STM32F0 ADC模块和库函数介绍,第三部分讲解一下MCU端代码软件的实现。 一、labview串口通信VI函数 要想实现一个完整的MCU和PC端Labview的软件串口通信,必须要打通一个串口的“通道”!也就是:# @6 |. q" v7 h; Q& ~" ` 下位机:也就是MCU程序中要实现串口收发的底层驱动 & d4 T, U/ R9 A" u6 J 中间通信线:提供了一个MCU串口到电脑串口的硬件连接:3条线 * j- g6 }& p/ O 上位机:labview软件开发串口通信程序+ r6 G5 ~7 a, D labview 里面实现串口通信有两种方法:一种是采用软件自带的VISA串口通信VI函数实现,另外一种是借助MSComm控件实现。第一种方法简单易用,便于快速掌握,第二种控制支持查询和事件驱动,功能好用,可以支持像 VB/VC++/delhpi这样的开发环境中使用! Labview软件的控件在labview软件的如下位置:" z. u9 e$ H8 W& G ![]() labview串口函数内容: ![]() 3 j6 c+ x1 q& H7 V 有了这些函数,实现串口VI就不难了,下面是一个串口VI的后面板程序图:# _2 M, a) c* g) `; A* Y2 I* p ![]() 6 L# r9 ^1 l' n0 X, e0 p 通过串口接收到非空字符后,将2个8位数据合成一个16位数据,然后将放大后的整数除以1000倍,送到波形图中显示出来,在循环里面没有增加延时,这样会占用计算机内存较多。 二、STM32F0的ADC模块及库函数STM32F0ADC特性4 W( A- A o3 O% f1 u5 X 1、12位精度下转换速度可高达1MHz 2、可配置的转换精度:6位,8位,10位,12位 ; P: {1 E- S/ _4 \ ?; w T- G 3、转换电压范围:0 ~ 3.6V,VSSA ~ VDDA 4、供电范围:2.4V ~ 3.6V: B& q5 M1 N, L0 w 5、19个转换通道,其中16个外部通道和3个内部通道(温度传感器内部电压参考§电池供电监测)4 X$ j) u9 [+ O6 r- J9 ~6 f% g& A# a 6、采样时间可配置 7、ADC模块自校准 / e6 I5 q, z6 J; J3 ?$ _* {% N0 \) M 8、扫描方向可配置 9、专用14MHZRC时钟或者内部时钟分频6 q: n7 ^. q7 h 10、多种转换模式:单通道单次,单通道连续,多通道单次,多通道连续、间隔 11、数据存放对齐方式可配置:左对齐,右对齐+ e/ g- D W) ?9 s 12、启动转换方式可配置:软件触发,硬件触发 13、可设置上下门限的模拟看门狗 14、DMA功能 15、自动延迟转换模式; L4 H9 ^) B0 P: T) v0 c9 B 16、自动节电模式 " C$ ~3 \7 ^6 [7 h* ?! I$ B+ ]" ` 17、多种中断源:(ADC模块就绪、转换结束、转换序列结束、采样阶段结束、模拟看门狗报警、溢出错误 ) STM32F0ADC采集通道引脚 ![]() * {0 v; b2 ]2 t% Q+ Z' t/ U& G 这里用的是PB1通道0 g- U6 [1 Y( n+ A" W7 \; j# P ![]() STM32F0ADC部分库函数介绍ADC结构体定义ADC_InitTypeDef ![]() ![]() ![]() 例程用到的ADC库函数, L% D2 p0 ]7 |# r ADC_Init();; W% ?: U0 [# e ADC_StructInit();2 o4 t% t% V4 X. V( @ ADC_Cmd();$ H. E! O y4 m2 G. n. t- b& W ADC_ChannelConfig();+ E# h4 J. r5 ?. M1 g5 A ADC_GetCalibrationFactor(); ADC_DMACmd(); ADC_StartOfConversion(); ADC_GetITStatus(); DMA_Init(); DMA_ITConfig(); DMA_Cmd(); ADC_DMARequestModeConfig()% N, |/ x7 o; a, H DMA_GetFlagStatus()/DMA_ClearFlag 有了这些代码,看一下具体的代码实现: 三、DMA方式下单通道数据采集代码实现1、Keil-mdk工程模板中加入ADC.C文件, 在includes.h文件中加入ADC.H头文件2 O7 w2 i1 ]* X9 E/ s0 C n8 i3 w- k: t ![]() I2 t4 {# y2 _6 ]# e. p' ^( Z 8 V9 K2 q' L+ x3 M 2、在ADC.H头文件宏定义 ![]() 3、采用DMA方式的ADC_DMA_Init()代码实现 ![]() ![]() 3 G. N5 g: V0 @ n* I" i2 s 4、向labview发送2个字符函数ADC_Value_Send()实现 ![]() 6 o1 q1 S2 G0 u 5、DMA中断优先级及服务函数实现 ![]() 6、main.c函数代码实现0 Y3 B3 y: T2 v9 ? | ![]() 7、实验现象硬件连线图: ![]() Labviewvi运行界面 ![]() 7 X W) N( z, r- ~5 d4 q g9 k% ]5 W4 O7 {4 n6 h 代码地址链接http://www.eeboard.com/bbs/thread-39696-1-1.html! M, Z+ X+ ]1 W5 K" s4 G8 N" P- | 摩尔吧视频地址链接https://www.moore8.com/courses/306, | N1 O5 J, u3 E9 D3 n5 s 3 |' @% C R& m6 D5 h: f 4 N A0 s6 m7 g8 i% b. t/ N, b : B, U1 K( v( |+ d % S* U4 N4 E8 ~+ q7 r5 C8 Z% ] ( s% {$ x( d. K0 \) A3 A! P1 D$ B 4 W* L L% @7 s3 z' a A0 h. W; S |
做成产品的话就要那样,需要花费时间精雕细刻,确保程序稳定性
VB VC++ delhpi QT C#.NET matlab等,你看喜欢哪个可以选择一个
分享给社区的更多人吧
感谢支持
可以不用买的,自己做个就可以,现在好多第三方支持,比如常见的研华数据采集卡等