- 博客(15)
- 收藏
- 关注
原创 简单理解STM32内存分配与堆栈(下)
本篇文章以STM32F407为例进行讲解,其他STM32芯片的结构其实都大差不差,可以参考本文进行理解。.data 段是已初始化数据段,存放的是已初始化的全局变量和静态变量。这些变量在编译时就有确定的初始值,但 SRAM 是易失性存储器,断电后数据会丢失,因此这些初始值必须保存在 Flash 中。在系统启动时,Reset_Handler 会将 Flash 中的初始值拷贝到 SRAM 中对应的 .data 段。.bss 段是未初始化数据段,存放的是未初始化的全局变量和静态变量。
2026-09-10 15:04:41
324
原创 简单理解STM32内存分配与堆栈(上)
本篇文章上下两篇,以STM32F407为例进行讲解,其他STM32芯片的结构其实都大差不差,可以参考本文进行理解。Block地址范围名称用途Block0Code 代码区Flash、系统存储器、OTP 选项字节,BOOT 引脚决定重映射到哪个存储器Block1SRAM内部 RAM:主 SRAM、CCM‑RAMBlock2Peripherals 外设APB1/APB2/AHB 外设寄存器(GPIO、USART、SPI 等)Block3外部 SRAM/NOR FlashBlock4。
2026-09-10 14:56:35
224
原创 简单理解函数调用:栈帧(Stack Frame)与内存布局简单
下面用“栈帧(stack frame)”的视角,分享函数调用时内存如何变化、参数如何传递。先说明:不同 CPU、编译器、优化级别、操作系统 ABI 的细节不同。现代 64 位系统里,参数通常优先走寄存器,不一定真的全部压栈。但“调用栈 / 栈帧”的整体模型仍然非常重要。栈是一种后进先出的内存结构。可以把它想象成一摞盘子:最后放进去的盘子,最先拿出来。函数调用时,当前函数使用一块栈空间,这一块空间称为:栈帧,Stack Frame。内容说明返回地址call指令压入,ret。
2026-09-01 10:23:50
312
原创 ESP32------开发环境配置(VS Code + ESP-IDF )
本专栏将以 ESP32-S3 + VS Code + ESP-IDF 为主要开发组合,记录我从零开始学习嵌入式开发的过程。第一篇文章的目标不是马上完成复杂功能,而是先搭建一套稳定、可复用的开发环境,为后续学习 GPIO、、Wi-Fi、蓝牙、FreeRTOS、多任务以及屏幕、传感器等外设打下基础。
2026-08-07 15:15:42
296
原创 FreeRTOS 系列分享(一):任务管理
RTOS(实时操作系统)为嵌入式系统提供了多任务管理能力,通过任务调度实现CPU的分时复用。相比裸机开发,RTOS在复杂系统和实时性要求高的场景中优势明显,能提升代码模块化和开发效率。FreeRTOS将任务分为运行、就绪、阻塞和挂起四种状态,通过时间片轮转和优先级抢占实现任务调度。任务管理涉及创建、删除、挂起、恢复等操作,并提供了vTaskDelay()等延时函数。RTOS通过任务控制块和栈空间管理任务状态,使开发者能更高效地构建复杂的嵌入式应用系统。
2026-02-25 22:26:18
809
原创 HAL库STM32常用外设—— CAN通信(一)
1986年,德国从事汽车电子产品开发的BOSCH公司开发出面向汽车电子设备网络化控制的CAN通信协议。为此,CAN通过ISO11898以及ISO11592-2进行了标准环,成为一种国际标准。现在,CAN的高性能和可靠性已被认可,并被广泛应用于船舶、医疗设备、工业设备灯方面,特别是在汽车的控制方面,已经成为汽车网络的标准协议。作为一种串行通信总线,如同I2C总线协议一样,CAN总线也有物理层定义和传输协议定义。
2025-03-14 14:50:29
4224
原创 HAL库STM32常用外设教程(三)—— USART/UART通信
单片机的串口阻塞式接收模式是指在接收数据时,程序会暂停执行直到接收到所需的数据为止。在这种模式下,接收函数会等待数据到达并阻塞主程序的执行,直到串口接收缓冲区中有数据可供读取。中断式串口接收机制基于STM32的硬件中断特性,当串口接收到数据时自动触发CPU中断,即时处理接收数据,无需CPU主动轮询,提高了CPU的处理效率。串口DMA的原理是通过DMA控制器直接在内存和串口之间传输数据,而无需CPU干预。
2024-07-26 14:31:30
5259
原创 HAL库STM32常用外设教程(九)—— I2C通信(读写EEPROM)
I2C(Inter-Integrated Circuit)接口,有时也写作IIC,是一种串行数字总线接口。I2C接口只有两根信号线,总线上可以连接多个设备,硬件实现简单,可拓展性强。I2C通信协议可以通过普通GPIO引脚进行软件模拟。I2C接口主要用于通信速率要求不高,以及多个器件之间通信的应用场景。本文讲解了I2C的基础知识,其中涉及了I2C的通信原理、HAL库驱动程序、I2C的三种发送模式(轮询(阻塞)、中断、DMA)。
2024-03-30 15:34:40
28122
1
原创 HAL库STM32常用外设教程(八)—— SPI (读写W25Q128)
串行外设接口(Serial Peripheral Interface,SPI)是一种传输速率比较高的串行接口,一些ADC芯片、Flash存储器芯片采用SPI接口,MCU通过SPI接口与这些外围器件通信。通过本文讲解了SPI通信,其中涉及了SPI的原理、HAL库的相关驱动函数,其中涉及了SPI轮询、中断、DMA三种方式。然后又通过Flash芯片W25Q128作为示例来讲解SPI通信,讲解了W25Q128的部分指令,轮询方式读写W25Q128,其中涉及的SPI的CubeMx配置应当熟悉掌握。
2024-03-28 21:13:20
13776
3
原创 HAL库STM32常用外设教程(七)—— ADC
2、STM32CubeMx软件3、keil5内容简述:通篇文章将涉及以下内容,如有错误,欢迎指出1、ADC基本原理2、轮询、中断、DMA方式下的ADC采集ADC 即模拟数字转换器,英文详称 Analog-to-digital converter,可以将外部的模拟信号转换为数字信号,是模拟信号数字化的必要器件。STM32F407有3个ADC,最高12位分辨率,最多16个外部通道,ADC1还有3个内部测量通道,可以测量内部温度、参考电压和备用电池电压。
2024-01-27 20:00:59
11143
10
原创 HAL库STM32常用外设教程(六)——定时器 输入捕获
2、STM32CubeMx软件3、keil5内容简述:通篇文章将涉及以下内容,如有错误,欢迎指出:定时器有关输入捕获的HAL库驱动程序(1)CubeMx配置(2)TIM驱动程序(3)输入捕获检测方波占空比(4) 输入捕获检测PWM频率和占空比(5)用定时器ETR方式计算PWM脉冲数有关于定时器输出PWM功能HAL库STM32常用外设教程(一)—— 定时器 输出PWM有关于定时器定时功能+基础定时器特性HAL库STM32常用外设教程(四)—— 定时器 基本定时。
2024-01-26 11:43:23
18784
17
原创 HAL库STM32常用外设分享(四)—— 定时器 基本定时
2、STM32CubeMx软件3、keil5内容简述:通过本篇内容您将学到1、基础定时器特性2、基础定时器的结构和功能3、基础定时器HAL库驱动程序(1)CubeMx配置(2)TIM驱动程序STM32F407有2个高级控制定时器(TIM1、TIM8)、8个通用定时器和2个基本定时器。基本定时器功能比较简单,只能用于定时,通用定时器和高级定时器还具有输入捕获、输出比较、PWM输出等功能。定时器类型定时器计数器长度计数类型DMA请求捕获/比较通道数所在总线基本定时器。
2023-12-10 16:53:12
18429
8
原创 HAL库STM32常用外设分享(二)—— GPIO输入\输出
2、STM32CubeMx软件3、keil5内容简述:通过本篇内容您将学到GPIO的8个工作模式1、GPIO功能概述2、GPIO的HAL库驱动3、GPIO使用示例(1)CubeMx配置(2)GPIO驱动程序STM32F407ZG有8个16引脚的GPIO端口,从PA到PH,还有一个12引脚的PI端口,这些IO端口都连接在APB1总线上,最高时钟频率168MHz,GPIO引脚能承受5V电压,作为GPIO引脚使用时,我们可以输入或输出数字信号。
2023-12-03 21:04:04
7972
原创 HAL库STM32常用外设分享(一)—— 定时器 输出PWM
本篇文章为个人参考总结所用,如果错误还望指出。涉及的知识:1、STM32CubeMx的部分使用2、PWM原理及常用概念3、用单片机生成一定频率的PWM用到的软件及单片机:2、IDE: MDK-Keil软件3、芯片:STM32F407ZGT64、开发板:正点原子探索者注:不同型号的单片机实现的原理基本相似,F1实现过程同理(1)出现的问题CubeMxz生成的代码时钟频率是25MHZ,在此频率下观察到的方波如下:此时虽然可以生成PWM,但是生成的PWM频率和周期不正确。
2023-06-23 13:14:06
17025
19
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅