基于stm32与串口通信的freeMaster使用

1. 驱动安装与源码移植

        从安装驱动程序FMASTERSCIDRV.exe的安装路径上获取源码,如图1所示。其中src_common文件夹里放着串行通信通用的驱动源码,将其全部复制到自己项目的文件中。src_platforms文件夹里放着与硬件平台相关的示例源代码,如图3、4所示,我们选择基于Arm® Cortex®-A、Cortex-R和Cortex-M内核为硬件开发平台的S32xx文件,将其文件夹内容也复制项目文件中,以.c、.h文件格式添加进MDK工程。

图1.1

图1.2

图1.3

 2. 修改源码配置

2.1 修改freemaster_cfg.h文件配置

2.1.1 选择中断或轮询驱动的通信模式 

 图2.1.1

        有三种方式只能选择其中一种,长中断和短中断模式的区别在于,如果选择长中断模式,则串行通信和FreeMASTER协议解码和执行都是在FMSTR_Isr()中断服务程序中完成的;而短中断模式则是原始串行通信由FMSTR_Isr()中断服务例程处理,而协议解码和执行则分解到轮询里,由FMSTR_Poll()例程处理。在我们的例子中,我们将使用短中断模式,中断处理尽量省时。

2.1.2 选择通信接口(方式)并使能

 图2.1.2.1 G4芯片项目 

 图2.1.2.2 F4芯片项目 

        可选多种通信方式实现底层与PC之前的通信,常用的有SCI、CAN、USB,在本例中,我们将使用串口通信,因此将FMSTR_USE_SCI设置为1,并且将其他清除为0。同时将SCI基地址映射到USART1外设基地址上,即配置FMSTR_SCI_BASE,最后将FMSTR_DISABLE清零,使能FreeMASTER。

2.1.3 根据需求选择Recorder的缓冲区大小

        如果在PC中设置了Recorder记录仪观测量的数量为n(打勾选择显示),同时设置了PC每显示一次的采样数量为Record samples,如观测量数量为1,记录仪显示的采样点为1000,则FMSTR_REC_BUFF_SIZE > (n * record_samples),本例中我们设置FMSTR_REC_BUFF_SIZE为8KBytes,当然了还要考虑所用芯片本身RAM的大小来合理设置,如图10所示,因此在使用PC时设置记录仪的属性时需要注意这层关系。

图2.1.3.1 Recorder主要配置

图2.1.3.2 Recorder缓冲区大小配置

 2.2 修改freeMaster硬件依赖文件(freemaster_XXXxx.h)中的宏定义

        因为移植过程中使用的例子是硬件为S32xx系列的,而我们用的是ST32G4系列,因此需要修改文件freemaster_S32xx.h文件中寄存器相关的宏定义。

2.2.1 根据芯片手册修改需要的寄存器偏移地址宏定义

 图2.2.1.1 G4项目

  图2.2.1.2 F4项目

2.2.2 修改寄存器访问操作的宏定义(由操作可知上面需要修改哪些地址)

        SCI访问寄存器的宏定义也需要修改,我们使用的是SCI而不是LPUART,因此在预编译#if FMSTR_USE_LPUART........#else........中只需修改#else后面的内容,这里最初定义的一些位名称与项目所用芯片的位名称对不上但也相近,检查手册找到对应功能即可对上,修改为如下列图所示。

图2.2.2.1 G4项目 

 图2.2.2.2 F4项目 

 3. 将freeMaster源码中API添加到项目代码中

        freeMater通信连通的三个关键API——分别是初始化函数FMSTR_Init(),轮询调度函数FMSTR_Poll(),中断服务函数FMSTR_Isr()。如果使用Recorder记录仪功能还需要添加FMSTR_Recorder()和FMSTR_TriggerRec()。

3.1 初始化函数FMSTR_Init()

        初始化函数FMSTR_Init()是初始化FreeMASTER驱动程序的内部变量,并启用通信接口(SCI、JTAG或CAN),此功能不改变所选通信模块的配置,必须置于通信模块配置(如MX_USART1_UART_Init())之后。

  图3.1 于外设之后初始化

 3.2 轮询函数FMSTR_Poll()

        轮询函数FMSTR_Poll()是在轮询驱动或短中断模式下,负责处理协议解码和执行,选择这两种模式时要在主应用程序中循环调用该API。

 图3.2 于while(1)轮询简单例程

3.3 中断服务函数FMSTR_Isr()

        中断服务函数FMSTR_Isr()是在长中断或短中断模式下使用,需要在所选通信模块的中断服务函数中调用,本例用的通信模块为USART,因此在其中断Handler里调用了FMSTR_Isr(),如下图所示。

图3.3 于外设Handler中

3.4 Recorder记录函数FMSTR_Recorder()

        记录函数FMSTR_Recorder()是在使用FreeMASTER记录仪时对被记录的变量进行采样,如果记录器在FMSTR_Recorder被调用的那一刻没有活动,函数将立即返回,不进行采样;当记录器初始化并激活时,被记录的变量的值将复制到记录器缓冲区,并计算触发器条件。

 

3.5 Recorder触发函数FMSTR_TriggerRec()

        当记录器满足PC工具设定的触发条件时就将数据一次性上传至PC工具,也可以在代码中调用FMSTR_TriggerRec()函数,强制触发条件发生,将数据上传至PC工具。

static void freeMaster_recorder(void)
{
    static u8 threshold_FMSTR = 0;

    FMSTR_Recorder();
    if(++threshold_FMSTR > PRE_TRIGGER_SAMPLES)
    {
        FMSTR_TriggerRec();
        threshold_FMSTR = 0;
    }
}

4. freeMaster PC应用配置

4.1 通信配置

        可以选择RS232串口通信,也可以选择CAN、USB通信、调试接口JTAG(用Plug-in module?),选择JTAG方式可以不需要移植freemaster源码,直接使用,但是只能使用扫描仪,无法使用记录仪。我们使用的是USART外设作为通信接口,因此我们直接选择RS232。

 4.2 选择Map File路径(用的是.axf文件)

        选择MDK编译生成的*.afx文件路径,PC应用根据该文件可以解析各变量的名称、类型、地址等信息,注意选择“File format”,然后会生成freeMaster的symbol list file,可以在上面View查看该freeMaster应用工程读到了哪些变量。

 4.3 其他

其他如Oscilloscope示波器、Variable Watch有版本差异且个性化,各自摸索即可。

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值