查看: 1815|回复: 0

STM32 NUCLEO高级教程1: 基于Labview上位机界面的NUCLEO-072RB数据采集系统

[复制链接]
  • TA的每日心情
    开心
    2018-9-18 06:28
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-12-10 17:00:37 | 显示全部楼层 |阅读模式
    分享到:
    LabVIEW是一种程序开发环境,由美国国 家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产 生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。 LabVIEW软件是NI设计平台的核心,也是开发测量或控制系统的理想选择。 LabVIEW开发环境集成了工程师和科学家快速构建各种应用所需的所有工具,旨在帮助工程师和科学家解决问题、提高生产力和不断创新。
    这一篇文章讲解一下利用Labview软件实现和STM32-NUCLEO-072RB开发平台的通信,并实现一个简易数据采集系统。文章第一部分讲解labview串口通信VI函数的实现。第二部分讲解一下STM32F0 ADC模块和库函数介绍,第三部分讲解一下MCU端代码软件的实现。
    一、labview串口通信VI函数
    要想实现一个完整的MCU和PC端Labview的软件串口通信,必须要打通一个串口的“通道”!也就是:
    下位机:也就是MCU程序中要实现串口收发的底层驱动
    中间通信线:提供了一个MCU串口到电脑串口的硬件连接:3条线
    上位机:labview软件开发串口通信程序
    labview里面实现串口通信有两种方法:一种是采用软件自带的VISA串口通信VI函数实现,另外一种是借助MSComm控件实现。第一种方法简单易用,便于快速掌握,第二种控制支持查询和事件驱动,功能好用,可以支持像 VB/VC++/delhpi这样的开发环境中使用!
    Labview软件的控件在labview软件的如下位置:

    labview串口函数内容:

    有了这些函数,实现串口VI就不难了,下面是一个串口VI的后面板程序图:

    通过串口接收到非空字符后,将2个8位数据合成一个16位数据,然后将放大后的整数除以1000倍,送到波形图中显示出来,在循环里面没有增加延时,这样会占用计算机内存较多。
    二、STM32F0的ADC模块及库函数
    STM32F0 ADC特性
    1、12位精度下转换速度可高达1MHz
    2、可配置的转换精度:6位,8位,10位,12位
    3、转换电压范围:0 ~ 3.6V,VSSA ~ VDDA
    4、供电范围:2.4V ~ 3.6V
    5、19个转换通道,其中16个外部通道和3个内部通道(温度传感器内部电压参考
    §电池供电监测)
    6、采样时间可配置
    7、ADC模块自校准
    8、扫描方向可配置
    9、专用14MHZRC时钟或者内部时钟分频
    10、多种转换模式:单通道单次,单通道连续,多通道单次,多通道连续、间隔
    11、数据存放对齐方式可配置:左对齐,右对齐
    12、启动转换方式可配置:软件触发,硬件触发
    13、可设置上下门限的模拟看门狗
    14、DMA功能
    15、自动延迟转换模式
    16、自动节电模式
    17、多种中断源:
    (ADC模块就绪、转换结束、转换序列结束、采样阶段结束、模拟看门狗报警、溢出错误 )
    STM32F0 ADC采集通道引脚

    这里用的是PB1通道

    STM32F0 ADC部分库函数介绍
    ADC结构体定义ADC_InitTypeDef



    例程用到的ADC库函数
    ADC_Init();
    ADC_StructInit();
    ADC_Cmd();
    ADC_ChannelConfig();
    ADC_GetCalibrationFactor();
    ADC_DMACmd();
    ADC_StartOfConversion();
    ADC_GetITStatus();
    DMA_Init();
    DMA_ITConfig();
    DMA_Cmd();
    ADC_DMARequestModeConfig()
    DMA_GetFlagStatus() /DMA_ClearFlag
    有了这些代码,看一下具体的代码实现:
    三、DMA方式下单通道数据采集代码实现
    1、Keil-mdk工程模板中加入ADC.C文件, 在includes.h文件中加入ADC.H头文件

    2、在ADC.H头文件宏定义

    3、采用DMA方式的ADC_DMA_Init()代码实现



    4、向labview发送2个字符函数ADC_Value_Send()实现   


    5、DMA中断优先级及服务函数实现


    6、main.c函数代码实现


    7、实验现象
    硬件连线图:


    Labview vi运行界面


    代码地址链接
    https://www.eeboard.com/bbs/thread-39696-1-1.html
    摩尔吧视频地址链接
    https://www.moore8.com/courses/306
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-24 15:37 , Processed in 0.118636 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.