当前位置: 首页 > news >正文

【动手学电机驱动】STM32-MBD(2)将 Simulink 模型部署到 STM32G431 开发板

STM32-MBD(1)安装 STM32 硬件支持包
STM32-MBD(2)Simulink 模型部署

【动手学电机驱动】STM32-MBD(2)Simulink 模型部署

    • 1. 软硬件条件和环境测试
      • 1.1 软硬件条件
      • 1.2 开发环境测试
    • 2. 创建基于 STM32 处理器的 Simulink 工程
      • 2.1 创建 STM32CubeMX 工程
      • 2.2 创建 Simulink 仿真模型
      • 2.3 在 STM32CubeMX 中配置外设
    • 3. Simulink 模型仿真
    • 4. 从 Simulink 模型生成代码并加载到 STM32 硬件板

通过安装MATLAB 硬件支持包,可以将 STM32 微处理器与 MATLAB/Simulink 结合使用,让开发者可以直接在MATLAB环境中进行嵌入式系统的设计和调试。
本节详细介绍将 Simulink 模型部署到基于 STM32 处理器的硬件板上,并进行调试和运行。我们的第一个 STM32-MBD 实验采用 NUCLEO-G431RB 开发板, 以 LED 点灯实验为例,使用 Matlab/Simulink 建模仿真后直接生成 STM32 项目工程代码。


1. 软硬件条件和环境测试

Simulink/STM32 代码生成对于软硬件和开发环境的要求非常严格,很容易由于版本不匹配或路径错误而失败。作者已经踩过了很多的坑,可以说是我在所有开发项目中都从未经历过的。

【动手学电机驱动】STM32-MBD(1)安装 STM32 硬件支持包详细介绍了所需的软硬件条件和安装过程,请严格按照文中介绍的步骤安装和配置。强烈建议首先严格使用推荐版本跑通本文项目。

为了帮助大家确定 Simulink/STM32 代码生成 的开发环境安装配置成功,我们首先要逐项进行检查测试。


1.1 软硬件条件

必需的硬件:

  • 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 处理器的嵌入式硬件支持包

1.2 开发环境测试

  1. 运行 STM32CubeMX,菜单选择 Help–About,检查版本为 V6.4.0。

  2. 在 STM32CubeMX 菜单选择 Help–Manage embedded software packages,在弹出窗口中展开 STM32G4,检查 STM32Cube MCU Package for STM32G4 Series V1.5.0 固件包已安装。选项框为绿色表示安装成功,如下图所示。
    在这里插入图片描述

  3. 运行 STM32CubeProgrammer,并测试与 STM32 开发板的连接。
    (1)通过 ST-Link 将 STM32 微控制器与计算机连接:用 USB 连接线连接 PC 与 NUCLEO-G431RB 开发板(该开发已板集成了 ST-Link ),确保连接正常(可以从设备管理器查看端口,显示“STMicroelectronics STLink Virtual COM Port”)。
    (2)运行 STM32CubeProgrammer,此时右上角的状态灯为红色并显示 “Not connect”。
    (3)点击右上角 “Connect” 按钮连接设备,如下图所示。

在这里插入图片描述

此时:a) 右上角的状态灯为绿色并显示 “Connected”;b) 右侧信息栏 “Target information” 显示目标设备 STM32 MCU和开发板的信息;c) 在 “Device memory” 信息栏显示设备内存地址和对应的内存信息;d) 在 “Log” 信息栏显示相关信息如下。

11:31:31 : STM32CubeProgrammer API v 2.6.0
11:31:34 : ST-LINK SN  : 002B00283532510731333430
11:31:34 : ST-LINK FW  : V3J15M7
11:31:34 : Board       : NUCLEO-G431RB
11:31:34 : Voltage     : 3.28V
11:31:34 : SWD freq    : 24000 KHz
11:31:34 : Connect mode: Normal
11:31:34 : Reset mode  : Software reset
11:31:34 : Device ID   : 0x468
11:31:34 : Revision ID : Rev X
11:31:34 : UPLOADING OPTION BYTES DATA ...
11:31:34 :   Bank          : 0x00
11:31:34 :   Address       : 0x40022020
11:31:34 :   Size          : 20 Bytes
11:31:34 :   Bank          : 0x01
11:31:34 :   Address       : 0x40022070
11:31:34 :   Size          : 4 Bytes
11:31:34 : UPLOADING ...
11:31:34 :   Size          : 1024 Bytes
11:31:34 :   Address       : 0x8000000
11:31:34 : Read progress:
11:31:34 : Data read successfully
11:31:34 : Time elapsed during the read operation is: 00:00:00.002
  1. 运行 Matlab,菜单选择 主页–附加功能–管理附加功能,弹出“附加功能管理器”窗口,检查已安装 STM32 嵌入式硬件支持包 “Embedded Coder Support Package for STMicroelectronics STM32 Processors”。
    如下图所示,本文的安装版本为 V22.2.2。

在这里插入图片描述

  1. 在“附加功能管理器”窗口选中 STM32 嵌入式硬件支持包后,点击齿轮图标“设置”,弹出“Select STM32 MCUs Family” 窗口
    (1)从中选择所使用的 MCU 型号(本文为 STM32Gxx Based MCUs)。
    (2)提示必需的 STM32 工具及版本(STM32CubeMX、STM32CubeProgrammer),如尚未安装可以点击 “Download” 下载并安装。
    (3)对 STM32CubeMX 进行安装配置验证。
    点击 “Browse” 选择本机安装 STM32CubeMX 的路径。
    点击 “Validate” 进行验证,如下图所示。如果 STM32CubeMX 的版本较新,将出现软件版本兼容性提示。强烈建议严格使用推荐版本 V6.4.0。
    (4)对 STM32CubeProgrammer 进行安装配置验证。
    点击“Browse”选择本机安装 STM32CubeProgrammer 的路径。
    点击 “Validate” 进行验证,如下图所示。如果 STM32CubeProgrammer 的版本较新,将出现软件版本兼容性提示。强烈建议严格使用推荐版本 V2.6.0。
    在这里插入图片描述

2. 创建基于 STM32 处理器的 Simulink 工程

STM32 硬件支持包使开发者能够使用 Simulink 访问硬件外设,并使用 STM32CubeMX 工具在处理器上配置外围设备。

要支持在基于 STM32 处理器的板上运行 Simulink 模型,需要使用 STM32CubeMX 图形化工具。STM32CubeMX 工具采用图形界面,可用于配置 STM32 处理器的外设,并为所选的 STM32 处理器生成外设初始化代码。


2.1 创建 STM32CubeMX 工程

  1. 打开 STM32CubeMX。

  2. 选择 New Project(或Ctrl-N快捷键)新建工程,进入 New Project 界面。
    选择MCU为 STM32G431RBTx(参考开发板的 MCU 型号选择),点击 “Start Project” 建立项目。

在这里插入图片描述

  1. 选择 New Project(或Ctrl-N快捷键)新建工程,自动转入 CubeMX 的 Pinout Configuration 视图。

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

  3. 点击 “File–Save Project”,保存建立的 CubeMX 项目工程文件 STM32G431_MBD01.ioc。


2.2 创建 Simulink 仿真模型

  1. 运行 MATLAB 软件,将当前路径切换到 CubeMX 项目 .ioc 的保存路径

  2. 打开 Simulink,点击 “空白模型” 创建新的 Simulink 模型,保存为文件 STM32G431_MBD01.slx。注意仿真模型 .slx 与 CubeMX 项目 .ioc 要保存在相同的路径下。

在这里插入图片描述

  1. 在 Simulink 菜单选择 “建模” - “模型设置” (也可以用 CTRL+E),打开“配置参数”对话框。
    左侧边栏中选择“求解器”,如下图所示。
    (1)在右侧 “仿真时间” 设置为 “inf”。
    (2)在 “求解器选择” 选项设置类型为 “定步长”,“固定步长(基础采样时间)” 设为 “1e-4” (对应于 MCU 的 ADC 采样频率为 10kHz)。
    (3)可选地,在 "任务和采样周期选项"下勾选:“将每个离散速率视为单独任务”和“自动处理数据传输的速率转换”。

在这里插入图片描述

  1. 如下图所示,在“配置参数”窗口的左边栏中选择“硬件实现”,在右侧 “硬件板(Hardware board)” 选项的下拉框中选择 “STM32G4xx Based”。

在这里插入图片描述
说明:
(1)根据使用的 STM32 的型号,从 “Hardware board” 中选择适当的硬件板选项。本项目使用 STM32G431RB MCU,因此选择 “STM32G4xx Based”。
(2)推荐选择 “STM32F4xx Based”,“STM32G4xx Based”,“STM32H4xx Based”,配合 STM32CubeMX 配置外设来实现对 STM32 硬件板的支持。
(3)在 “Hardware board” 选项中,还有一些 “STM32 Nucleo ******” 的选项,这是专门针对某些型号 STM32 Nucleo 开发板提供的硬件支持,可以直接在 Simulink 中对外设进行配置。但是,随着 STM32 的发展很多 Nucleo 开发板并未被支持,而 STM32CubeMX 的应用也越来越广泛,因此作者推荐开发者按照本文的步骤,直接使用 “STM32G4xx Based”,结合 STM32CubeMX 开展基于模型的代码生成。

  1. 在右侧 “Hardware board settings” 配置 “Target hardware resources” ,点击 “Browse” 选择或点击 “Create” 创建一个STM32CubeMX 工程文件(.ioc)。
    (1)点击 “Browse” 选择 CubeMX 工程文件 STM32G431_MBD01.ioc。
    (2)如下图所示,系统识别到目标设备为 STM32G4 系列,设备 ID为 STM32G431R(6-8-B)Tx。
    (3)打开设备列表 “Device list”,并点击 “Refresh” 按钮刷新,显示连接的设备为 “STM32G43x/STM32G44x”,表明目标设备配置成功。
    点击 “确定” 保存上述配置。
    在这里插入图片描述

  2. 选择硬件在环通信串口。
    点击 “Target hardware resources–Groups–Connectivity”,将 “USART/UART" 设为 “USART3”,将 “Serial port" 设为 电脑上的 COM 端口。具体端口号可以查看电脑”设备管理器“中的”端口(COM和LPT)“。

注意:这是针对 NUCLEO-G431RB 开发板集成了 STLINK-V3E 串口一体调试器。如果使用单独的 USB 转串口模块,要注意连线正确(USART3:PB10, PB11)。

  1. 回到 Simulink 仿真窗口,搭建仿真模型。
    (1)在仿真模型中添加 “Digital Write” 模块参数。
    点击菜单栏的 “库浏览器” 打开库浏览器,展开 “Embedded Coder Support Package for STMicroelectronics STM32 Processors – STM32G4xx Based Boards”。选择 “Digital Port Write” 模块,将其拖动到右侧的模型。
    (2)设置 “Digital Write” 模块参数。如图所示,按照 CubeMX 项目中的 GPIO 管脚配置,将 Port name 设为 “GPIOA”,将 Pin number 设为 “[5]”,即将 PA5 管脚设置为 GPIO_Output。

在这里插入图片描述

(3)在仿真模型中添加 “Pulse Generator” 脉冲发生器模块。如下图所示,设置模块参数为:周期 1秒,脉冲宽度(占空比)为50%。

在这里插入图片描述

(4)完成搭建仿真模型,保存为文件 G431_MBD01.slx。注意仿真模型 .slx 与 CubeMX 项目 .ioc 要保存在相同的路径下。


2.3 在 STM32CubeMX 中配置外设

  1. 回到 STM32CubeMX,打开 STM32CubeMX 工程文件 G431_MBD01.ioc。

  2. 在 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”。

在这里插入图片描述

  1. 在 Pinout Configuration 视图中,搜索 PA5 管脚(在 NUCLEO 开发板中 连接LD2 灯),将其设置为 GPIO_Output。如下图所示。

在这里插入图片描述

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

在这里插入图片描述

  1. 在 Project Manager 视图进行工程配置,如下图所示。
    (1)在 Project 中勾选 “Do not generate the main()”,在生成代码时不生成 main.c 文件中的 main() 函数。
    (2)在 Project 中取消选中 “Generate Under Root”。

在这里插入图片描述

(3)在 Code Generator 中,勾选 “Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral”,让每个外设生成独立的’.c/.h’文件。

在这里插入图片描述

(4)在 Advanced Settings 中,将 “Driver Selector” 全部设置为 “LL”(默认为 “HAL”),为外设选择低级 (LL) 驱动–非常重要!否则编译会报错。

(5)在 Advanced Settings 中,将 “Generated Function Calls” 的 “Visibility(Static)” 勾选项全部取消,对所有外设初始化函数调用取消选择可见性(静态)。
在这里插入图片描述


  1. 完成以上配置后,使用快捷键 “CTL+S” 或点击 File–Save Project,保存 CubeMX 项目文件。
    注意:在 STM32CubeMX 中配置完成后,不要点击 “GENERATE CODE” 生成代码,而是保存 .ioc 项目文件。

3. Simulink 模型仿真

  1. 在 Simulink 打开仿真模型 STM32G431_MBD01.slx。
  2. 为输出信号添加一个示波器。
  3. 在 “仿真” 窗口点击 “运行”,观察示波器的输出波形。如下图所示,示波器显示周期为 1sec 的方波。
  4. 双击脉冲发生器模块 Pulse Generator,修改参数 “周期”、“脉冲宽度” 后再开始仿真运行,可以得到不同周期和脉宽的波形。

在这里插入图片描述


4. 从 Simulink 模型生成代码并加载到 STM32 硬件板

  1. 在 Simulink 打开仿真模型 STM32G431_MBD01.slx。

  2. 在 “硬件(Hardware)” 窗口点击 “编译、部署和启动”(Ctrl+B 快捷键),就启动模型 STM32G431_MBD01 的编译过程,为模型生成代码,并加载到 NUCLEO-G431RB 开发板。

模型编译过程的主要信息显示在 “诊断查看器” 中,编译摘要如下。
如果编译中发生错误,错误信息也将显示在 “诊断查看器” 。

 顶层模型编译  
### 正在启动 STM32G431_MBD01 的编译过程
### 正在为 '模型特定' 文件夹结构生成代码和工件
### 正在将代码生成到编译文件夹中: D:\MATLAB\SimulinkProjects\STM32G4\STM32G431_MBD01\STM32G431_MBD01_ert_rtw
### Invoking Target Language Compiler on STM32G431_MBD01.rtw
### Using System Target File: D:\Program Files\MATLAB\R2022b\rtw\c\ert\ert.tlc
### Loading TLC function libraries
### Initial pass through model to cache user defined code
.
### Caching model source code
### Writing header file STM32G431_MBD01_types.h
### Writing header file STM32G431_MBD01.h
### Writing header file rtwtypes.h.
### Writing source file STM32G431_MBD01.c
### Writing header file STM32G431_MBD01_private.h
### Writing source file STM32G431_MBD01_data.c
### Writing header file rtmodel.h
### Writing source file ert_main.c
.
...### Successful completion of build procedure for: STM32G431_MBD01
### 'STM32G431_MBD01' 的 Simulink 缓存工件是在 'D:\MATLAB\SimulinkProjects\STM32G4\STM32G431_MBD01\STM32G431_MBD01.slxc' 中创建的。
编译过程已成功完成编译摘要  
编译的顶层模型目标:模型               操作           重新编译原因     
=========================================
STM32G431_MBD01  代码已生成并完成编译。  生成的代码已过期。  编译了 1 个模型,共 1 个模型(0 个模型已经是最新的)
编译持续时间: 0h 0m 14.395s

在这里插入图片描述

  1. Simulink 通过调用 STM32CubeProgrammer 将编译的目标文件加载到 STM32 开发板,NUCLEO-G431RB 开发板上的 LD2 会闪烁,表明代码正在运行。

  2. 在 Simulink 模型中修改 Pulse Generator 模块的参数 “周期”、“脉冲宽度”,重新点击 “编译、部署和启动”,NUCLEO-G431RB 开发板上的 LD2 就以相应的周期和脉宽闪烁,表明基于 Simulink 的模型开发成功。

在这里插入图片描述


(本节完)


参考资料:

  1. 基于 STMicroelectronics STM32 处理器的板快速入门, (https://ww2.mathworks.cn/help/ecoder/stmicroelectronicsstm32f4discovery/ug/Getting-started-stm32cubemx.html?searchHighlight=STM32&s_tid=srchtitle_support_results_2_STM32)

  2. 安装 STMicroelectronics STM32 处理器的支持程序,(https://ww2.mathworks.cn/help/ecoder/stmicroelectronicsstm32f4discovery/ug/install-support-for-stm32-board-processors.html)

  3. 使用 STM32CubeMX 和 Simulink 配置基于 STM32 处理器的板,(https://ww2.mathworks.cn/help/ecoder/stmicroelectronicsstm32f4discovery/ug/STM32-CubeMX-Configuration.html?searchHighlight=STM32&s_tid=srchtitle_support_results_5_STM32)


版权声明:
youcans@xidian 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/144325556)
Copyright@youcans 2025
Crated:2025-01

相关文章:

【动手学电机驱动】STM32-MBD(2)将 Simulink 模型部署到 STM32G431 开发板

STM32-MBD(1)安装 STM32 硬件支持包 STM32-MBD(2)Simulink 模型部署 【动手学电机驱动】STM32-MBD(2)Simulink 模型部署 1. 软硬件条件和环境测试1.1 软硬件条件1.2 开发环境测试 2. 创建基于 STM32 处理器…...

Nginx代理本地exe服务http为https

Nginx代理本地exe服务http为https 下载NginxNginx命令exe服务http代理为https 下载Nginx 点击下载Nginx 下载好之后是一个压缩包,解压放到没有中文的路径下就可以了 Nginx命令 调出cmd窗口cd到安装路径 输入:nginx -v 查看版本 nginx -h&#xff…...

C++: glibc: pthread: pthread_cond_destroy,程序hang一例

今天碰到一个程序hang的情况。程序在退出的时候,调用到了pthread_cond_destroy,但是另一个线程还在pthread_cond_timedwait。应该是死锁的一个例子。应该查看libpthread.so的二进制文件,查看具体是在等什么。 Thread 1 (Thread 0x7f7028037580 (LWP 38)): #0 0x00007f7022e…...

【中间件】docker+kafka单节点部署---zookeeper模式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言消息中间件介绍1. KRaft模式2. zookeeper模式2.1. 单节点部署安装验证 前言 最近生产环境上准备部署ELFK日志监控,先在测试环境部署单节点kafka验证…...

深入Android架构(从线程到AIDL)_08 认识Android的主线程

目录 3、 认识Android的主线程(又称UI线程) 复习: 各进程(Process)里的主线程​编辑 UI线程的责任: 迅速处理UI事件 举例 3、 认识Android的主线程(又称UI线程) 复习: 各进程(Process)里的主线程 UI线程的责任: 迅速处理UI事…...

集线器,交换机,路由器,mac地址和ip地址知识记录总结

一篇很不错的视频简介 基本功能 从使用方面来说,都是为了网络传输的标识,和机器确定访问对象 集线器、交换机和路由器 常听到路由器和集线器,下面是区别: 集线器 集线器:一个简单的物理扩展接口数量的物理硬件。…...

【VUE】使用create-vue快速创建一个vue + vite +vue-route 等其他查看的工程

create-vue 简介 GitHub:https://github.com/vuejs/create-vue 创建的选项有多个,具体的可以看下方截图,当创建完成的时候可以发现工程中是自带vite的。 下面对其中的各种内容进行简单的说明 JSX (可以选择,但是我感觉没什么必要) 全称:JavaScript XML 允许你在 Java…...

Jetpack Compose 学习笔记(一)—— 快速上手

本篇主要是对 Jetpack Compose 有一个宏观上的了解。 1、Jetpack Compose 是什么与优势 Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API,可以帮助您简化并加快 Android 界面开发。 Compose 的优势&am…...

Kafka3.x KRaft 模式 (没有zookeeper) 常用命令

版本号:kafka_2.12-3.7.0 说明:如有多个地址,用逗号分隔 创建主题 bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic demo --partitions 1 --replication-factor 1删除主题 bin/kafka-topics.sh --delete --boots…...

Leetcode 最大正方形

java 实现 class Solution {public int maximalSquare(char[][] matrix) {//处理特殊情况if(matrix null || matrix.length 0 || matrix[0].length 0) return 0;int rows matrix.length;int cols matrix[0].length;int[][] dp new int[rows][cols]; //dp[i][j]的含义是以…...

ubuntu22.04录屏黑屏,飞书共享屏幕黑屏问题

参考https://cloud.tencent.com/developer/ask/sof/116470494 电脑是联想x1笔记本,显卡是intel的,nvidia显卡好像没看见这种问题。 sudo apt update sudo apt install xserver-xorg打开custom.conf, sudo gedit /etc/gdm3/custom.conf 解…...

沙箱模拟支付宝支付3--支付的实现

1 支付流程实现 演示案例 主要参考程序员青戈的视频【支付宝沙箱支付快速集成版】支付宝沙箱支付快速集成版_哔哩哔哩_bilibili 对应的源码在 alipay-demo: 使用支付宝沙箱实现支付功能 - Gitee.com 以下是完整的实现步骤 1.首先导入相关的依赖 <?xml version"1…...

Golang的代码质量分析工具

Golang的代码质量分析工具 一、介绍 作为一种高效、简洁、可靠的编程语言&#xff0c;被越来越多的开发者所喜爱和采用。而随着项目规模的增长和团队人员的扩大&#xff0c;代码质量的管理变得尤为重要。为了保障代码的可维护性、健壮性和可扩展性&#xff0c;我们需要借助代码…...

【Linux】:多线程(读写锁 自旋锁)

✨ 倘若南方知我意&#xff0c;莫将晚霞落黄昏 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#…...

Java开发 PDF文件生成方案

业务需求背景 业务端需要能够将考试答卷内容按指定格式呈现并导出为pdf格式进行存档&#xff0c;作为紧急需求插入。导出内容存在样式复杂性&#xff0c;包括特定的字体&#xff08;中文&#xff09;、字号、颜色&#xff0c;页面得有页眉、页码&#xff0c;数据需要进行表格聚…...

数学期望和方差

数学期望&#xff08;Mathematical Expectation&#xff09;和方差&#xff08;Variance&#xff09;是概率论和统计学中两个非常重要的概念。下面将分别对这两个概念进行解释。 数学期望 数学期望是随机变量的平均值&#xff0c;它描述了随机变量的中心位置。对于离散随机变…...

【面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍Tensor RT 的优化流程。

【面试AI算法题中的知识点】方向涉及&#xff1a;ML/DL/CV/NLP/大数据…本篇介绍Tensor RT 的优化流程。 【面试AI算法题中的知识点】方向涉及&#xff1a;ML/DL/CV/NLP/大数据…本篇介绍Tensor RT 的优化流程。 文章目录 【面试AI算法题中的知识点】方向涉及&#xff1a;ML/D…...

BLDC无感控制的驱动逻辑

如何知道转子已经到达预定位置&#xff0c;因为我们只有知道了转子到达了预定位置之后才能进行换相&#xff0c;这样电机才能顺滑的运转。转子位置检测常用的有三种方式。 方式一&#xff1a;通过过零检测&#xff0c;三相相电压与电机中性点电压进行比较。过零检测的优点在于…...

BP神经网络的反向传播算法

BP神经网络&#xff08;Backpropagation Neural Network&#xff09;是一种常用的多层前馈神经网络&#xff0c;通过反向传播算法进行训练。反向传播算法的核心思想是通过计算损失函数对每个权重的偏导数&#xff0c;从而调整权重&#xff0c;使得网络的预测输出与真实输出之间…...

[实用指南]如何将视频从iPhone传输到iPad

概括 将视频从 iPhone 传输到 iPad 时遇到问题&#xff1f;您可能知道一种方法&#xff0c;但不知道如何操作。此外&#xff0c;您要传输的视频越大&#xff0c;完成任务就越困难。那么如何将视频从 iPhone 传输到 iPad&#xff0c;特别是当您需要发送大视频文件时&#xff1f…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

spring Security对RBAC及其ABAC的支持使用

RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型&#xff0c;它将权限分配给角色&#xff0c;再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...