hex 文件和 bin 文件剖析 @toc 在单片机开发中,hex 文件和 bin 文件是非常常见的两种烧写文件格式。比如在 Keil 中,编译好程序后,点击 Download 就可以把 hex 文件烧录到板子上。 而有时候在我们实现 IAP 时,有需要生成 bin 文件格式,再将其传输到单片机中,通过 Bootloader 将 bin 接收移到相应地址。 哪这两个文件有什么区别?为什么有时候用 bin,而有时候用 hex?本文 2024-09-30 嵌入式 #嵌入式
浅析 Keil 中的 sct 文件 [toc] 一、程序的存储与运行1、存储程序编译后,应用程序中所有具有同一性质的数据(包括代码)被归到一个域,程序在存储或运行的时候,不同的域会呈现不同的状态,这些域的意义如下: **Code**:即代码域,它指的是编译器生成的机器指令,这些内容被存储到 ROM 区。 **RO-data**:Read Only data,即只读数据域,它指程序中用到的只读数据,这些数据被存储在 ROM 区,因 2024-09-29 嵌入式 > STM32 #嵌入式 #STM32
FreeRTOS 内存管理源码解析 [toc] FreeRTOS 提供了 5 种不同的内存管理策略以应对不同的应用场景,本章将对这 5 种不同的内存管理策略的实现进行分析。 我参考的源码是:FreeRTOS-Kernel-10.4.3-LTS-Patch-3\portable\MemMang,该路径下记录了 heap_1.c、heap_2.c、heap_3.c、heap_4.c、heap_5.c,讲解会从这 5 个文件的源码入手 2024-09-28 嵌入式 > FreeRTOS #内存管理 #嵌入式 #FreeRTOS
Git 基本操作 [toc] 一、基本概念Git 是一种分布式版本控制系统,用于跟踪和管理代码的变更。它最初是由 Linus Torvalds 开发的,用于管理 Linux 内核的源代码。 Git 在软件开发中被广泛应用,尤其是在团队协作和开源项目中。通过使用 Git,开发人员可以更好地管理代码、协同工作、追踪问题和版本发布等。 1、工作区域Git 管理项目时,文件流转的三个工作区域:Git 的工作目录,暂存区 2024-09-26 工具 > Git #Git
STM32 时钟树(基于 STM32F407) [toc] 一、概述STM32 内部也是由多种多样的电路模块组合在一起实现的。当一个电路越复杂,在达到正确的输出结果前,它可能因为延时会有一些短暂的中间状态,而这些中间状态有时会导致输出结果会有一个短暂的错误,这叫做电路中的“毛刺现象”,如果电路需要运行得足够快,那么这些错误状态会被其它电路作为输入采样,最终形成一系列的系统错误。为了解决这个问题,在单片机系统中,设计时以时序电路控制替代纯粹的组 2024-09-25 嵌入式 > STM32 #嵌入式 #STM32
STM32 map 文件浅析 [toc] 一、概述.map 文件是编译器链接时生成的一个文件,它主要包含了交叉链接信息。通过 .map 文件,我们可以知道整个工程的函数调用关系、FLASH 和 RAM 占用情况及其详细汇总信息,能具体到单个源文件(.c/.s)的占用情况,根据这些信息,我们可以对代码进行优化。.map 文件可以分为以下 5 个组成部分: 程序段交叉引用关系(Section Cross References) 2024-09-24 嵌入式 > STM32 #嵌入式 #STM32
STM32 通过软件模拟 I2C 驱动 24Cxx 系列存储器 [toc] I2C 相关知识可以参考 IIC 通信协议详解 一、AT24CXXX 系列存储器介绍1、基本信息下表是 AT24CXXX 的容量: AT24C01,AT24C02,AT24C04,AT24C08,AT24C16,AT24C32,AT24C64,AT24C128,AT24C256… 不同的 xxx 代表不同的容量。 AT24CXXX bit容量 Byte容量 AT2 2024-09-23 嵌入式 > STM32 #嵌入式 #STM32 #I2C
STM32 通过 SPI 驱动 W25Q128 [toc] 有关 SPI 的内容在 SPI 通信协议详解,不熟悉的可以参考一下 我使用设备的是 STM32F407 + W25Q128 一、STM32 SPI 框图 1、通讯引脚这四个引脚想必大家也很熟悉了,就不过多介绍。我是用的是 SPI1,引脚如下: SPI1 是 APB2 总线上的设备,最高通信速率达 42Mbtis/s。 如下是 W25Q128 的引脚图: 所以连接方式为: 1 2024-09-21 嵌入式 > STM32 #嵌入式 #STM32 #SPI
BLE 协议之链路层 [toc] 一、前言在 BLE 协议之物理层 一文中,我简单介绍了 BLE 的物理层。接下来就是链路层(Link Layer)了,它主要的功能,就是在这些 Physical Channel 上收发数据,与此同时,不可避免的需要控制 RF 收发相关的参数。除此之外,还要做到以下几个功能: 通道共享 : Physical Layer 仅仅提供了有限的 40 个 Physical Channel 2024-09-20 通信协议 > BLE #通信协议 #BLE
STM32 芯片启动过程 @toc 一、前言下面主要讲解从上电复位到 main 函数的过程。主要有以下步骤: 初始化堆栈指针:SP = __initial_sp、PC = Reset_Handler 初始化中断向量表 配置系统时钟 调用 C 库函数 _main 初始化用户堆栈,然后进入 main 函数 二、STM32 的启动模式启动模式决定了中断向量表的位置,STM32 有三种启动模式: 主闪存存储器启动:从 ST 2024-09-18 嵌入式 > STM32 #嵌入式 #STM32