STM32启动文件选择的区别

2020-07-01来源: eefocus关键字:STM32  启动文件  区别

说的直白点就是以下区别,在选择启动文件的时候有选择性区别!


startup_stm32f10x_cl.s

互联型的STM32F105xx,STM32F107xx

startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx

startup_stm32f10x_hd_vl.s 大容量的STM32F100xx

startup_stm32f10x_ld.s 小容量的STM32F101xx,STM32F102xx,STM32F103xx

startup_stm32f10x_ld_vl.s 小容量的STM32F100xx

startup_stm32f10x_md.s 中容量的STM32F101xx,STM32F102xx,STM32F103xx

startup_stm32f10x_md_vl.s 中容量的STM32F100xx

startup_stm32f10x_xl.s 超大容量FLASH在512K到1024K字节的STM32F101xx,STM32F102xx,STM32F103xx


疑问一:为什么需要选择启动文件?


1.建立中断服务入口地址,即把中断向量与中断服务函数链接起来。


我们知道在串口NVIC配置中我们只定义了个 NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;


也就是中断服务向量,再然后我们在stm32f10x_it.c文件的void USART2_IRQHandler(void){} 函数里添加串口的服务程序。


 但是mcu怎么知道中断向量USART2_IRQn对应的是USART2_IRQHandler(){}呢,这个就是启动文件所起的作用。


在启动文件 .s 中 以 g_pfnVectors: 开头。


2.从systeminit()函数进入到main()函数.


对于stm32我们定义系统时钟的时候直接在system_stm3210x.c文件里修改宏定义即可,而事实上到底是从哪开始执行的呢?


system_stm3210x.c文件里有个SystemInit()函数,就是对时钟的设置。


而这个SystemInit()在哪调用的呢,就是启动文件先调用了,然后才进入到mian()函数。


在启动文件 .s 中有以下一段话可以解释。


/* Call

the clock system intitialization function.*/


bl SystemInit


/* Call static constructors */


bl __libc_init_array


/* Call the application’s entry point.*/


bl main


bx lr

3.有些启动文件定义了堆栈大小,可以在这里进行修改。(有些是在 .ld 进行定义的)


疑问二:这些文件在哪里?


 打开官方库文件,可以了解到STM32F10x_StdPeriph_lib/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup


 下有4个文件夹arm  gcc_ride7  iar  TrueSTUDIO


 到底选择哪个文件夹呢?  这与编译器有关,不同的编译器调用的指令集是不同的,所以需谨慎选择


arm适用于arm编译器 gcc_ride7适用基于GCC_ride7编译器的 iar就不用说了都清除 TrueSTDIO是ST自己的编译器当然也是基于GCC的用MDK于eclipse可以使用


(在eclipse下用的GCC插件的话,需要把后缀名 .s 改为 .S成大写,不然会编译出错)


疑问三:怎么选择101xx 102xx 103xx是小容量、中容量还是大容量?


查user manual手册,以下为摘录


可以这么认为:flash容量<=32k 选择 ld


64k<= <=128k 选择 md


   256<=   <=512k     选择  hd


那怎么区分MCU是多大的flash容量呢?


可以参考下表对于芯片命名说明:Flash memory size


6:32K 8:64K

B:128K C:256K

D:384K E:512K Flash memory size!


关键字:STM32  启动文件  区别 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic501784.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:关于stm32f1使用ST官方DSP库中的FFT方法
下一篇:怎么使用stm32写IAP的bootloader和APP

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

关于STM32CubeMx printf重定向,及报错。"FILE" is undefined
PFP *//* USER CODE BEGIN 0 */PUTCHAR_PROTOTYPE{    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);    return ch;}/* USER CODE END 0 */ 这样写会报错"FILE" is undefined  添加头文件 stdio.h即可
发表于 2020-06-06
【STM32】keil MDK下重定向printf到串口(基于STM32CubeMX)
概述在keil MDK环境下重定向printf与keil C51不同,由于本人使用了STM32CubeMX生成工程模板,HAL_USART_Transmit函数即是模板里串口输出的函数。由于printf最终是调用fputc输出数据,fputc是一个弱引用(weak)函数,覆写即可重定向printf。代码清单extern USART_HandleTypeDef husart1;int fputc(int ch, FILE *f) {    HAL_USART_Transmit(&husart1, (uint8_t *)&ch, 1, 0xFFFF);    return ch
发表于 2020-06-06
STM32CubeMx启动串口调试功能Printf调试
## 概述项目中往往需要调试信息,调试stm32的时候,需要标准库里面的printf函数。在keil MDK环境下重定向printf与keil C51不同,由于本人使用了STM32CubeMX生成工程模板,HAL_USART_Transmit函数即是模板里串口输出的函数。由于printf最终是调用fputc输出数据,fputc是一个弱引用(weak)函数,覆写即可重定向printf。代码清单/* USER CODE BEGIN Includes */#include "FreeRTOS.h"#include "task.h"#include "queue.h"
发表于 2020-06-06
STM32CubeMx启动串口调试功能Printf调试
STM32F1xx HAL库中文版——USART篇
38.1 UART Firmware driver registers structures //串口固件驱动寄存器结构38.1.1 UART_InitTypeDefUART_InitTypeDef被定义在stm32f1xx_hal_uart.h头文件中数据字段:• uint32_t BaudRate 波特率• uint32_t WordLength 字长• uint32_t StopBits 停止位• uint32_t Parity 奇偶校验位• uint32_t Mode 模式• uint32_t HwFlowCtl 硬件流控制• uint32_t OverSampling 过采样字段的文档:• uint32
发表于 2020-06-06
Stm32-输入捕获
输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32 的定时器,除了 TIM6 和 TIM7,其他定时器都有输入捕获功能。STM32 的输入捕获,简单地说就是通过检测 TIMx_CHx 上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)中。1. 相关寄存器介绍1) 捕获/比较模式寄存器 (TIMx_CCMRx) 当在输入捕获模式下使用的时候,对应上图的第二行描述,从图中可以看出,TIMx_CCMR1 明显是针对 2 个通道的配置,低八位[7:0]用于捕获/比较通道 1 的控制,而高八位[15:8]则用
发表于 2020-06-06
Stm32-输入捕获
STM32库函数和寄存器的区别
库函数版和寄存器版的系统时钟设置的区别:**1.**库函数的目的是让用户应用的,而寄存器更加原始库函数的系统时钟是默认设置的,且放在启动文件里。而寄存器版的系统时钟是Stm32_Clock_Init(336,8,2,7);.**2.**库函数的快捷的,但不是每个芯片都有的;寄存器是复杂的,但是每个芯片厂商都有提供系统的寄存器设置信息。分别打开库函数和寄存器版的I/O口设置:库函数:RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);gotoh后先通过assert_param();函数检查格式是否正确同时只要是ENABLE,RCC->AHB1ENR
发表于 2020-06-06
STM32库函数和寄存器的区别
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved