STM32-MBD(1)Matlab2022/2023 安装 STM32 硬件支持包
STM32-MBD(1b)Matlab2025b 安装 STM32 硬件支持包
STM32-MBD(2)Simulink 模型部署入门:点灯
STM32-MBD(11)Simulink 模型开发之定时器
STM32-MBD(12)Simulink 模型开发之ADC
【STM32-MBD】(12)Simulink 模型开发之ADC
-
- [1. 项目简介](#1. 项目简介)
-
- [1.1 项目内容](#1.1 项目内容)
- [1.2 软硬件条件](#1.2 软硬件条件)
- [2. 用 STM32CubeMX 创建工程](#2. 用 STM32CubeMX 创建工程)
-
- [2.1 基础配置](#2.1 基础配置)
- [2.2 ADC 配置](#2.2 ADC 配置)
- [2.3 项目配置](#2.3 项目配置)
- [3. Simulink 仿真模型](#3. Simulink 仿真模型)
-
- [3.1 创建仿真模型](#3.1 创建仿真模型)
- [3.2 关联 Simulink 模型与 CubeMX 工程](#3.2 关联 Simulink 模型与 CubeMX 工程)
- [4. STM32 代码生成与运行](#4. STM32 代码生成与运行)
-
- [4.1 从 Simulink 模型生成 STM32 代码](#4.1 从 Simulink 模型生成 STM32 代码)
- [4.1 Simulink 在线监控](#4.1 Simulink 在线监控)
在基于 Model-Based Design(MBD) 的 STM32 开发流程中,ADC(模数转换器) 是连接物理世界与数字系统的第一道入口。
无论是电压、电流、温度,还是电位器、传感器信号,最终都需要通过 ADC 转换为可处理的数字量。
本文完成一个最小但完整的 ADC 单通道采样实验:
- 使用 Simulink 读取 Nucleo STM32 开发板上的旋钮(电位器)电压,
- 生成 STM32 工程代码并在开发板上运行。
1. 项目简介
1.1 项目内容
本文以 STM32G431 为目标平台,介绍如何使用 Simulink 构建 ADC 单通道采样模型,并生成代码部署到 STM32 开发板运行。
本实验的目标是:
- 使用 STM32 ADC 单通道采样;
- 采集 Nucleo 开发板板载旋钮(电位器) 对应的模拟电压;
- 在 Simulink 模型中直接调用 ADC 模块;
- 完成代码生成、下载并在开发板上稳定运行。
1.2 软硬件条件
关于所需的软硬件条件和安装过程,详见 【STM32-MBD】(1)安装 Simulink STM32 硬件支持包。
强烈建议安装相关软件时使用推荐版本。
请严格按照文中介绍的步骤安装和配置软件。
必需的硬件:
- STM32 开发板(如:NUCLEO-G431RB 开发板,也可以选择其它 STM32 开发板,但需要安装对应的固件包)。
- Micro-micro USB 数据线,或 USB Type-A 至 Micro-B 连接线缆,用于将STM32 Nucleo 板连接到 PC。
必需的软件:
-
STM32 开发工具(建议首先严格使用推荐版本跑通本文项目)
- STM32CubeMX (推荐使用 V6.4.0)
- STM32CubeProgrammer (推荐使用 V2.6.0)
- STM32CubeIDE(或 Keil,MDK-ARM 等 IDE 工具)
- STM32Cube_FW_G4 固件包(推荐采用 V1.5.0)
如果使用其它 STM32 MCU,则需选择对应的固件包。例如使用 STM32F4 时则要选择STM32Cube_FW_F4_V1.26.0 固件包。
-
MATLAB/Simulink(本文使用 MATLAB R2022b,可以采用更新版本)
- Simulink Coder:从 Simulink 模型、Stateflow 图和 MATLAB 函数生成并执行 C 和 C++ 代码,用于实时和非实时应用,包括仿真加速、快速原型构建和硬件在环测试
- STM32 嵌入式硬件支持包,Embedded Coder Support Package for STMicroelectronics STM32 Processors,STM32 处理器的嵌入式硬件支持包 youcans
2. 用 STM32CubeMX 创建工程
2.1 基础配置
本例直接使用 STM32CubeMX 创建新的 STM32 工程。也可以从 Simulink 创建 STM32CubeMX 工程。
-
打开 STM32CubeMX。
-
选择 New Project(或Ctrl-N快捷键)新建工程,进入 New Project 界面。
选择 STM32G431RB 作为目标 MCU(参考开发板的 MCU 型号)新建 CubeMX 工程,将工程保存为 "STM32G431_ADC01.ioc"。
-
自动转入 CubeMX 的 Pinout Configuration 视图,进行管脚配置:
(1)选择 "System Core -- SYS" 设置调试器类型,将 Debug 模式设为 "Serial Wire"。
(2)选择 "System Core -- SYS" 设置基础时钟源,将 Timebase Source 设为 "TIM2"------非常重要!
注意:Timebase Source 默认为 "SysTick",但在 STM32支持包中 "SysTick" 已经用作框架的基础时间功能,因此必须修改为 非"SysTick" 的其它定时器。否则在编译项目时会报错------非常重要!。

(3)选择 "System Core -- RCC" 配置时钟模式,设置高速晶振为外部时钟,将 High Speed Clock (HSE) 设为 "Crystal/Ceramic Resonator"。

(4)可选地,选择 "System Core -- GPIO" 配置 GPIO。
- 搜索 PA5 管脚(在 NUCLEO 开发板中 连接LD2 灯),将其设置为 GPIO_Output。
- 搜索 PC13 管脚(在 NUCLEO 开发板中 连接蓝色用户按键 User Button),将其设置为 GPIO_EXTI13。
(5)设置虚拟串口(LPUART)
如需要使用串口发送 ADC/DAC 数据到 PC 来显示波形:启用 LPUART1,模式设为 Asynchronous;波特率设置为 115200;引脚使用默认的 PA2(TX)/PA3(RX),连接到 Nucleo 板上的 ST-LINK 虚拟串口。
2.2 ADC 配置
板载旋钮(电位器)所连接的 ADC 引脚(如 PC2 → ADC1_IN8,具体以开发板原理图为准),
选取 ADC1 进行 ADC 配置, 将ADC1 IN8 配置为IN8 Single-ended , 然后右键选择PC2 管脚, 将其配置为 ADC1_IN8,此处管脚配置是为了后续将其作为旋钮的ADC进行使用。
- 启用并配置 ADC 通道
(1)选择 "引脚配置(Pinout & Configuration)",从左侧下拉列表中选择 "Analog -- ADC1" ,使用 IN8(PC2) 作为模拟输入通道,将 IN8 设置为 "IN8 Singel-ended"。在 Pinout view 视图中,将 PC2 引脚配置为 "ADC1_IN8"。
(2)开启独立通道 IN8,设置为 "IN1 Single-ended"。
(3)配置 ADC 工作模式和参数。
bash
ADCs_Common_Settings
Mode: Independent mode
ADC_Settings
Clock Prescaler: Asynchronous clock mode divided by 4
Resolution: ADC 12-bit resolution
Data Alignment: Right alignment(右对齐)
Gain Compensation: 0
Scan Conversion Mode:Disable
End of Conversion Selection:End of single of conversion
Continuous Conversion Mode: Disable
DMA Continuous Requests: Disabled
Number of Conversion: 1
Rank 1:
Channel: Channel 8
Smapling Time: 24.5 Cycles
Offset Number: No offset


2.3 项目配置
-
在 Clock Configuration 视图进行时钟配置,如下图所示。
本实验对于时钟时钟设置没有太多要求,只要设置正确即可。本例中使用外部 160MHz晶振,具体设置如下图所示,只供参考。

-
点击菜单栏 "Project Manager" 进入工程配置界面,如下图所示。
(1)在 Project Name 输入项目名称 "STM32G431_ADC01"。
(2)在 Toolchain/IDE 选择 IDE 工具为 "STM32CubeIDE"(也可以根据需要选择其它 IDE 工具 )。
(3)在 "Project Manager" 继续向下拉,"在 MCU and Firmware Package" 栏中,取消选中 "Use latest available version",根据所安装的 G4 固件版本,选择 "STM32Cube FW_G4 V1.6.0";
(4)如果固件包不是安装在默认路径,则要取消选中 "Use Default Firmware Location",通过 Browse 选择固件包的安装路径。

(5)在 Code Generator 中,勾选 "Generate peripheral initialization as a pair of '.c/.h' files per peripheral",让每个外设生成独立的'.c/.h'文件。
(6)在 Advanced Settings 中,**将 "Driver Selector" 全部设置为 "LL"(默认为 "HAL"),为外设选择低级 (LL) 驱动------非常重要!** 否则编译会报错。
(7)在 Advanced Settings 中,将 "Generated Function Calls" 的 "Visibility(Static)" 勾选项全部取消,对所有外设初始化函数调用取消选择可见性(静态)。

- 完成以上配置后,使用快捷键 "CTL+S" 或点击 File--Save Project,保存 CubeMX 项目文件。
注意:在 STM32CubeMX 中配置完成后,不要点击 "GENERATE CODE" 生成代码,而是直接保存项目文件 "STM32G431_ADC01.ioc"。
3. Simulink 仿真模型
3.1 创建仿真模型
在 CubeMX 项目文件所在的路径(例如:"D:\SimulinkProjects\STM32G431_ADC01")下新建 Simulink 仿真模型,注意 *仿真模型 .slx 与 CubeMX 项目 .ioc 要保存在同一个目录下。
-
运行 MATLAB 软件,打开 Simulink。点击 "空白模型" 创建新的 Simulink 模型,保存到本项目路径下:
STM32G431_ADC01.slx。 -
在仿真模型中添加 ADC 模块。
(1)点击菜单栏的 "库浏览器" 打开库浏览器,展开 "Embedded Coder Support Package for STMicroelectronics STM32 Processors -- STM32G4xx Based Boards"。
(2)选择 "Analog to Digital Converter" 模块,将其拖动到右侧的模型。
(3)根据 CubeMX 项目中的配置,设置 "Analog to Digital Converter" 模块参数:
c
ADC module: ADC1
Conversion group: Regular
Trigger mode: Trigger and read
Number of conversions: 1

- 在仿真模型中添加 Matlab Function 模块。
(1)点击菜单栏的 "库浏览器" 打开库浏览器,展开 "Simulink - User-Defined Function"。
(2)选择 "Matlab Function" 模块,将其拖动到右侧的仿真模型。
(3)根据 STM32G431 数据手册中的公式,编写函数计算 电压值。

3.2 关联 Simulink 模型与 CubeMX 工程
-
在 Simulink 菜单选择 "建模" - "模型设置" (也可以用 CTRL+E),打开"配置参数"对话框。
左侧边栏中选择"求解器",如下图所示。
(1)在右侧 "仿真时间" 设置为 "inf"。
(2)在 "求解器选择" 选项设置类型为 "定步长","固定步长(基础采样时间)" 设为 "1e-3" (对应于 MCU 的 ADC 采样频率为 1KHz)。
(3)可选地,在 "任务和采样周期选项"下勾选:"将每个离散速率视为单独任务"和"自动处理数据传输的速率转换"。 -
在右侧 "硬件实现(Hardware board settings)" 配置 "Target hardware resources" ,关联 STM32CubeMX 工程文件。
(1)检查 PC 与 STM32G431 开发板连接正常。 在 "Hardware board" 选项的下拉框中选择 "STM32G4xx Based".
注意:必须确保 PC 与 STM32G431 开发板连接正常,才能进行硬件配置。
(2)点击 "Browse" 选择当前项目的目录,选择 CubeMX 创建的工程文件 "STM32G431_ADC01.ioc"。
选择硬件在环通信串口。 -
完成搭建仿真模型,保存为文件 STM32G431_ADC01.slx。注意仿真模型 .slx 与 CubeMX 项目 .ioc 要保存在相同的路径下。
4. STM32 代码生成与运行
4.1 从 Simulink 模型生成 STM32 代码
-
用 USB连接线连接 PC 与 NUCLEO-G431RB 开发板。
-
在 Simulink 打开仿真模型 STM32G431_ADC01.slx。
-
在 "硬件(Hardware)" 窗口点击 "编译、部署和启动"(Ctrl+B 快捷键),就启动模型 STM32G431_ADC01 的编译过程,为模型生成代码,并加载到 NUCLEO-G431RB 开发板。
模型编译过程的主要信息显示在 "诊断查看器" 中,编译摘要如下。
c
=== 模型保存(STM32G431_ADC01) (已用时间: 0.109 秒) ===
### 正在启动 STM32G431_ADC01 的编译过程
### 正在为 '模型特定' 文件夹结构生成代码和工件
### 正在将代码生成到编译文件夹中: C:\MATLAB\MBD_STM32G431\STM32G431_ADC01\STM32G431_ADC01_ert_rtw
...
### 使用工具链: GNU Tools for ARM Embedded Processors
### 正在创建 'C:\MATLAB\MBD_STM32G431\STM32G431_ADC01\STM32G431_ADC01_ert_rtw\STM32G431_ADC01.mk'...
### 正在编译 'STM32G431_ADC01': "C:\MATLAB\R2023b\bin\win64\gmake" -f STM32G431_ADC01.mk all
...
Download verified successfully youcans@qq.com
### Successful completion of build procedure for: STM32G431_ADC01
### 'STM32G431_ADC01' 的 Simulink 缓存工件是在 'C:\MATLAB\MBD_STM32G431\STM32G431_ADC01\STM32G431_ADC01.slxc' 中创建的。
编译过程已成功完成
编译的顶层模型目标:
模型 操作 重新编译原因
=========================================
STM32G431_ADC01 代码已生成并完成编译。 增量校验和已更改。
编译了 1 个模型,共 1 个模型(0 个模型已经是最新的)
编译持续时间: 0h 0m 57s

4.1 Simulink 在线监控
目前的程序只是采集 电压,并没有进一步处理或显示,因此我们并不了解具体的运行情况。
-
Simulink 外部模式配置:
在 Simulink 菜单栏选择 "建模 - 模型设置" (也可以用 CTRL+E 唤出),打开"配置参数"对话框
(1) 配置仿真输出:
点击 "数据导入/导出",取消勾选 "单一仿真输出"。
(2)配置串口连接:
在 "硬件实现-Target hardware resources" 选择 "Connectivity",将 "USART/UART" 设为 "LPUART1",将 "Serial port" 设为 电脑上的 COM 端口。具体端口号可以查看电脑 "设备管理器" 中的 "端口(COM和LPT)"。
点击 "确定" 保存上述配置。
-
设置要监测的信号。
(1)用鼠标单击一根信号线,使信号线高亮。
(2)点击鼠标右键唤出菜单条,选中 "记录所选信号(Log Selected Signals)",将该信号标记为监测信号。
(3)在标记的信号线上会出现一个 小圆点发射 的图标,如下图所示。
在 Monitor & Tune(外部模式) 下,MCU(STM32)在开发板上真实运行,Simulink 不会自动把所有信号传回 PC,只有被明确标记为 "记录(Log)" 的信号才会通过 XCP 从 MCU 上传到 PC。
-
基于 SDI 在线监控
在外部模式下,控制算法运行在 STM32G431 的目标硬件上,模型时间来自目标端本地计时器,Simulink 主机不再控制仿真时间推进。在线监控与调节主要依赖 "数据检查器(Simulation Data Inspector, SDI),而非 Scope 模块。
完成信号记录后,启动 "Hardware → 监控与调节(Monitor & Tune),即可打开 "数据检查器(SDI)" 对数据进行观察。
(1)SDI 左侧显示 Run 列表(每次外部模式运行对应一个 Run)
(2)展开当前 Run,勾选已记录的信号 Vraw、Vout。
(3)勾选后,信号曲线会自动显示在右侧绘图区。

-
旋转板载旋钮,ADC 采样值随旋钮位置连续变化。
小结:
通过本实验,我们验证了 STM32-MBD 流程中 ADC 模块的可用性,成功采集并处理了板载旋钮的模拟电压。
(本节完)
版权声明:
youcans@qq.com 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/156387827)
Copyright@youcans 2025
Crated:2025-12