![](https://img-blog.csdnimg.cn/e339177eeb6d4acc9849f88bfca3829a.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
MCU Basic
文章平均质量分 80
基础MCU知识
爱煲汤的夏二
嵌入式MCU小菜鸡
展开
-
寄存器组(堆栈指针寄存器小解)
主堆栈指针(MSP):这是缺省的堆栈指针,它由 OS 内核、异常服务例程以及所有需要特权访问的。R13 的最低两位被硬线连接到 0,并且总是读出 0,这意味着堆栈总是 4 字节对齐的。这里对入栈和出栈做个简单的介绍。POP 出栈操作:先从 SP 指针处读出上一次被压入的值,再把 SP 指针自增 4。大多数情况下的应用,只需使用指针 MSP,而 PSP 多用于 RTOS 中。进程堆栈指针(PSP):用于常规的应用程序代码(不处于异常服务例程中时)。应用程序代码来使用。原创 2024-06-25 16:32:18 · 137 阅读 · 0 评论 -
STM32H7的LTCD控制学习和应用
仅供个人学习,参考armfly。原创 2024-04-23 11:34:54 · 1388 阅读 · 0 评论 -
STM32H7中FMC高速读写SDRAM
这应该是根据芯片存储阵列电子元件响应时间(从一种状态到另一种状态变化的过程)所制定的延迟。tRCD 是 SDRAM 的一个重要时序参数,广义的 tRCD 以时钟周期数为单位,比如 tRCD=2,就代表延迟周期为两个时钟周期。具体到确切的时间,则要根据时钟频率而定,对于 STM32H7 驱动 SDRAM,采用的 200MHz,实际使用要做 2 分频,即 100MHz,那么我们设置 tRCD=2,就代表 20ns 的延迟。原创 2024-04-20 11:11:57 · 1320 阅读 · 0 评论 -
FMC总线应用控制32路高速IO扩展
仅供个人学习,来源于armfly。为什么要做 IO 扩展,不是已经用了 240 脚的 H743XIH6 吗?因为开发板使用了 32 位 SDRAM 和RGB888 硬件接口,消耗 IO 巨大,所以必须得扩展了。扩展的 32 路高速 IO 非常实用,且使用简单,只需初始下 FMC,32 路 IO 就可以随意使用了。当前的扩展方式只支持高速输出。FMC 总线扩展 32 路高速 IO 理解成 GPIO 的 ODR 寄存器就很简单了,其实就是一个东西。原创 2024-04-20 10:47:13 · 394 阅读 · 0 评论 -
STM32H7的ADC定时器触发配合定时器的DMA双缓冲
ADC_INP[0:19]和 ADC_INN[0:19]INP 是差分正向输入,INN 是差分反向输入。ADC_INP[0:5]和 ADC_INN[0:5]是快速通道。ADC_INP[6:19]和 ADC_INN[6:19]是慢速通道。共有 21 路触发用于规则通道,ADC1 和 ADC2 共用的,而 ADC3 是独立的。共有 21 路触发用于注入通道,ADC1 和 ADC2 共用的,而 ADC3 是独立的。adc_awd1,adc_awd2 和 adc_awd3。原创 2024-04-19 16:49:51 · 1182 阅读 · 0 评论 -
STM32H7的DMA双缓冲控制IO输出脉冲
【代码】STM32H7的DMA双缓冲控制IO输出脉冲。原创 2024-04-15 11:31:25 · 338 阅读 · 0 评论 -
STM32H7的DMAMUX
DMAMUX 其实就是 DMA 控制器前一级的多路选择器,有了这个选择器就不用再像 F1,F4 系列那样每个通道(数据流)要固定选择指定的外设,有了多路选择器就可以任意选择,外设使用 DMA 方式时无需再选择指定的 DMA 通道(数据流),任意通道(数据流)都可以。当前STM32H7有两路DMAMUX,分别是DMAMUX1和DMAMUX2,其中DMAMUX1负责DMA1和 DMA2,而 DMAMUX2 负责 BDMA。这张图反过来就好看多了。原创 2024-04-15 10:13:44 · 1025 阅读 · 0 评论 -
STM32H7定时器TIM1-TIM17中断、PWM实现
STM32H7 支持的定时器有点多,要简单的区分下。STM32H7 支持 TIM1-TIM8,TIM12-TIM17 共14 个定时器,而中间的 TIM9,TIM10,TIM11 是不存在的,这点要注意。原创 2024-04-13 17:13:48 · 1290 阅读 · 0 评论 -
STM32H7的8个串口fifo收发(兼容232和485)
uart驱动包括中断配置等应用示例RS485深入理解看armfly老哥的帖子:https://www.armbbs.cn/forum.php?mod=viewthread&tid=90753原创 2024-04-13 16:16:08 · 2382 阅读 · 0 评论 -
STM32H7在cache下的串口DMA收发demo
DMA使用的memory空间使能了Cache的话,空间要做32位字节对齐。同时为了保持数据一致性1、AXI RAM空间MPU直接设置为WT模式。2、DMA接收后,使用函数SCB_InvalidateDCache_by_Addr做接收缓冲区无效化。原创 2024-04-13 10:56:11 · 613 阅读 · 0 评论 -
STM32H7各块RAM的位置和作用
摘抄于armfly-V7开发板bsp手册,仅供个人学习。原创 2024-04-13 10:34:54 · 1261 阅读 · 0 评论 -
STM32H7将关键代码放在ITCM执行的方法
设置 DTCM 空间,前 0x400 大小的空间用于中断向量表,所以这里从 0x20000400 开始,用于各种变量需求。ITCM 的首地址是 0x0000 0000,大小 64KB。原创 2024-04-12 17:21:49 · 373 阅读 · 0 评论 -
TCM SRAM等五块内存的使用和动态分配
【代码】TCM SRAM等五块内存的使用和动态分配。原创 2024-04-12 16:48:24 · 230 阅读 · 0 评论 -
STM32H7的Cache学习和应用
如果 CPU 要写的 SRAM 区数据在 Cache 中已经开辟了对应的区域(专业词汇叫 Cache Line,以 32字节为单位),这就叫写命中(Cache hit),如果 Cache 里面没有开辟对应的区域怎么办,这就是所谓的写 Cache Miss。如果每次 CPU 要读写 SRAM 区的数据,都能够在 Cache 里面进行,自然是最好的,实现了 200MHz到 400MHz 的飞跃,实际是做不到的,因为数据 Cache 只有 16KB 大小,总有用完的时候。原创 2024-04-12 15:55:06 · 1009 阅读 · 0 评论 -
STM32H7的MPU学习和应用示例
MPU(Memory Protection Unit,内存保护单元),早在 STM32F1 和 F4 芯片上面也是有这个功能的,但是基本用不上。但是到了 H7 就得用上了,因为要设置 Cache。MPU 可以将 memory map 内存映射区分为多个具有一定访问规则的区域,通过这些规则可以实现如下功能:◆ 防止不受信任的应用程序访问受保护的内存区域。◆ 防止用户应用程序破坏操作系统使用的数据。◆ 通过阻止任务访问其它任务的数据区。◆ 允许将内存区域定义为只读,以便保护重要数据。原创 2024-04-12 15:25:33 · 1224 阅读 · 0 评论 -
NVIC中断分组和配置
另外特别注意一点,配置抢占优先级和子优先级,它们合并成的4bit 数字的数值越小,优先级越高,这一点千万不要搞错了。⚫ 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断服务程序执行过程中被响应,即中。⚫ 在抢占式优先级相同的情况下,有几个子优先级不同的中断同时到来,那么高子优先级的中断优。⚫ 在抢占式优先级相同的情况下,如果有低子优先级中断正在执行,高子优先级的中断要等待已被。也就是没有抢占式优先级,只有子优先级。断嵌套,或者说高抢占式优先级的中断可以抢占低抢占式优先级的中断的执行。原创 2024-04-12 14:42:55 · 422 阅读 · 0 评论 -
嵌入式C语言编码规范
(5) if、for、while、switch 等与后面的括号间应加空格,使 if 等关键字更为突出、明显,函数名与其后的括号之间不加空格,以与保留字区别开。(2)比较操作符,赋值操作符"=“、 “+=”,算术操作符”+“、”%“,逻辑操作符”&&“、”&“,位域操作符”原创 2024-03-30 14:53:57 · 1075 阅读 · 0 评论 -
GPIO的基础知识
首先对于GPIO我们需要注意以下几点。原创 2024-03-29 14:39:41 · 1124 阅读 · 0 评论 -
STM32H7的boot启动模式
跟F1和F4不同的是,H7的启动方式只有一个boot引脚,但是这个引脚只能区分两种状态,因此H7配套了两个option bytes选项字节配置,◆ 如果用户不慎,设置的地址范围不在有效的存储器地址,那么 BOOT = 0 时,会从 Flash 首地址0x0800。设置了选项字节后,掉电不会丢失,下次上电或者复位后,会根据 BOOT 引脚状态从 BOOT_ADD0,0000 启动,BOOT = 1 时,会从 ITCM 首地址 0x0000 0000 启动。或 BOOT_ADD1 所设置的地址进行启动。原创 2024-03-29 11:19:25 · 649 阅读 · 0 评论 -
MicroLib小解一下
MicroLib 是一个高度优化的库,用于用 C 编写的基于 ARM 的嵌入式应用程序。与 ARM 编译器工具链中包含的标准 C 库相比,MicroLib 提供了许多嵌入式系统所需的显著代码大小优势。__initial_sp 表示栈顶地址,__heap_base表示堆起始地址,__heap_limit 表示堆结束地址。没有定义__MICROLIB,实际的情况就是我们没有定义__MICROLIB,所以使用默认的 C 库运行。MicroLib 经过优化,与使用 ARM 标准库相比,使用更少的代码和数据存储器。原创 2024-03-29 10:56:54 · 574 阅读 · 0 评论 -
STM32H7VI电源、复位、时钟
主要看 Operating mode 部分,依次是 Power down –> Reset -> Wait Oscillator ->HW system init -> Run -> Wait ACTVOS RDY –> Run,即断电状态 -> 复位状态 -> 等待 HSI 就绪->硬件初始化 -> 运行 -> 等 ACTVOS 位就绪 -> 正式运行。本质上是给硬件复位发送了一个复位信号。原创 2024-02-22 17:24:24 · 984 阅读 · 0 评论 -
keil5废了怎么卸载干净
在HKEY_CLASSES_ROOT下。进入控制面板卸载keil5。原创 2024-02-22 12:17:59 · 4770 阅读 · 0 评论 -
STM32H743xI总线解析(AXI重点)
ASIB连接的主控协议总线带宽读/写发起能力IN1D2 域的 AHB 总线AHB-lite321/4IN2Cortex-M7AXI4647/32IN3SDMMC1AHB-lite321/4IN4MDMAAXI4644/1IN5DMA2DAXI4642/1IN6LTDCAXI4641/1ASIB连接的从设备协议总线带宽读/写发起能力/总接收能力TARG1D3 域的 AHB 总线AXI4321/1/1TARG2。原创 2024-02-21 15:10:20 · 1093 阅读 · 0 评论 -
stm32H7选型(根据官网和文档)
在STM32H7官网中我们可以找到以下图,对stm32各个型号有一个基本的介绍。我们随便下一个文档,比如我这里用的是STM32H743VI系列的,就直接从文档中找到Table2,可以知道STM32H743XI/G的详细外设介绍。综上述方式我们可以对STM32H7的型号种类有一定的了解,来帮助我们进行选型。原创 2024-02-21 14:29:41 · 452 阅读 · 0 评论 -
STM32如何判断进debug?今天帮你把debug寄存器全弄懂,附上验证过程
我们可以通过DHCSR的C_DEBUGEN位来判断此时是否正在进行调试,与是否正断点和暂停无关。最后写出的判断代码如下。原创 2024-02-01 14:36:52 · 1403 阅读 · 0 评论 -
KEIL-MDK 代码格式化统一风格
我们在使用编辑器的缩进(TAB)功能时,由于不同编辑器的差别,有的插入的是制表符,有的是2个空格,有的是4个空格。为了解决这个问题,使用C++开发了一个插件,它可以自动重新缩进,并手动指定空格的数量,自动格式化源文件。它是可以通过命令行使用,也可以作为插件,在其他IDE中使用。使用 keil(MDK) 的代码编辑器编辑时,每次都是手动调整格式,这样既麻烦又容易格式不统一,实在不能忍受,所以我们就介绍一个叫做 Astyle 的神奇工具,它可以方便的将程序代码格式化成自己想要的样式而不必人工修改。原创 2024-01-27 11:28:06 · 863 阅读 · 0 评论 -
MCU启动文件小解一下
启动文件解析,参考了许多资料原创 2024-01-27 10:21:31 · 1051 阅读 · 0 评论 -
MDK编译出来一大堆神魔文件到底是啥?今天帮你全弄懂!
MDK 编译工程,会生文件(如.o、.axf、.map 等),最终生成 hex 文件和bin文件,以便下载到 MCU 上面执行。对于 MDK 工程来说,基本上任何工程在编译过程中都会有这 11 类文件,常见的 MDK编译过程生产文件类型原创 2024-01-25 10:55:53 · 956 阅读 · 0 评论