STM32G431RBT6——(2)浅析Cortex-M4内核

        本篇博客是一个对Cortex-M4内核了解性的简介,不会涉及到深奥的理论,请大家放心食用。

        我们所学习的STM32G431RBT6单片机是基于ARM的Cotex-M4内核,因此我们有必要对此内核做一个大概了解。其实M4内核和M3内核有很大的相似之处,很多资料也都将其放在一起去说,我们这里也先了解一下M3的内核,请看图:

        这个图就向我们展示了ARM公司的M3内核,对于这样的内核,和我们用到的芯片,比如STM32F103C8T6,有什么关系呢? 

1.内核与芯片的制造关系

         请看下面这张图:

 

        你是不是以为一个芯片,上面有某个公司的商标,就是完全由这个公司生产的?这样的理解是片面的。

        请看上图,以ST公司的STM32系列(如F1/F4)为例,我们可以清晰看到半导体产业链的分工协作关系。ARM公司作为IP核设计商,提供标准化的处理器核心解决方案——即图中蓝色区域(Cortex-M3内核)及紫色区域(调试系统)。芯片厂商如ST则基于ARM授权的IP核,进行芯片级集成设计,具体包括:

  1. 外设开发:根据市场需求添加GPIO、UART、ADC、定时器等专用模块;

  2. 存储配置:设计Flash、SRAM的容量与布局;

  3. 时钟与电源管理:定制PLL、低功耗模式等电路;

  4. 物理实现:完成芯片的物理层设计(如制程选择、引脚排布)与封装测试。

这些东西结合在一起,才形成了我们使用的芯片。 

这种模块化分工的优势在于:

  • ARM专注核心架构创新:持续优化处理器性能与能效比;

  • 芯片厂商快速定制:通过调整外设组合,灵活满足工业、消费电子等不同领域需求(如F1侧重基础控制,F4强化DSP性能)。

2. Cortex-M3内核内部简介

我们把那个内核放大看,其实就是右边这个绿框框里的东西:

 

        我们只需要大概知道里边有什么,可以看到,包括NVIC,取指单元,指令译码寄存器组,存储器接口,ALU,调试系统等,这里的一些东西我们后边会用到,比如NVIC,是管理STM32中断的,我们后边再说,想深入了解这个内核的工作原理,需要了解一些微机原理的计数,由于笔者微机原理学的不好,只能讲个大概:

        首先我们要知道,内核不就是CPU吗,CPU的作用是什么,CPU的作用就是执行程序,而我们单片机的程序都在哪呢,都在闪存flash里放着,CPU怎么将程序拿过来呢?CPU是通过总线将程序从flash里拿过来的,而执行这个过程的就是取指单元,取到指令后,要知道这段指令是干什么的,就要对指令进行解码,此时就需要指令解码器,知道指令后肯定要进行执行啊,比如1+1,这里的运算就是算术逻辑单元ALU的工作了,当然算出来结果是2,肯定要找一个地方放着,就放到寄存器组里,然后结果再转移到外部的存储器系统比如RAM,如此一直循环。大概是这个意思,更严谨我也不会。

3.Cortex-M4内核 

        其实M4和M3内核基本一模一样,包括工作的基本原理,其实你看明白了M3内核,M4内核自然都明白了。

这个就是M4内核的图,下面我们将其与M3内核放一起对比: 

 

 

可以看到M3和M4内核再其他部分是一摸一样的,只有画红框的部分不一样,M4比M3多了一个DSP和一个FPU,这两个东西是什么意思呢?

(1) 浮点单元(FPU)

  • 浮点单元(FPU, Floating-Point Unit)是一个硬件模块,用于加速浮点数运算的执行,特别是在涉及到浮点加法、减法、乘法、除法等运算时。FPU将浮点运算的处理从软件实现转移到硬件中,从而显著提高了运算速度,减少了CPU的负担。
  • Cortex-M4内核配备了单精度FPU,即它支持32位浮点数(符合IEEE 754标准)。通过硬件支持,Cortex-M4可以直接进行浮点数的加减乘除运算,而不需要像某些处理器那样通过软件仿真来实现浮点运算。
  • FPU的引入对于需要高精度数学计算的应用非常重要,如数字信号处理、科学计算、图形处理等。

(2)数字信号处理(DSP)

  • 数字信号处理(DSP, Digital Signal Processing)指的是对离散信号(如声音、图像、传感器数据等)进行数学处理的过程。DSP通常涉及对信号的分析、滤波、变换和其他类型的运算。它是通信、音频处理、图像处理等领域的核心技术。
  • Cortex-M4内核不仅支持浮点运算,还专门设计了DSP指令集,可以加速某些特定的信号处理算法。例如,Cortex-M4支持乘法累加指令(MAC)快速傅里叶变换(FFT)滤波器设计等操作,这些操作对于实时数字信号处理至关重要。
  • DSP指令集和FPU一起使Cortex-M4成为一种高效的信号处理平台,能够在不牺牲计算性能的情况下提供低功耗和高实时性。

(3)DSP和FPU的协同作用

  • Cortex-M4的内核结合了DSP指令集浮点单元(FPU),使得它既能够高效地进行整数型信号处理(如滤波器和卷积),也能够执行复杂的浮点型计算(如数字信号处理中的傅里叶变换和滤波)。
  • 这使得Cortex-M4内核非常适合需要进行高效数字信号处理和浮点计算的应用,例如音频处理、传感器数据分析、语音识别等。

        由此我们不难看出,单从内核层面上,M4内核就要比M3内核强大很多,而且在单片机层面上,G4系列的单片机其实是要强于F1系列的,举个例子F1系列主频72M,而G4系列主频达到了180M,两倍还多,这对于一些信号处理,比如ADC采集等就是降维打击,我是做电源的,G4系列在高精度数控电源方面还是很好用的。 

下面做了一张M3内核和M4内核的区别的表

 

4.CM4内核与STM32G431

(1)Cortex-M4内核的核心特性

        Cortex-M4是ARM公司设计的32位RISC处理器内核,专为高性能嵌入式实时应用设计,结合数字信号处理(DSP)浮点运算(FPU)**能力,适合复杂控制与信号处理场景。其核心特性包括:

  • ARMv7-M架构:哈佛结构(分离指令与数据总线),三级流水线,支持低延迟中断响应。

  • Thumb-2指令集:16/32位混合编码,兼顾代码密度与执行效率。

  • 单精度FPU(浮点单元):支持IEEE 754单精度浮点运算,加速数学运算(如PID控制、FFT)。

  • DSP扩展指令:SIMD(单指令多数据)、饱和运算、乘累加(MAC)指令,优化数字信号处理算法。

  • 嵌套向量中断控制器(NVIC):支持多达240个中断源,优先级可动态配置。

  • 低功耗模式:支持Sleep、Stop、Standby模式,适应电池供电场景。


(2)STM32G431ZET6芯片的关键特性

        STM32G431ZET6是STMicroelectronics基于Cortex-M4内核的高性能微控制器,属于STM32G4系列,专为数字电源、电机控制、高级传感等应用优化。其核心参数如下:

  a. 处理器与性能
  • 内核:Cortex-M4 @ 170 MHz(理论性能约213 DMIPS)。

  • FPU:集成单精度浮点单元(FPU)。

  • 数学加速器:STM32G4系列特有CORDICFMAC单元,加速三角函数、滤波等运算。

b. 存储器配置
  • Flash:512 KB(支持ECC校验)。

  • SRAM:128 KB(32 KB带ECC校验)。

  • 附加存储:16 KB CCM-SRAM(紧耦合内存,用于高速数据存取)。

c. 外设与功能模块
  • 高分辨率定时器(HRTIM):支持184 ps分辨率,用于数字电源开关控制(如LLC谐振变换器)。

  • 模拟外设

    • 4个12位ADC(5 Msps,支持硬件过采样)。

    • 2个12位DAC(支持波形生成)。

    • 4个运算放大器(OPAMP)和7个比较器(COMP),用于信号调理。

  • 通信接口

    • 6个USART/UART、3个SPI、3个I2C、2个CAN FD。

    • USB 2.0全速接口(支持无晶振设计)。

  • 电机控制专用外设

    • 6通道PWM定时器(支持死区插入、紧急关断)。

    • 硬件编码器接口(用于位置反馈)。

e. 安全与可靠性
  • 硬件加密:AES-128/256、HASH、RSA加速器。

  • 存储保护:Flash读保护(RDP)、写保护(WRP)。

  • 安全启动:支持安全固件更新(SB)。

f. 低功耗特性
  • 运行模式:低至100 µA/MHz(典型值)。

  • Stop模式:保留SRAM,电流低至10 µA。

  • Standby模式:最低2 µA(支持RTC唤醒)。


(3) STM32G431ZET6如何发挥Cortex-M4的优势

a. 高性能数字信号处理
  • 电机控制

    • 利用FPU加速磁场定向控制(FOC)算法。

    • 通过CORDIC单元快速计算电机角度(如Park/Clarke变换)。

  • 数字电源

    • 高分辨率HRTIM生成精确PWM,配合ADC实时反馈,实现闭环控制。

    • 使用FMAC单元加速数字滤波(如PID补偿器)。

b. 实时响应能力
  • 中断响应:NVIC支持低于10个时钟周期的中断延迟,确保PWM故障保护等硬实时需求。

  • 紧耦合内存(CCM-SRAM):关键代码/数据存放于CCM,避免总线争用,提升实时性。

c. 低功耗优化
  • 动态电压调节:通过电源管理单元(PWR)调整内核电压(1.2V~3.6V),平衡性能与功耗。

  • 外设时钟门控:按需启用外设时钟,减少待机能耗。


(4) 典型应用场景

  1. 工业电机驱动:BLDC/PMSM电机的高效控制(如无人机电调、工业机器人)。

  2. 数字电源:AC/DC转换器、无线充电、太阳能逆变器。

  3. 智能传感:结合ADC和OPAMP,实现高精度传感器信号采集(如电流/电压检测)。

  4. 音频处理:利用DSP指令加速音频编解码(如语音识别前端)。


(5)开发工具与资源

  • IDE:STM32CubeIDE(免费,集成STM32CubeMX配置工具)。

  • 软件库

    • STM32CubeG4 HAL库:提供外设驱动与示例代码。

    • DSP库:优化数学运算(如FFT、FIR滤波)。

  • 调试工具:ST-LINK/V3、J-Link(支持SWD/JTAG接口)。

  • 参考设计

    • STM32G4数字电源开发套件(STEVAL-DPSG4SIC)。

    • STM32G4电机控制应用笔记(AN5484)。

5.总结

        结合Cortex-M3内核学习M4,同时与M4内核对应的芯片结合起来,就能对M4内核产生一个基本的认识,如果想要深入学习,可以参考: Cortex-M3/M4权威指南

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25684.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python-leetcode-删除并获得点数

740. 删除并获得点数 - 力扣(LeetCode) 解法 1:动态规划(O(n) 时间,O(n) 空间) class Solution:def deleteAndEarn(self, nums: List[int]) -> int:if not nums:return 0# 统计每个数的贡献points Cou…

【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发-第4章 UART基础知识

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

git 强推

1、查看git版本 git --version 如果你已经安装了 Git,可以检查是否安装成功: 打开命令提示符(CMD)或 PowerShell。输入 git --version,如果安装成功,应该会显示 Git 的版本信息。 2、强推 git push or…

server.servlet.session.timeout: 12h(HTTP 会话的超时时间为 12 小时)

从你提供的配置文件(应该是 Spring Boot 的 application.yml 或 application.properties 文件)来看,以下部分与会话超时时间相关: server:servlet:session:timeout: 12h # timeout: 30cookie:name: VENDER_SID会话超时时间的…

【论文笔记-ECCV 2024】AnyControl:使用文本到图像生成的多功能控件创建您的艺术作品

AnyControl:使用文本到图像生成的多功能控件创建您的艺术作品 图1 AnyControl的多控制图像合成。该研究的模型支持多个控制信号的自由组合,并生成与每个输入对齐的和谐结果。输入到模型中的输入控制信号以组合图像显示,以实现更好的可视化。 …

x64汇编下过程参数解析

简介 好久没上博客, 突然发现我的粉丝数变2700了, 真是这几个月涨的粉比我之前好几年的都多, 于是心血来潮来写一篇, 记录一下x64下的调用约定(这里的调用约定只针对windows平台) Windows下的x64程序的调用约定有别于x86下的"stdcall调用约定"以及"cdecl调用约…

WSDM24-因果推荐|因果去偏的可解释推荐系统

1 动机 可解释推荐系统(ERS)通过提供透明的推荐解释,提高用户信任度和系统的说服力,如下图所示,然而: 1:现有工作主要关注推荐算法的去偏(流行度偏差),但未显…

深度解析 ANSI X9.31 TR-31:金融行业密钥管理核心标准20250228

深度解析 ANSI X9.31 TR-31:金融行业密钥管理核心标准 在当今数字化金融时代,信息安全至关重要,而密钥管理则是保障金融数据安全的核心环节。ANSI X9.31 TR-31作为金融行业密钥管理的关键标准,为对称密钥的全生命周期管理提供了坚…

Coredns延迟NodeLocalDNS解决之道

#作者:邓伟 文章目录 问题列表问题分析:问题分析解决方案详情方案验证部署步骤验证结论回滚方案回滚验证注意事项NodeLocalDNS介绍 问题列表 近来发现K8s频繁出现5s超时问题,业务反馈收到一定影响,问题包括: coredn…

Apollo Cyber 学习笔记

目录 0 Introduction What Why Advantage 1 Example 2 Concept 3 Flow Chart 4 Module 4.1 Transport 4.1.1 Share Memory 4.1.1.1 Segment 4.1.1.1.1 State 4.1.1.1.2 Block 4.1.1.1.3 Common 4.1.1.2 Notifier 4.1.1.2.1 ConditionNotifier 4.1.1.2.2 Multi…

正浩创新内推:校招、社招EcoFlow社招内推码: FRQU1CY

EcoFlow社招内推码: FRQU1CY 投递链接: https://ecoflow.jobs.feishu.cn/s/Vo75bmlNr6c

FreeRTOS-中断管理

实验目的 创建一个队列及一个任务,按下按键 KEY1 触发中断,在中断服务函数里向队列里发送数据,任务则阻塞接 收队列数据。 实验代码 实验结果 这样就实现了,使用中断往队列的发送信息,用任务阻塞接收信息

【通俗讲解电子电路】——从零开始理解生活中的科技(一)

导言:电子电路为什么重要? ——看不见的“魔法”,如何驱动你的生活? 清晨,当你的手机闹钟响起时,你可能不会想到,是电子电路在精准控制着时间的跳动;当你用微波炉加热早餐时&#…

无人机与AI!

一、技术革新:AI赋能无人机智能化 自主导航与避障 AI通过深度学习与计算机视觉技术,使无人机能够在复杂环境中实时分析飞行路径、预测障碍物并自主调整路线。例如,微分智飞推出的P300无人机可在无GPS信号的环境下完成自主导航,利…

基因型—环境两向表数据分析——品种生态区划分

参考资料:农作物品种试验数据管理与分析 用于品种生态区划分的GGE双标图有两种功能图:试点向量功能图和“谁赢在哪里”功能图。双标图的具体模型基于SD定标和h加权和试点中心化的数据。本例中籽粒产量的GGE双标图仅解释了G和GE总变异的53.6%,…

【江科大STM32】TIM输出比较(学习笔记)

本章图片文字内容也为重要知识,请马住! 输出比较简介 OC(Output Compare)输出比较输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形…

在Linux上安装MySQL

1.下载Linux版MySQL安装包 https://downloads.mysql.com/archives/community/ 2. 上传MySQL安装包 (FinalShell示例) 3. 创建目录,并解压 mkdir mysqltar -xvf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar -C mysql4. 安装mysql的安装包 cd mysqlr…

MyBatis的关联映射

前言 在实际开发中,对数据库的操作通常会涉及多张表,MyBatis提供了关联映射,这些关联映射可以很好地处理表与表,对象与对象之间的的关联关系。 一对一查询 步骤: 先确定表的一对一关系确定好实体类,添加关…

智能AI替代专家系统(ES)、决策支持系统(DSS)?

文章目录 前言一、专家系统(ES)是什么?二、决策支持系统(DSS)是什么?1.决策支持系统定义2.决策系统的功能与特点3.决策支持系统的组成 三、专家系统(ES)与决策支持系统(D…

C++学习之函数、指针、字符串

一.函数; 1.函数的定义和调用 2.函数的声明 3.函数的分类 4.函数的值传递 5.函数的分文件编写 //#define _CRT_SECURE_NO_WARNINGS //#include<stdio.h> //#include<string.h> //#include<stdlib.h> //#include "test.h" // // //int main() //{ …