2-stm32工程建立(官方固件库)

一、标准外设库概述
STM32标准外设库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。
因此,使用固态函数库可以大大减少开发者开发使用片内外设的时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。同时,STM32官方还给出了大量的示例代码以供学习。
二、标准外设库下载
这里介绍的是STM32F4_DSPv1.8版本的外设库。STM32标准外设库可以到ST公司的官方网站下载,需要验证邮箱。

 

 

 

在建立之前需要安装Keil对应的芯片支持包pack
①可以在keil的pack installer上安装
②也可以在keil 官网上下载后导入到keil的pack installer里面
注: 以下网址是STM32PACK包下载的地址http://www.keil.com/dd2/pack/


①在新建的文件夹中建立三个文件夹

②将固件库中的一些文件放到core中(启动文件startup应选择中等容量级别)

将库中外设驱动放置在lib文件夹中,user文件夹是用户用来管理自己的代码的。

③打开keil进行新建一个工程,并选择相关的芯片,将选择keil自带的界面关掉

④点击“品”进行添加文件到工程(仅添加.c和.s文件即可),然后点击OK

⑤然后进行配置工程

STM32F10X_MD,USE_STDPERIPH_DRIVER是两个宏定义,USE_STDPERIPH_DRIVER控制了是否在应用中启用外设驱动,STM32F10X_MD属于自己的处理器型号

STM32F10X_LD 小容量
STM32F10X_MD 中容量
STM32F10X_HD 大容量

关于stm32启动文件ld, md, hd, cl, vl, xl的选择:

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(){}呢,这个就是启动文件所起的作用。

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

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

system_stm3210x.c文件里有个SystemInit()函数,就是对时钟的设置。而这个SystemInit()在哪调用的呢,就是启动文件先调用了,然后才进入到mian()函数。

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容量x:

x<=32k  选择  ld

64k<= x <=128k     选择 md

256<= x  <=512k    选择  hd

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

原文地址:https://www.cnblogs.com/darren-pty/p/13662822.html