【STM32-MBD】(15)Simulink 模型开发之三相互补 PWM

STM32-MBD(1)Matlab2022/2023 安装 STM32 硬件支持包
STM32-MBD(15)Simulink 模型开发之三相互补 PWM

    • [1. 项目介绍](#1. 项目介绍)
      • [1.1 项目内容](#1.1 项目内容)
      • [1.2 软件需求与环境配置](#1.2 软件需求与环境配置)
      • [1.3 硬件需求与引脚分配](#1.3 硬件需求与引脚分配)
    • [2. CubeMX工程配置](#2. CubeMX工程配置)
      • [2.1 创建新项目](#2.1 创建新项目)
      • [2.2 TIM 配置](#2.2 TIM 配置)
      • [2.4 工程配置](#2.4 工程配置)
    • [3. Simulink 仿真模型](#3. Simulink 仿真模型)
      • [3.1 模型任务与结构](#3.1 模型任务与结构)
      • [3.2 创建仿真模型](#3.2 创建仿真模型)
      • [3.3 关联 Simulink 模型与 CubeMX 工程](#3.3 关联 Simulink 模型与 CubeMX 工程)
      • [3.4 STM32 代码生成与运行](#3.4 STM32 代码生成与运行)
    • [4. 总结](#4. 总结)

1. 项目介绍

1.1 项目内容

在电机控制中通常使用三相逆变桥来驱动电机,每个桥臂需要一对互补的PWM信号来控制上下桥臂的MOSFET,并且为了避免上下桥臂同时导通(直通),必须插入死区时间。

我们在前文 【动手学STM32G4】(4)STM32G431之PWM输出 中已经介绍了 PWM 输出的基本方法。在此基础上,本文基于 Simulink + STM32 Model-Based Design (MBD) 开发流程,以 STM32G431 为目标平台,在 CubeMX 完成硬件配置,在 Simulink 中构建控制模型,通过自动代码生成将仿真模型直接部署到硬件,实现三相互补带死区 PWM 的稳定输出。

  • 在功能目标上,利用 STM32G431 的高级定时器 TIM1,配置三相 PWM 及其互补输出通道,由硬件自动插入死区时间,生成稳定可靠的三相互补 PWM 波形。
  • 在实现方式上,采用"CubeMX 负责外设配置、Simulink 负责占空比生成"的分工思路,将互补输出与死区等强时序功能完全交由定时器硬件实现。
  • 在应用定位上,本文实现的三相互补 PWM 作为基础输出模块,可直接复用于后续的 SVPWM、FOC 及其他电机控制与功率电子应用中。

1.2 软件需求与环境配置

本文所涉及的 软件与开发环境配置,与前文【STM32-MBD】系列保持一致。关于所需软硬件条件及详细安装过程,请务必首先参考: 【STM32-MBD】(1)安装 Simulink STM32 硬件支持包

强烈建议在安装相关软件时优先采用文中推荐版本,并严格按照步骤完成安装与配置。在 Model-Based Design 开发流程中,软件版本之间的兼容性对代码生成与工程部署具有重要影响,随意更换版本可能导致难以定位的问题。

必需的软件环境:

  1. STM32 开发工具链(建议首先使用推荐版本跑通本文项目)

    • STM32CubeMX(推荐使用 V6.4.0)

      用于 STM32 工程初始化与外设配置,本文中主要用于 TIM1 三相互补 PWM 及死区参数的配置。

    • STM32CubeProgrammer(推荐使用 V2.6.0)

      用于程序下载、调试及 Flash 管理。

    • STM32CubeIDE(或 Keil MDK-ARM 等 IDE 工具)

      用于编译、链接及调试由 Simulink 自动生成的 STM32 工程代码。

    • STM32Cube_FW_G4 固件包(推荐使用 V1.5.0)

      提供 STM32G4 系列的 HAL 驱动与底层支持文件。

      若使用其它 STM32 MCU,应选择对应系列的固件包。例如,STM32F4 系列需使用 STM32Cube_FW_F4_V1.26.0。

  2. MATLAB / Simulink 环境

    • MATLAB / Simulink

      本文基于 MATLAB R2022b 进行开发与测试,也可使用更新版本。

    • Simulink Coder

      用于从 Simulink 模型、Stateflow 图及 MATLAB Function 中生成 C/C++ 代码,支持快速原型、实时与非实时应用,是 STM32-MBD 工作流的核心组件。

    • Embedded Coder Support Package for STMicroelectronics STM32 Processors

      STM32 处理器嵌入式硬件支持包,用于将 Simulink 模型直接部署到基于 STMicroelectronics STM32 处理器的硬件平台上,实现自动代码生成、编译与下载。

  3. 安装完成后的检查与验证

    为确保 Simulink-STM32 代码生成与部署环境配置正确,应逐项进行基础验证测试。具体的检查流程与示例模型部署方法,请参考:【STM32-MBD】(2)Simulink 模型部署入门

    通过该基础测试,可确认以下关键环节均工作正常:

    • Simulink 模型可正确生成 STM32 目标代码
    • 工程可在 IDE 中顺利编译
    • 程序可成功下载并在硬件上运行

1.3 硬件需求与引脚分配

  1. 硬件平台:

    • 本文实验基于 NUCLEO-G431RB 开发板进行。
      该开发板搭载 STM32G431,内部集成高级定时器 TIM1,原生支持三相互补 PWM 输出及硬件死区插入,适合用于电机控制与功率驱动相关实验。
    • 为便于信号观测与调试,实验过程中使用示波器对 PWM 波形进行测量验证。
  2. TIM1 三相互补 PWM 引脚分配
    本文基于 NUCLEO-G431RB 开发板 和 NUCLEO-IHM16M1 驱动板,支持三电阻或单电阻电流采样检测。本实验使用 TIM1 定时器 生成三相互补 PWM 波形,分别输出三路高桥臂信号(CH1、CH2、CH3)及对应的互补低桥臂信号(CH1N、CH2N、CH3N),典型的引脚配置如下图所示。

bash 复制代码
TIM1:
  CH1 : PA8    , CH1N : PB13
  CH2 : PA9    , CH2N : PB14
  CH3 : PA10   , CH3N : PB15
  1. PWM 频率与占空比参数计算
    根据实验需求,本文生成 频率为 10 kHz、占空比为 50% 的 PWM 波形。相关参数计算如下。

(1)定时器基本参数设置

bash 复制代码
系统时钟:SysCLK = 160 MHz
定时器预分频系数:PSC = 0
计数周期:ARR = 8000 − 1

在中心对齐计数模式下,定时器计数过程包含上升段和下降段两个阶段,因此完整 PWM 周期对应的计数长度为 2 × (ARR + 1)。由此可得 PWM 频率为:

f P W M = f s y s 2 ∗ ( P S C + 1 ) ∗ ( A R R + 1 ) = 160 M H z 2 ∗ 8000 = 10 k H z f_{PWM} =\frac{f_{sys}}{2*(PSC+1)*(ARR+1)} =\frac{160 MHz}{2*8000}= 10 kHz fPWM=2∗(PSC+1)∗(ARR+1)fsys=2∗8000160MHz=10kHz

(2)占空比计算

当占空比设为 50% 时,对应的比较值(Pulse)为:

p u l s e = d u t y ∗ A R R = 0.5 ∗ 7999 ≈ 4000 pulse = duty *ARR = 0.5 * 7999 \approx 4000 pulse=duty∗ARR=0.5∗7999≈4000

(3)参数配置说明

在 CubeMX 中,将 TIM1 的 Prescaler(PSC)设为 0、Counter Period(ARR)设为 8000,并在 "PWM Generation Channel" 配置中将 Pulse 设置为 4000,即可生成频率为 10 kHz、占空比为 50% 的 PWM 波形。

  1. 死区时间的计算:
    为避免上下桥臂同时导通导致直通风险,需要在互补 PWM 输出之间插入适当的死区时间。

(1)驱动器参数分析

IHM16M1 驱动板采用 STSPIN830 驱动芯片,其典型参数如下:开关延迟:约 50 ns,上升 / 下降时间:约 30 ns 。在最坏情况下,等效延迟约为:50ns + 30ns =80ns

考虑安全裕量,设计死区时间为: T d e a d = 80 n s ∗ 1.5 = 120 n s T_{dead} = 80ns * 1.5 = 120ns Tdead=80ns∗1.5=120ns 。

(2)死区计数值计算

在 STM32G431 中,死区时间以定时器时钟周期为单位进行配置。TIM1 的时钟频率为 160 MHz,对应的时钟周期为 1/160MHz = 6.25ns。

计算最小死区时间对应的计数值为: 120ns/6.25ns = 19.2。综合以上考虑,本文将死区时间计数设置为 20~50。

2. CubeMX工程配置

在 STM32-MBD 开发中,CubeMX 负责定时器的结构性与时序性配置(如 PSC、ARR、死区等),而 Simulink 仅在必要时才对运行期参数进行更新。

对于三相互补 PWM 这类对时序高度敏感的应用,推荐由 CubeMX 固定 PWM 频率,Simulink 仅更新占空比,以保证系统稳定性和工程一致性。

2.1 创建新项目

  1. 新建工程。

    启动 STM32CubeMX,点击 "Start New Project"(或使用快捷键 Ctrl + N)新建工程,进入 New Project 界面。

    选择 MCU:STM32G431RBT6(根据开发板所使用的 MCU 型号进行选择)

    选择开发板:NUCLEO-G431RB

    点击右上角 "Start Project" 创建项目

    将工程保存为 STM32G431_PWM04.ioc

  2. 配置系统时钟树。

    (1)点击顶部 "Clock Configuration" 选项卡,进入时钟树配置界面。

    (2)设置输入频率 Input frequency = 24 MHz,系统主频 SysCLK frequency = 160 MHz

    配置完成后,系统时钟状态如下:

    • System Clock:160 MHz
    • HCLK:160 MHz
    • PCLK1:160 MHz
    • PCLK2:160 MHz
  1. 系统配置(SYS / RCC)

    在 Pinout & Configuration 界面中完成系统级配置:

    (1)选择 System Core -- SYS:

    Debug 模式设置为 Serial Wire

    (2)选择 "System Core -- SYS":

    设置基础时钟源,将 Timebase Source 设为 "TIM2"。

    (3)选择 System Core -- RCC:

    High Speed Clock (HSE):Crystal/Ceramic Resonator

    Low Speed Clock (LSE):Disable(本实验不使用)

  2. GPIO 配置。

    (1)将 LD2(PA5) 配置为输出模式 GPIO_Output

    (2)将 用户按键(PC13) 配置为外部中断 GPIO_EXTI13

  3. 配置虚拟串口(LPUART)

    本实验使用串口将 ADC / DAC 数据发送至 PC 端用于波形显示:

    启用 LPUART1

    模式:Asynchronous

    波特率:115200

    引脚:默认 PA2(TX)/ PA3(RX),连接至 NUCLEO 板载 ST-LINK 虚拟串口

    在需要高频数据传输或连续波形刷新时,可为 LPUART1_TX 分配 DMA 通道以降低 CPU 负载。

2.2 TIM 配置

  1. 配置 TIM1 生成三相互补 PWM。
    配置 TIM1 定时器,用于产生频率为 10 kHz 的三相互补 PWM 波形。
  1. TIM1 引脚分配
    在右侧 Pinout View 中,点击相应引脚并选择 TIM1 的 PWM 功能,引脚分配如下:
bash 复制代码
TIM1_CH1 → PA8
TIM1_CH2 → PA9
TIM1_CH3 → PA10
TIM1_CH1N → PB13
TIM1_CH2N → PB14
TIM1_CH3N → PB15
  1. 启用并配置TIM1 :
    (1)TIM1 模式配置
    在 Pinout & Configuration 中选择 "Timers -- TIM1 -- TIM1 Mode and Configuration",配置如下:
bash 复制代码
Clock Source: Internal Clock

Channel-1: PWM Generation CH1 CH1N (PWM 互补输出)
Channel-2: PWM Generation CH2 CH2N (PWM 互补输出)
Channel-3: PWM Generation CH3 CH3N (PWM 互补输出)

(2)TIM1 计数器参数配置:

bash 复制代码
Counter Settings:
   Prescaler (PSC): 0
   Counter Mode: Center Aligned mode 1
   Counter Period (ARR): 7999
   Internal Clock Division (CKD): No Division
   Repetition Counter (RCR): 0
   Auto-reload preload: Enable

Trigger Output (TRGO) Parameters:
   Trigger Event Selection TRGO: Output Compare (OC4REF)

(3)死区时间参数配置:

在 Break And Dead Time management -- Output Configuration 中进行如下设置:

bash 复制代码
Break And Dead Time management - Output Configuration:
   Automatic Output State: Enable
   DeadTime Preload: Enable
   Dead Time: 50(计数周期)

2.4 工程配置

  1. Project Manager 配置
    点击 "Project Manager" 进入工程设置界面:

(1)在 Project 页面:

  • Project Name:STM32G431_PWM04

  • 选择工程保存路径

  • 勾选 "Do not generate the main()"

  • Toolchain / IDE:选择 STM32CubeIDE

  • 取消勾选 "Generate Under Root"

(2)在 MCU and Firmware Package 栏:

  • 取消勾选 "Use latest available version"

  • 选择 STM32Cube FW_G4 V1.6.0

  • 若固件包未安装在默认路径,取消 "Use Default Firmware Location" 并手动指定路径。

(3)在 Code Generator 中:

  • 勾选 "Generate peripheral initialization as a pair of '.c/.h' files per peripheral",让每个外设生成独立的'.c/.h'文件。

(4)在 Advanced Settings 中:

  • 将所有 "Driver Selector" 设置为 "LL"(默认为 HAL)------非常重要,否则后续编译会报错!

  • 将 Generated Function Calls 中的 Visibility (Static) 选项全部取消。

  1. 保存工程
    完成上述配置后,使用快捷键 Ctrl + S 或点击 File → Save Project 保存 CubeMX 工程文件。
    注意:在 STM32CubeMX 中完成配置后,不要点击 "GENERATE CODE" 生成代码,而是仅保存 .ioc 工程文件,后续代码将由 Simulink 自动生成并集成。

本章使用 Simulink 构建最小可运行的控制模型,通过自动代码生成将模型部署至 STM32G431 硬件运行,实现三相 PWM 占空比的在线更新与验证。

3.1 模型任务与结构

Simulink 模型的任务:

  • 生成三相 PWM 的占空比控制量;
  • 通过 STM32 支持包接口,将占空比写入 TIM1 的比较寄存器(CCR);
  • 互补逻辑与死区插入功能完全由 TIM1 硬件完成,不在 Simulink 模型中实现。

因此,本文所建立的 Simulink 模型并不直接生成六路 PWM 波形,而是采用"Simulink 负责控制量,定时器负责波形生成"的分工结构。这种设计方式不仅模型结构清晰,而且与实际工程中软硬件职责划分保持一致,便于后续扩展更复杂的控制算法。

从整体结构上看,模型主要由以下几部分组成:

  1. 占空比生成模块(用于产生固定或可调的三相占空比);
  2. 占空比限幅与格式化处理;
  3. TIM1 PWM 输出接口模块(分别对应 CH1、CH2、CH3)

3.2 创建仿真模型

在 MATLAB 中新建 Simulink 模型。模型设计遵循"先跑通、再扩展"的原则,首先构建一个最小可验证模型,用于验证 Simulink 与 TIM1 之间的接口是否能够正常工作。

在 CubeMX 项目文件所在的路径(例如 D:\SimulinkProjects\STM32G431_PWM04a)下新建 Simulink 仿真模型。

注意:Simulink 模型文件(.slx)必须与 CubeMX 项目文件(.ioc)保存在同一目录下。

  1. 创建 Simulink 模型

    运行 MATLAB,打开 Simulink,点击 "空白模型" 创建新的仿真模型,并将其保存到当前项目路径下,命名为:STM32G431_PWM04a.slx

  2. 添加并配置 PWM Output 模块

    在仿真模型中添加 "PWM Output" 模块,并按以下步骤进行配置。

  • (1)添加 PWM Output 模块

    在 Simulink 库浏览器中找到 PWM out 模块,将其拖入模型中。

  • (2)配置 PWM Output 模块参数

    按照 CubeMX 项目中的 TIM1 与 GPIO 引脚配置,对模块参数进行设置(如图所示):

    • 将 Timer module 设为 TIM1;
    • 将 Duty Cycle unit 设为 Percentage;
    • 勾选 Enable channel 1 / Enable channel 2 / Enable channel 3,分别使能 TIM1 的 CH1、CH2、CH3;
    • 勾选 Enable frequency input,以启用频率输入。该输入对应写入定时器 TIM1 的自动重装载寄存器(ARR),用于设置计数器周期。
  1. 设置 PWM 周期与占空比
    将计数器周期 ARR 设为 8000,并将 CH1、CH2、CH3 的占空比分别设置为 50%、20%、10%。
    当 ARR = 8000 时,对应的 PWM 频率为 10 kHz,其计算关系如下:
    f P W M = f s y s 2 ∗ ( P S C + 1 ) ∗ ( A R R + 1 ) = 160 M H z 2 ∗ 8000 = 10 k H z f_{PWM} =\frac{f_{sys}}{2*(PSC+1)*(ARR+1)} =\frac{160 MHz}{2*8000}= 10 kHz fPWM=2∗(PSC+1)∗(ARR+1)fsys=2∗8000160MHz=10kHz
    占空比的数值可根据实验需要自行设定,取值范围为 0~100 (%)。

特别说明:

CubeMX 写 ARR 是"上电初始化",Simulink 写 ARR 是"运行期控制",运行期一定覆盖初始化。

  1. 如果 Simulink 中 TIM 模块未使能(未勾选 Enable frequency input),CubeMX 中配置的 ARR 有效,TIM 的计数周期、PWM 频率 完全由 CubeMX 决定。
  2. 如果 Simulink 中 TIM 模块使能了(勾选 Enable frequency input,在 Simulink 中设置 ARR),则 Simulink 的 ARR 生效,CubeMX 的 ARR 会被覆盖。
  1. 模型求解器与仿真参数设置
    在 Simulink 菜单中选择 "建模 → 模型设置"(或使用快捷键 Ctrl + E),打开 配置参数 对话框,在左侧选择 "求解器",按如下方式进行设置:

    • 将 仿真时间 设为 inf
    • 在 求解器选择 中:
      类型选择 定步长
      固定步长(基础采样时间) 设为 1e-4
    • (可选)在 任务和采样周期选项 中勾选:
      "将每个离散速率视为单独任务"
      "自动处理数据传输的速率转换"
  2. 关联 CubeMX 工程文件
    在配置参数窗口中,切换至 硬件实现(Hardware board settings),完成目标硬件与 CubeMX 工程的关联。

    • (1)确认 PC 与 STM32G431 开发板已正常连接
      在 Hardware board 下拉列表中选择 STM32G4xx Based
      注意:必须确保开发板已连接,否则无法完成硬件相关配置
    • (2)点击 Browse,选择当前项目目录中的 CubeMX 工程文件 "STM32G431_PWM04.ioc"。
    • (3)展开 Target hardware resources -- Timers:
      将 Timer group 设为 Advanced Timers 1/8/20
      勾选 Show TIM1 configurations
      勾选 Start timer during model initialization
      勾选 Enable Update Interrupt
      (可选)勾选 Enable Trigger interrupt(本实验中非必须)
  1. 保存模型
    完成仿真模型与硬件配置后,将模型保存为:"STM32G431_PWM04.slx"。
    再次强调:Simulink 模型文件(.slx)与 CubeMX 项目文件(.ioc)必须位于同一目录下。

3.4 STM32 代码生成与运行

  1. 硬件连接

    使用 USB 线连接 PC 与 NUCLEO-G431RB 开发板,确保 ST-LINK 能够被系统正确识别。

  2. 生成并部署 STM32 代码

    在 Simulink 中打开仿真模型 STM32G431_PWM04a.slx,在 "硬件(Hardware)" 选项卡中点击 "编译、部署和启动"(快捷键 Ctrl + B)。

Simulink 将自动完成以下过程:

  • 为模型生成 STM32 目标代码;
  • 调用 CubeMX 工程配置;
  • 通过 IDE 完成编译与链接;
  • 将程序下载至 NUCLEO-G431RB 开发板并启动运行。

模型编译与部署过程中的关键信息将显示在 "诊断查看器" 中。编译摘要如下。

c 复制代码
### 正在启动 STM32G431_PWM04a 的编译过程
### 正在为 '模型特定' 文件夹结构生成代码和工件
### 正在将代码生成到编译文件夹中: C:\MATLAB\MBD_STM32G431\STM32G431_PWM04\STM32G431_PWM04a_ert_rtw
### Invoking Target Language Compiler on STM32G431_PWM04a.rtw
### Using System Target File: C:\MATLAB\R2023b\rtw\c\ert\ert.tlc
...
### 使用工具链: GNU Tools for ARM Embedded Processors
### 'C:\MATLAB\MBD_STM32G431\STM32G431_PWM04\STM32G431_PWM04a_ert_rtw\STM32G431_PWM04a.mk' 是最新的
### 正在编译 'STM32G431_PWM04a': "C:\MATLAB\R2023b\bin\win64\gmake"  -f STM32G431_PWM04a.mk all
...
Download verified successfully
### Successful completion of build procedure for: STM32G431_PWM04a
### 'STM32G431_PWM04a' 的 Simulink 缓存工件是在 'C:\MATLAB\MBD_STM32G431\STM32G431_TIM01\STM32G431_PWM04a.slxc' 中创建的。
youcans@qq.com 编译过程已成功完成
    
编译的顶层模型目标:

模型                操作           重新编译原因     
==========================================
STM32G431_PWM04a  代码已生成并完成编译。  生成的代码已过期。  

编译了 1 个模型,共 1 个模型(0 个模型已经是最新的)
编译持续时间: 0h 0m 7.562s

至此,Simulink 模型已成功生成 STM32 代码并部署至硬件运行,可通过示波器对 TIM1 的三相互补 PWM 输出进行验证。

  1. 使用示波器观察输出信号如下:

(1)三相

(2)互补

(3)带死区

实验结果讨论:

(1)TIM1_CH1/CH2/CH3 与对应的 CH1N/CH2N/CH3N 输出波形均呈现稳定、严格互补的关系,说明定时器互补输出工作正常。

(2)上下桥臂之间保持死区时间,未观察到重叠导通或异常毛刺现象,说明定时器死区配置工作正常。

(3)PWM 频率稳定在 10 kHz,与基于系统时钟、PSC 和 ARR 的理论计算结果一致。

(4)在 CubeMX 配置不变的条件下,通过 Simulink 修改各通道占空比,PWM 波形在不改变频率和死区时间的前提下平滑更新。

(5)在 CubeMX 配置不变的条件下,通过 Simulink 修改定时器计数 ARR,PWM 波形频率随之变化,说明 CubeMX 写 ARR 是"上电初始化",Simulink 写 ARR 是"运行期控制",运行期一定覆盖初始化。

从系统架构角度分析,本实验采用的 Model-Based Design 工作流有效避免了在 Simulink 中重复实现硬件已具备的功能,使模型结构更加简洁清晰。CubeMX 负责定时器、互补输出和死区等强时序、强硬件相关的配置,而 Simulink 专注于控制量的生成与更新,这种软硬件职责分离的方式不仅降低了模型复杂度,也提高了工程的可维护性和可扩展性。

4. 总结

本文基于 STM32-MBD 开发流程,利用 CubeMX 完成 TIM1 三相互补 PWM 及死区等硬件配置,并通过 Simulink 实现占空比的模型化控制与自动代码生成。实验结果表明,该方式能够稳定输出频率一致、互补关系正确且死区可靠的三相 PWM 波形。

通过将强时序、强硬件相关功能交由定时器实现,Simulink 模型结构保持简洁清晰,系统稳定性和可维护性显著提高。该工程实现为后续引入 SVPWM、FOC 及电流闭环控制奠定了可靠的 PWM 输出基础。

版权声明:

youcans@qq.com 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/157649063)

Copyright@youcans 2026

Crated:2026-02

相关推荐
Funing72 小时前
硬件实战项目——纯硬件寻迹小车
嵌入式硬件·电机·电路·智能车
机器学习之心2 小时前
基于CNN-GRU(卷积神经网络-门控循环单元)的多变量负荷预测模型MATLAB代码
matlab·cnn·gru
hrw_embedded3 小时前
基于CH395Q网卡移植ftplib的FTP客户端
网络·stm32·ftp·linux库
3GPP仿真实验室3 小时前
【Matlab源码】6G候选波形:OFDM-IM 索引调制仿真平台
开发语言·matlab
逐步前行3 小时前
STM32_内部结构
网络·stm32·嵌入式硬件
我是一棵无人问荆的小草4 小时前
STM32标准库与HAL库编程差异分析
stm32·单片机·嵌入式硬件
LingLong_roar4 小时前
手搓温湿度传感器(单片机普冉PY32F002AF15P6TU + 温湿度传感器 SHT40-AD1B-R2 + 0.96寸TFT IPS 显示屏)
单片机·嵌入式硬件
~光~~4 小时前
【嵌入式linux学习】06_中断子系统
linux·单片机·学习
XINVRY-FPGA4 小时前
中阶FPGA效能红线重新划定! AMD第2代Kintex UltraScale+登场,记忆体频宽跃升5倍
嵌入式硬件·fpga开发·硬件工程·dsp开发·fpga