系列文章目录-认识ARM开发
/ARM开发初学目录:/
第2章:#STM32 2.寄存器位操作方法及GPIO点亮一颗LED
第1章:#STM32 1.从C51驱动一颗LED到认识ARM_GPIO(最浅显入门)
Lip: 库开发,做项目不会从头来,但要知道怎么来的
文章目录
一.场景
1.前面使用的是寄存器绝对寻址,工程定义也是比较繁琐,一旦有新的配置就要不断完善库文件。
2.因此使用官方已定义好的库函数及框架很重要,这就是库开发!
3.前面所列都是基础,官方库是将所有可用的外设全部封装ok。所以一颗ARM芯片的官网例程一打开全是封装函数比较晦涩难懂的原因就在这,也就是所谓的业内标准CMSIS
4.库开发非常重要及普及,新建一个工程,体会下实际所用文件的原因,为移植代码做准备。
二.工程文件结构简介
1. STARTUP
下载官方库文件eg:【固件库】STM32F10x_StdPeriph_Lib_V3.5.0
使用官方文件下的模板Template文件,挑选需要的文件
路径:Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
添加启动文件:
2. CMSIS
core_cm3.c
寄存器映射
system_stm32f10x.c
系统时钟配置,代码区修改实际所用时钟源,目的是不破坏库文件结构
路径:Libraries\CMSIS\CM3\CoreSupport
Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
3. LIBRARY
标准库函数,路径:Libraries\STM32F10x_StdPeriph_Driver\src
添加文件夹中所有.c文件(所有外设的封装库,前面自己写的一些封装,在这里可以找到更好更完整的封装)
4.USER
或者是APP,存放用户代码,实际需要用户自己编写的程序文件
stm32f10x_it.c
中断服务函数
其中stm32f10x_it.h
默认包含了头文件,#include "stm32f10x.h"
。这个文件很重要,相当于工程开发中经常用的extern(XXoutput.h),也就是将所需的外设的驱动库函数全部声明在这个文件里。这样想用外设就直接调用库函数,不用再单独申明。good
#include "stm32f10x_flash.h"
#include "stm32f10x_fsmc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_i2c.h"
#include "stm32f10x_iwdg.h"
#include "stm32f10x_pwr.h"
三.KEIL配置
liking、 output、debug什么的和51开发时操作是一致的,区别的地方主要如下:
3.1添加头文件路径
主要是CMSIS中的启动文件、库函数,LIBARAY下的头文件include
3.2 宏定义添加
1)USE_STDPERIPH_DRIVER,STM32F10X_HD(逗号)
2)STM32F10X_HD和前面选启动文件是一样的,hd中容量,跟芯片有关
USE_STDPERIPH_DRIVER是为了包含stm32f10x_conf.h
3)测试了人为添加这个库文件也是可以的,不过应该是为了不破坏结构考虑。可以打开stm32f10x_it.h
,代码里已有表述。
4)通过keil窗口也可以这么宏定义!而且stm32f10x_conf.h
这个头文件不正像是对应51的include<reg52.h>
么,奇怪的知识点又get到了
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif
四.工程验证
不出意外,就肯定出意外了!
按字面意思是打不开core_cm3.h
文件,核对了包含的头文件路径是ok的,和core_cm3.c
在一个路径下。
最终在论坛帖子里找到了答案:KEIL版本问题,不能自行在CMSIS下层路径中找这个库函数。解决方法是:将core_cm3.h
直接复制粘贴到include文件夹下
总结
- 按照例程一步步操作也是一个熟悉的过程,纸上得来终觉浅!
- 任何踩过的雷大家都踩过,群众是好人,最新的不一定是最好的