|
本帖最后由 fengye5340 于 2015-1-8 14:44 编辑 & ^! k$ y9 Q5 d' ^6 h2 A/ X* {! Z3 Y LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。 LabVIEW软件是NI设计平台的核心,也是开发测量或控制系统的理想选择。LabVIEW开发环境集成了工程师和科学家快速构建各种应用所需的所有工具,旨在帮助工程师和科学家解决问题、提高生产力和不断创新。' ?& W( c& ]6 @) q0 z, { 这 一篇文章讲解一下利用Labview软件实现和STM32-NUCLEO-072RB开发平台的通信,并实现一个简易数据采集系统。文章第一部分讲解 labview串口通信VI函数的实现。第二部分讲解一下STM32F0 ADC模块和库函数介绍,第三部分讲解一下MCU端代码软件的实现。 一、labview串口通信VI函数' o. q5 `( S/ T" c1 { 要想实现一个完整的MCU和PC端Labview的软件串口通信,必须要打通一个串口的“通道”!也就是: 下位机:也就是MCU程序中要实现串口收发的底层驱动 4 O7 T! p. a" z7 e4 U& P7 O6 o# {3 h4 V1 ` 中间通信线:提供了一个MCU串口到电脑串口的硬件连接:3条线 上位机:labview软件开发串口通信程序 labview 里面实现串口通信有两种方法:一种是采用软件自带的VISA串口通信VI函数实现,另外一种是借助MSComm控件实现。第一种方法简单易用,便于快速掌握,第二种控制支持查询和事件驱动,功能好用,可以支持像 VB/VC++/delhpi这样的开发环境中使用!1 W0 L( {# B3 r9 R% `, p: G Labview软件的控件在labview软件的如下位置:
labview串口函数内容:$ X5 Y L- t# P4 _
有了这些函数,实现串口VI就不难了,下面是一个串口VI的后面板程序图:
& |* }- n8 p& i* C) A 通过串口接收到非空字符后,将2个8位数据合成一个16位数据,然后将放大后的整数除以1000倍,送到波形图中显示出来,在循环里面没有增加延时,这样会占用计算机内存较多。 二、STM32F0的ADC模块及库函数STM32F0ADC特性8 J0 K ]: m9 D" B7 n 1、12位精度下转换速度可高达1MHz 2、可配置的转换精度:6位,8位,10位,12位 3、转换电压范围:0 ~ 3.6V,VSSA ~ VDDA 4、供电范围:2.4V ~ 3.6V 5、19个转换通道,其中16个外部通道和3个内部通道(温度传感器内部电压参考§电池供电监测) 6、采样时间可配置 . T2 {- P2 k+ K0 d$ [+ K 7、ADC模块自校准 8、扫描方向可配置 9、专用14MHZRC时钟或者内部时钟分频 10、多种转换模式:单通道单次,单通道连续,多通道单次,多通道连续、间隔 - [1 y2 E4 `! J6 k 11、数据存放对齐方式可配置:左对齐,右对齐 12、启动转换方式可配置:软件触发,硬件触发 13、可设置上下门限的模拟看门狗 14、DMA功能 15、自动延迟转换模式; H$ ]5 w3 n+ m/ g! K 16、自动节电模式 & n1 }9 z3 g Y/ O0 b! U q9 l' N 17、多种中断源:(ADC模块就绪、转换结束、转换序列结束、采样阶段结束、模拟看门狗报警、溢出错误 )3 `1 Z6 N6 }$ |# q! ~$ ?; S1 ` STM32F0ADC采集通道引脚# B& V/ `& K# R6 S* I
* E3 o$ l" |' p7 A8 B 这里用的是PB1通道* u5 Z8 c5 q8 S+ {2 o0 f
STM32F0ADC部分库函数介绍ADC结构体定义ADC_InitTypeDef
" ^4 b/ W# R" X/ S/ J 例程用到的ADC库函数$ E) c0 i2 I8 W0 L* P ADC_Init();4 k' F1 k8 G @# Z, ] I& K ADC_StructInit(); ADC_Cmd(); ADC_ChannelConfig();$ G! d g/ [3 F7 `+ B* H R ADC_GetCalibrationFactor();9 e/ f* N! y- b h ADC_DMACmd(); ADC_StartOfConversion(); J% E7 ~7 C6 t8 t; Q6 P ADC_GetITStatus();; m& Y4 j! i" K* g6 G DMA_Init();2 A& ?3 P. m/ A/ G DMA_ITConfig();) y% T2 ]) R/ U9 m4 f0 U7 \7 h: Z DMA_Cmd(); ADC_DMARequestModeConfig() DMA_GetFlagStatus()/DMA_ClearFlag 有了这些代码,看一下具体的代码实现:! l3 S% o2 l# u 三、DMA方式下单通道数据采集代码实现1、Keil-mdk工程模板中加入ADC.C文件, 在includes.h文件中加入ADC.H头文件( {6 u9 N+ E! K' K/ S: y2 D; m
, R9 u7 d! M$ V; y4 @$ M i) ~; _* j 7 E) L# [+ V5 ?" _7 N 2、在ADC.H头文件宏定义
9 e2 W) t$ @8 D0 N" A9 J 3、采用DMA方式的ADC_DMA_Init()代码实现
4、向labview发送2个字符函数ADC_Value_Send()实现
; j5 ^$ p+ l, ^* Y! y* L6 J 5、DMA中断优先级及服务函数实现
2 x1 ^. g6 z5 U$ @ 6、main.c函数代码实现0 _6 [8 `2 s2 `7 t. o
7、实验现象硬件连线图:7 L8 x6 _. y+ t4 X4 `/ y5 [% `* C
Labviewvi运行界面
/ m8 w$ N( P2 ?" X5 s& Z! z' p 5 m! [3 {( m- ] 5 {1 _3 C& I' ?3 K3 P0 o 代码地址链接http://www.eeboard.com/bbs/thread-39696-1-1.html 摩尔吧视频地址链接https://www.moore8.com/courses/306: R2 v& M; ?2 B " Z" n9 ]' d# f8 [7 C( o \* |* m% ^/ ~* ` " I/ U8 n+ h! V2 c! N 5 e7 B5 a+ T+ C+ B6 N* _* P ( O( Y) | a/ q b* G1 B) V5 K 3 x2 T S8 E% [3 _ |
微信公众号
手机版
做成产品的话就要那样,需要花费时间精雕细刻,确保程序稳定性
VB VC++ delhpi QT C#.NET matlab等,你看喜欢哪个可以选择一个
分享给社区的更多人吧
感谢支持
可以不用买的,自己做个就可以,现在好多第三方支持,比如常见的研华数据采集卡等