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

发布于:2023-01-19 ⋅ 阅读:(644) ⋅ 点赞:(0)

一、环境准备

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文档下载

应用示例效果图

本文含有隐藏内容,请 开通VIP 后查看