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

GCC环境下STM32启动流程

前言

单片机在进入main之前依然是有很多初始化步骤的, 并非直接从main开始执行, 在此之前需要设置很多寄存器, 比如堆栈指针, 中断向量表, 时钟等等, 这些操作在启动文件中完成. 不过我们日常开发是不用去管这里的东西的.

STM32在GCC环境下的启动文件及流程

硬件及软件开发平台:

  • MCU: STM32F411CEU6
  • 开发平台: CLion + STM32CubeMX + GCC

说明: GCC编译工具下的启动文件和以Keil为主的MDK环境是有区别的, 不过依然是换汤不换药, 流程依然是一样的.
GCC环境下, 有两个启动文件, 一个是以类似startup_stm32f411xe.s后缀的文件, 另一个是STM32F411CEUx_FLASH.ld这种的文件.

image

.ld文件声明的内容

声明程序入口, 设置堆栈大小

部分关键代码截图, 按照文件顺序来, 解释见旁边注释
1

声明各个段, 具体分配代码中各钟类型的数据

下面就是SECTIONS部分, 这一部分则对于各种数据究竟是分配给RAM还是FLASH或者是FLASH移动到RAM一一进行了分配. 看下面这张图, 这里我省去了具体的分配过程.
2

.s文件

.s文件使用了在ld文件声明的变量, 是单片机启动前走的流程, 主要指定了汇编器的编译规则, 实现Reset_Handler函数, 定义中断向量表

开头配置

开头主要是配置,让汇编器按照Cortex-M4和Thumb-2指令集编译代码, 声明中断向量表的基地址默认中断处理函数这两个符合, 可以让我们在外部的.c文件中调用, 从而编辑各种中断
3

复位中断(Reset_Handler)的具体实现

复位中断才是单片机上电/复位第一个执行的代码, 完成了STM32内存分配
首先则是把链接文件.ld 声明的变量拉过来, 这些变量在上面都有说明, 值得一提的是, 变量的第二个字母s表示起始start , e表示结束end也就是起始地址和结束地址
image-2

下面是Reset_Handler, 各代码段的作用见注释
主要流程为是设置栈顶指针->系统时钟初始化->循环将FLASH的.data移动至RAM->初始化.bss段->设置main函数为起始函数
image-3

中断向量表的定义

这里就不在这里展示了, 中断比较多, 值得一提的是, 这里的中断向量大致可以分为两类, 地址比较靠前的是系统中断比如Reset_Handler, HardFault_Handler, 然后才是外设中断 就是我们常用的 EXTI1_IRQHandler, TIM2_IRQHandler 等等

   .section  .isr_vector,"a",%progbits.type  g_pfnVectors, %objectg_pfnVectors:.word  _estack.word  Reset_Handler.word  NMI_Handler.word  HardFault_Handler.word  MemManage_Handler.word  BusFault_Handler.word  UsageFault_Handler.word  0.word  0.word  0.word  0.word  SVC_Handler.word  DebugMon_Handler.word  0.word  PendSV_Handler.word  SysTick_Handler/* External Interrupts */.word     WWDG_IRQHandler                   /* Window WatchDog              */                                        .word     PVD_IRQHandler                    /* PVD through EXTI Line detection */                        .word     TAMP_STAMP_IRQHandler             /* Tamper and TimeStamps through the EXTI line */            .word     RTC_WKUP_IRQHandler               /* RTC Wakeup through the EXTI line */                      .word     FLASH_IRQHandler                  /* FLASH                        */                                          .word     RCC_IRQHandler                    /* RCC                          */                                            .word     EXTI0_IRQHandler                  /* EXTI Line0                   */                        .word     EXTI1_IRQHandler                  /* EXTI Line1                   */                          .word     EXTI2_IRQHandler                  /* EXTI Line2                   */                          .word     EXTI3_IRQHandler                  /* EXTI Line3                   */                          .word     EXTI4_IRQHandler                  /* EXTI Line4                   */        
..............

以上便是这篇文章的所有内容了,本人只是一个正在学习驱动开发的萌新,如果有什么错误欢迎大家私信讨论

http://www.jsqmd.com/news/58013/

相关文章:

  • 2025年比较好的快速温变试验箱厂家选购指南与推荐
  • mysql: 导出单个数据表到sql文件时报错
  • 2025年玻璃钢电力盖板订做厂家权威榜单:耐酸碱污水池盖板/模压玻璃钢盖板/污水池密闭加盖实力厂家精选
  • 2025年知名的不锈钢合页/钢质门不锈钢合页厂家最新权威实力榜
  • 扣子Coze变现实战:一天产出50条爆款书单视频,每月躺赚5位数,免费分享!
  • 实验四-组合与继承
  • 2025年12月DeepSeek优化排名公司推荐榜:技术深耕者的精准选型指南
  • 2025年比较好的丝杆升降机行业内知名厂家排行榜
  • 界面控件DevExpress WPF v25.1新版亮点:富文本编辑器全新升级
  • QWEN-CLI备忘
  • 2025年热门的玉米糁面粉机厂家最新实力排行
  • 2025年热门的高压动态无功补偿柜/无功补偿滤波装置厂家最新热销排行
  • 2025年五大气密性检测仪品牌排行榜,合肥远智气密性检测仪
  • 我发现导员最喜欢的学生人设
  • 2025最新古木家具、明清家具、黄花梨紫檀红木回收交易公司权威榜单
  • 昆明婚纱摄影店大评测!实测,避坑指南在此!
  • 2025年正规的武汉装修整装环保家装优选榜
  • 2025 年 12 月常州软件开发公司权威推荐榜:常州小程序开发、常州APP开发,常州匠心定制与创新技术实力深度解析
  • 2025年知名的全案整装衣柜灯实力厂家TOP推荐榜
  • 2025年口碑好的山东隔热条最新TOP厂家排名
  • Linux Docker部署
  • 辅导员说,能成事的学生都有这些特质
  • 2025年口碑好的无毒钛杯/耐高温钛杯厂家推荐及选购参考榜
  • NFS挂载
  • 2025年知名的热熔opp束带厂家最新用户好评榜
  • 2025年知名的四川不锈钢水箱公司实力排行榜
  • mysql drop database 无法备份恢复思路
  • 成都靠谱的喷泉设计施工厂家推荐 —— 必清环境技术(成都)有限公司
  • Latex的安装
  • 2025年优质的双面封箱胶带/警示封箱胶带厂家推荐及选购指南