stm32初始化流程图解析

发布时间:2023-06-09  

  STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。

  stm32参数:

  12V-36V供电

  兼容5V的I/O管脚

  优异的安全时钟模式

  带唤醒功能的低功耗模式

  内部RC振荡器

  内嵌复位电路

  工作温度范围:-40°C至+85°C或105°C


  stm32特点:

  内核:ARM32位Cortex-M3 CPU,最高工作频率72MHz,1.25DMIPS/MHz。单周期乘法和硬件除法。

  存储器:片上集成32-512KB的Flash存储器。6-64KB的SRAM存储器。时钟、复位和电源管理:2.0-3.6V的电源供电和I/O接口的驱动电压。上电复位(POR)、掉电复位(PDR)和可编程的电压探测器(PVD)。4-16MHz的晶振。内嵌出厂前调校的8MHz RC振荡电路。内部40 kHz的RC振荡电路。用于CPU时钟的PLL。带校准用于RTC的32kHz的晶振。

  低功耗:3种低功耗模式:休眠,停止,待机模式。为RTC和备份寄存器供电的VBAT。


  tm32系统初始化流程:

  调试模式:串行调试(SWD)和JTAG接口。

  DMA:12通道DMA控制器。支持的外设:定时器,ADC,DAC,SPI,IIC和UART。

  3个12位的us级的A/D转换器(16通道):A/D测量范围:0-3.6V。双采样和保持能力。片上集成一个温度传感器

  2通道12位D/A转换器:STM32F103xC,STM32F103xD,STM32F103xE独有。

  最多高达112个的快速I/O端口:根据型号的不同,有26,37,51,80,和112的I/O端口,所有的端口都可以映射到16个外部中断向量。除了模拟输入,所有的都可以接受5V以内的输入。

  最多多达11个定时器:4个16位定时器,每个定时器有4个IC/OC/PWM或者脉冲计数器。2个16位的6通道高级控制定时器:最多6个通道可用于PWM输出。2个看门狗定时器(独立看门狗和窗口看门狗)。Systick定时器:24位倒计数器。2个16位基本定时器用于驱动DAC。

  最多多达13个通信接口:2个IIC接口(SMBus/PMBus)。5个USART接口(ISO7816接口,LIN,IrDA兼容,调试控制)。3个SPI接口(18 Mbit/s),两个和IIS复用。CAN接口(2.0B)。USB 2.0全速接口。SDIO接口。

  ECOPACK封装:STM32F103xx系列微控制器采用ECOPACK封装形式。


  STM32启动流程分析:

  无论是STM32、ARM系列的单片机,还是简单的如51,PIC等,都以为上述原因,需要启动程序,只不过51,PIC等单片机的启动程序已经在相应的IDE编译、链接的时候隐含的编译了,故在写单片机程序的时候无需考虑。而STM32的启动有相应的启动文件,本文将采用KEIL MDK自带的启动文件STM32F10x.s进行分析。

  1 启动模式的选择

  STM32芯片自带的启动方式有3种如下表

stm32初始化流程图解析

  STM32的启动选择,通过设置BOOT1、BOOT0的引脚的高低电平即可选择。其中主闪存启动是将程序下载到内置的Flash进行启动(该flash可运行程序),该程序可以掉电保存,下次开机可自动启动;系统存储器启动是将程序写入到一快特定的区域,一般由厂家直接写入,不能被随意更改或擦除。内置SRAM启动,由于SRAM掉电丢失,不能保存程序,一般只用于程序的调试。

  就程序的启动而言,采用以上3种方式启动,但对于一个嵌入式系统的程序来说,如果程序执行文件很大,而STM32内置的存储空间有限,就需要外置Nand flash/Nor flash 和SDRAM,即程序存储在flash中,程序执行在SDRAM中,既节约了成本有提高了运行效率。如果采用外置的Flash+SDRAM的方式,就需要一个更加复杂的启动文件(bootloader),需要考虑flash的COPY,Flash的驱动,内存的管理,通信机制等,本文暂不涉及此内容,以后有机会专门讲述。

  2 启动文件STM32F10x.s分析

  关于STM32F10x.s的启动文件,主要做了3个工作:分配和初始化堆、栈;定义复位向量并初始化;中断向量表及其相应的异常处理程序。

  2.1 定义堆、栈及其初始化

  堆和栈是能够运行C语言的前提,如以下程序:

  定义栈:

  Stack_Size EQU 0x00000200

  AREA STACK, NOINIT, READWRITE, ALIGN=3

  Stack_Mem SPACE Stack_Size

  __initial_sp

  定义堆:

  Heap_Size EQU 0x00000000

  AREA HEAP, NOINIT, READWRITE, ALIGN=3

  __heap_base

  Heap_Mem SPACE Heap_Size

  __heap_limit

  初始化堆、栈:

  _user_initial_stackheap

  LDR R0, = Heap_Mem

  LDR R1, =(Stack_Mem + Stack_Size)

  LDR R2, = (Heap_Mem + Heap_Size)

  LDR R3, = Stack_Mem

  BX LR

  2.2 定义复位向量

  Boot引脚的设置不同,复位时,起始地址的位置不同,SRAM的起始地址为0x2000000, flash的起始地址为0x8000000。Cortex-M3内核规定,起始地址必须存放堆定指针,而第二个地址必须存放复位中断入口向量。在系统复位时,内核会自动从其实地址的下一个地址(即32位)空间取出复位中断入口向量,然后跳转到复位中断服务程序,该服务程序就会跳转到main()执行程序。

  中断向量表(部分向量):

  __Vectors

  DCD __initial_sp ; Top of Stack // 初始化堆跳转

  DCD Reset_Handler ; Reset Handler // 复位中断向量跳转

  DCD NMI_Handler ; NMI Handler

  DCD HardFault_Handler ; Hard Fault Handler

  DCD MemManage_Handler ; MPU Fault Handler

  DCD BusFault_Handler ; Bus Fault Handler

  DCD UsageFault_Handler ; Usage Fault Handler

  DCD 0 ; Reserved

  DCD 0 ; Reserved

  DCD 0 ; Reserved

  DCD 0 ; Reserved

  DCD SVC_Handler ; SVCall Handler

  DCD DebugMon_Handler ; Debug Monitor Handler

  DCD 0 ; Reserved

  DCD PendSV_Handler ; PendSV Handler

  DCD SysTick_Handler ; SysTick Handler

  复位中断服务程序

  ; Reset Handler // 该程序会跳转到main()

  Reset_Handler PROC

  EXPORT Reset_Handler [WEAK]

  IMPORT __main

  LDR R0, =__main

  BX R0

  ENDP


  3 其他中断向量及服务子程序

  在启动文件中,只定义了中断向量,其相应的服务子程序跳转到空操作。为以后扩展中断服务程序做了准备。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>