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容量呢?
posted on 2020-09-13 19:54 Darren_pty 阅读(475) 评论(0) 编辑 收藏 举报