使用VBA调用FreeMASTER使用J-Link获取仿真时的数组变量并在EXCEL中查看

本文介绍如何使用FreeMASTER与Excel VBA进行数据交互,包括FreeMASTER项目的搭建、配置Keil调试项目及通过VBA读取目标板数据等步骤。文中详细解释了在Excel中设置VBA宏来实现数据读取的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、环境准备

1、FreeMASTER安装版本

 2、Keil5、J-Link安装

二、FreeMASTER项目

1、新建项目,File->New Project

2、配置,Project->Options

       配置通信方式,此处是指定“C:\Program Files (x86)\SEGGER\JLink_V634\JLinkARM.dll”,可以根据实际安装路径与版本指定“JLinkARM.dll”文件。

 

如果按上图的“Test Connection”按钮,出现下图界面,则说明Jlink连接正常。

3、指定keil调试项目编译的axf文件。

4、添加变量,Project->Variables

      

       在上图中点击“Generate“按钮生成变量。

       在下图中选择变量,并点击“Creat a single variable“用以选择变量。

       添加“sample_AV“数据后如下图效果,此处只尝试对一个二维数组进行读取,故只加了一个变量。

三、EXCEL中的VBA

1、新建EXCEL文件,在EXCEL中加入宏设计, 在进行宏设计时需引用下图所指库文件(FreeMASTER ActiveX Type Library)。

设计结构如下图

 

为方便使用,在EXCEL中加入了一个“加载窗体“按钮,用来直接打开在VBA中设计的窗体,可以输入数组变量名与长度。下图中变量sample_AV是两维数组,可以输入sample_AV[0]与sample_AV[1]指定数组读取的位置。

模块文件中的代码如下


Dim pcm As McbPcm
Dim sht

Private Sub UserForm_Activate()
    Set pcm = New McbPcm
    Set sht = Worksheets("sheet1")
    sht.Range("A1").Value = "变量值"
    sht.Range("B1").Value = "状态"
End Sub

Sub OnError(err)
    If pcm Is Nothing Then
        Call UserForm_Activate
    End If
    sht.Range("B2").Value = "ERROR: " & err
End Sub

Sub ShowStatus(text)
    If pcm Is Nothing Then
        Call UserForm_Activate
    End If
    sht.Range("B2").Value = text
End Sub

Sub ReadVar16()
    Call ReadVariable("var16", "B1")
End Sub

Sub ReadArr16(tmpVarName, tmpVarLen)
    Call ReadArray(tmpVarName, 2, tmpVarLen, "A")
End Sub

Sub ClearArray()
    If pcm Is Nothing Then
        Call UserForm_Activate
    End If
    
    sht.Range("A2:A1024").Value = ""
    ShowStatus ("Array was cleared")
End Sub

Sub ReadVariable(name, cell)
    Dim bSucc As Boolean
    If pcm Is Nothing Then
        Call UserForm_Activate
    End If
   
    bSucc = pcm.ReadVariable(name, vValue, tValue, bsRetMsg)
    If bSucc Then
        sht.Range(cell).Value = tValue
        ShowStatus ("Readvariable OK")
    Else
        OnError (bsRetMsg)
    End If
End Sub

Sub ReadArray(name, elemSize, length, cell)
    Dim bSucc As Boolean
    Dim i As Integer
    If pcm Is Nothing Then
        Call UserForm_Activate
    End If
    bSucc = pcm.ReadUIntArray(name, length, elemSize, arr, bsRetMsg)
    If bSucc Then
        'sht.Range(cell).Value = arr
        For i = 0 To UBound(arr) - 1
            sht.Range(cell & (i + 2)).Value = arr(i)
        Next i
        
        
        ShowStatus ("ReadUIntArray OK")
    Else
    OnError (bsRetMsg)
    End If
End Sub

Sub LoadUserForm()
    UserForm1.Show
End Sub


Sub GetVarArr_Click()
    ClearArray
End Sub
 

UserForm1中的代码如下

Private Sub CommandButton1_Click()
    Call ReadArr16(TextBox1.text, Val(TextBox2.text))
End Sub

Private Sub CommandButton2_Click()
    End
End Sub

Private Sub CommandButton3_Click()
    ClearArray
End Sub

相关资源

FreeMASTER应用程序说明

FreeMASTER自带示波器功能如图示。

        FreeMASTER文档中的例程

Excel文档下载

应用示例效果图

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值