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

前言

基于官方固件库的工程建立


提示:以下是本篇文章正文内容,下面案例可供参考

一、标准外设库

STM32标准外设库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。

STM32标准外设库可以到ST公司的官方网站下载,需要验证邮箱。

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

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

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

 

二、建立工程之前工作

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

 

三、 建立过程

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

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

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

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

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

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

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

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

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

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

 

⑥然后进行配置工程

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

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

 

四、启动文件的选择

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

①根据自己芯片的型号进行选择对应的容量

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

查user manual手册,以下为摘录

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

flash容量x:

x<=32k  选择  ld

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

256<= x  <=512k    选择  hd

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

2-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

 

2.为什么需要选择启动文件?

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.有些启动文件定义了堆栈大小,可以在这里进行修改