AnyMath 文档

STM32支持包

在开始之前,从文章中做一般的准备和设置 在目标硬件上运行模型. 它描述了在目标硬件上运行模型的一般步骤:环境准备、连接、生成/装配和基本启动验证。

本文介绍了在*目标硬件*模式下在*STM32*板上启动模型的特性。

要在*目标硬件*模式下使用*STM32*板,使用该块 EDM-Target-STM32. 它提供代码生成,固件组装和下载,以及在微控制器上运行模型。

EDM-Target-STM32块参数

座 *EDM-Target-STM32*通过以下参数调整与微控制器的交互:

Cubemx项目的路径*--生成的STM32CubeMX项目的完整路径。 工具链的路径:[工具链是一组控制台工具(编译器、链接器和实用程序),它们从项目的源文件中为微控制器组装固件。]*--编译器的完整路径 arm-none-eabi-gcc.

+ 指定时 <自动> 首先,它在CubeIDE放置它们的路径中搜索(如果已安装)。 然后在路径和系统路径中。

+ **适用于Windows的示例:

+

C:\ST\STM32CubeIDE_1.13.2\STM32CubeIDE\plugins\
com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_2.0.100.202309141235\
tools\bin\

+ **Linux的一个例子:

+

/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_2.0.100.202309141235/tools/bin/arm-none-eabi-gcc

*Stm32cubeprogrammercli的路径--可执行文件的完整路径 Stm32电脑程式.

+ 要自动检测已安装的tulchain,请使用表达式 <自动> 以定义郁金香链的方式:

+ stm32 1

*UART模块--用于交互模式的USART编号。

+ 此编号必须与*STM32CubeMX*中为UART数据传输而必须预配置的模块相匹配。 有关详细说明,请参阅互动模式

+ 在CubeMX中配置后,在*EDM-Target-STM32*块的*冗余USART模块*参数中指定相同的USART编号(例如, 2 为USART2)。

*COM port--所选UART模块对应的串口(例如, COM3/开发/ttyUSB0).

要操作设备,必须提前安装STMicroelectronics软件(参见[必需软件]部分)。

所需软件

要使用*STM32*,您需要安装以下工具:

STM32CubeMX*--用于配置微控制器外设并生成项目。 STM32CubeIDE*是一个推荐的开发环境,其中包括编译器和调试工具。

允许在没有*STM32CubeIDE*的情况下工作。 在这种情况下,必须单独安装。:

*编译器 gcc-arm-none-eabi. *固件的实用程序 Stm32电脑程式.

实用程序可以通过两种方式使用:

*手动指定实用程序--在这种情况下,只需在*EDM-Target-STM32*块参数中设置编译器和STM32CubeProgrammerCLI的完整路径。 变量 路径 在这种情况下不使用它。

*模式 <自动>--然后 *AnyMath*它会自动搜索实用程序。 在这种情况下,环境变量为 路径 它被应用,并且实用程序应该通过它可用。

准备工作 AnyMath

确保已安装和配置硬件支持包。 它的安装在一节中详细描述 engee-hardware/engee-integrations.adoc#hardware-installation.

如果已安装支持包,则可以继续启动客户端程序并使用提供的URL进行连接。

STM32项目的准备工作

  1. 安装和配置*STM32CubeMX*。

  2. 为您的*STM32*板创建项目并执行基本外设配置。

  3. 单击*生成代码*并将项目保存到方便的目录中。

  4. 如果使用外部工具链,请安装*STM32CubeIDE*或单独配置编译器和固件实用程序。

使用CubeMX项目的详细配置 *AnyMath*下面在配置和启动模型一节中描述。

配置和启动模型

  1. 打开模型 AnyMath.

  2. 单击目标平台选择按钮并选择模式 目标硬件:

    target hardware 1

  3. 添加*EDM-Target-STM32*块从 块库在画布上 AnyMath. 如果缺少该块,请使用以下命令更新支持包:

    engee.package.start("Engee-Device-Manager")
  4. 在*STM32CubeMX中设置项目*:

    在*项目经理项目*部分中,选择*仅复制必要的库文件在*Project ManagerToolchain/IDE*部分中,请务必将值设置为*CMake

    stm32 3

    CMake*的选择是强制性的。 如果没有这个,项目格式将与 *AnyMath.

在*代码生成器*部分中,选择*生成外围初始化作为一对'。c/。每个外设的h’文件

+ stm32 2 设置必要的外围设备并单击*生成代码

+ stm32 4 *在*EDM-Target-STM32*块的*CubeMX项目路径*参数中指定生成项目的路径。

+ stm32 5

  1. 选择模型执行模式:

    • 在硬件上运行模型 target hardware 4 --交互式执行与控制从 AnyMath.

    • 以独立模式运行 target hardware 3 --离线执行,无需控制 AnyMath.

  2. 单击"开始"按钮。

如果模型中未放置*EDM-Target-STM32*块,则在启动时会出现错误:

ErrorException("EDM-Target-STM32 block not found. To start model in Target Hardware mode, the model must include an EDM-Target-STM32 block.")

不同模式的特殊设置

为FreeRTOS设置

FreeRTOSfootnote项目:[*FreeRTOS*是一个轻量级的实时操作系统(RTOS),提供任务调度,延迟,队列和其他机制,方便地与其余固件逻辑并行运行模型。]可以尽可能简单地配置:

  1. 在*STM32CubeMX*打开*引脚排列和配置*→中间件和软件包

  2. 打开*FREERTOS*。

  3. 在*FREERTOS模式和配置*部分中,将*接口*设置为 CMSIS_V2.

    stm32 6

  4. 默认情况下保留其他参数。

  5. 使用*生成代码*按钮生成代码。

在FreeRTOS模式下,不需要手动设置模型执行频率,而在裸机模式下,计时器是手动设置的。

裸机设置

在bare-metalfootnote模式下:[*Bare-metal*是没有操作系统的程序的启动。 代码直接在微控制器上运行,所有任务(定时器,调用 model_tick(),事件处理)必须手动配置。]模型执行频率通过定时器手动设置:

  1. 选择空闲计时器(例如,TIM3)。

  2. 设置时钟源 内部时钟.

    stm32 7

  3. 使用公式计算定时器参数:

    T = ((P + 1) × (R + 1)) / F_CPU

    哪里

    • P --预分频器;

    • R --反周期;

    • F_CPU --微控制器的时钟频率。

      72兆赫的例子:

      P = 7199
      R = 9
  4. 设置定时器参数中的值。

    stm32 8

  5. 在*NVIC设置*选项卡中,启用定时器中断。

    stm32 9

  6. 添加对model_tick()函数的调用footnote:[model_tick是一个自动生成的 *AnyMath*负责模型的"时钟周期"的功能。 它应该以正确的频率(通常为1ms)调用,以便模型以正确的频率运行。]:

    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    {
      if (htim->Instance == TIM1)
      {
        HAL_IncTick();
      }
    
      if (htim->Instance == TIM3)
      {
        model_tick();
      }
    }
  7. 初始化计时器后,添加启动:

    HAL_TIM_Base_Start_IT(&htim3;);

互动模式

交互模式使用UART与 AnyMath:

  1. 在*STM32CubeMX*中,选择一个免费的USART模块。

  2. 设置参数: **波特率 — 115200位/秒;

    stm32 10 **默认情况下为其他参数。

  3. 设置UART操作模式:

    *在*DMA设置*选项卡中,单击*添加*按钮并添加新的*DMA请求 — USARTx_RX,在哪里 x --保留的USART模块的编号。

    dma usart conf 1 *在此*DMA请求*的*优先级*字段中,指定 ,并在底部设置字段*DMA请求设置*设置*模式的值 通告.

    dma usart conf 2 *接下来,添加另一个*DMA请求 — USARTx_TX. 在*优先级*字段中,指定 ,并在底部,在设置字段*DMA请求设置*中,为*模式设置值* 正常.

    dma usart conf 3 **还要确保在所有旁边的*NVIC设置*选项卡中 DMAx channel_№全局中断 而恰恰相反 USARTx全局中断 有蜱虫。

  4. 在*EDM-Target-STM32*块的参数中,指定: UART模块—​USART编号; COM端口—​设备端口。

    stm32 11

例子::

*Linux — /开发/ttyUSB0 *窗户 — COM1

+ 检查Linux上的可用端口:

+

ls /dev | grep ttyUSB
要将UART显示为COM端口,您可能需要配置USB_DEVICE。 有关更多信息,请参阅手册: STM32和USB。 USB虚拟COM端口实现

解决可能出现的问题

UART连接的问题

报告时 无法连接到目标:

*检查USB连接的可靠性。 *确保TX/RX连接正确。 *在Linux上,将用户添加到有权访问串行设备的组(例如, 车轮, uucp 或另一个,具体取决于您的分布)。

固件问题

如果锚被移除 用户代码开始 或CubeMX系统代码:

删除损坏的项目文件。 *在CubeMX中再次生成项目(通过单击*生成代码)。

装配问题

*错误显示在客户端程序的界面中,并完整输出有关问题的信息。 *检查实用程序的路径是否正确。 *确保在块参数中正确指定了工具的路径,并且可以通过指定的路径访问它们。