这节课开始正式进入库函数学习。
回顾在上几节知识,从最开始的寄存器配置到函数操作,添加了启动文件、stm32f10x_gpio.c、stm32f10x_gpio.c和stm32f10x.h。
在实际库函数操作中需要添加更多的文件(参考野火教程)。
1、启动文件
startup_stm32f10x_md.s
完成初始化功能,包括设置堆栈指针、初始化中断向量表等等。如果是初学32的学员了解即可,如果打算往嵌入式方向发展的学员要认真学习。
2、时钟配置文件
system_stm32f10x.c
,以前讲过我们是VIP服务,每个引脚都要相对应的时钟服务,所以把这些关于时钟的函数专门集成在这个函数里。
3、内核相关
core_cm3.c:
内核外设的驱动固件库
core_cm3.h:
实现内核外设的寄存器外设
这两个文件一般是不需要去使用,跟内核有关。有的学员会觉得外设不就是LED、数码管、液晶屏吗。不是的,一个芯片有内核和外设之分。就好像一个苹果,里面还有核和肉之分,核是统一的,肉可以不一样。就像我们的stm32f103,内核是由arm公司统一授权,生产stm32公司就是其中一家被授权使用。等会儿要讲的外设就是stm32公司自己设计的。
stm32的每个引脚基本都能实现定时,所以需要专门的文件去管理这些中断。
misc.h
misc.c
SysTick也在这个文件中定义,以后讲。
4、外设相关
stm32f10x.h
实现内核之外的外设寄存器的映射。
我们接触到的第一个是stm32f10x_gpio.c和stm32f10x_gpio.h,其实还有USRAT、SPI等等。如USRAT用stm32f10x_usrat.c和stm32f10x_usrat.h来表示,抽象出来就是
stm32f10x_usrat.c和stm32f10x_usrat.h
5、头文件配置
因为有总多外设,每个外设都有相应的头文件和源文件,把所有的头文件组成一个大的头文件。
stm32f10x_conf.h
里面有
stm32f10x_usart.h、stm32f10x_i2c.h、stm32f10x_spi.h、stm32f10x_dac.h等
6、中断服务函数
stm32功能之所以强大是因为每个引脚能产生中断,所以需要专门的文件去管理。
stm32f10x_it.h
stm32f10x_it.c
分析完所需的文件后开始搭建库函数操作平台。
官方给我们提供了固件库,相当于原材料,我们利用这些原材料做我们自己的菜。
新建文件夹,还是命名为“template”,里面新建四个文件夹,如图。
将固件库中的
C:\Desktop\【固件库】STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
core_cm3.h和core_cm3.c
复制到我们文件夹中的
C:\Desktop\template\Libraries\CMSIS
将固件库中的所有文件
C:\Desktop\【固件库】STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
复制到C:\Desktop\template\Libraries\CMSIS
打开startup,删除如下图三个文件夹。
将固件库中的
C:\【固件库】STM32F10x_StdPeriph_Lib_V3.5.0\Libraries的STM32F10x_StdPeriph_Driver文件夹,复制到
C:\Desktop\template\Libraries。
将固件库中的
复制我们自己文件夹中的User目录下。
在我们自己文件夹中的User中新建main.c,输入程序。
打开Keil,新建工程到“project”文件夹。
下面步骤基本跟以前一样,完成到如下图。
在左侧的“Target1”中右键,选择下图中的红色框部分。
弹出如下图所示。
修改至如下图所示,然后选中“STARTUP”,点击箭头所指。
定位到我们自己新建文件夹下的arm文件夹,发现里面是空的。
在文件类型里面选择(.),选择我们的启动文件。
可以看到在STARTUP后多了文件。
同理在CMSIS里添加“core_cm3.c”和system_stm32f10x.c。
在FWLIB里添加我们自己夹下的
C:\Desktop\template\Libraries\STM32F10x_StdPeriph_Driver\src的所有文件,如下图。
在USER下添加“main.c”和“stm32f10x_it.c”。
点击ok,回到了Keil主界面,看左边的框就是我们刚才操作的。
总结下:我们在添加的都是源文件,也就是.c的文件。因为一般头文件和源文件都是成对出现,编译源文件后会自动加载头文件,这是因为我们在写源文件时第一句就是包含自家的头文件。
但是我们要加载头文件路径,不然编译器不知道去哪找对应的头文件,至少告诉人家路怎么走。
点击“魔术棒”,弹出如下对话框,选择“C/C++”,点击②处。
添加哪些路径呢,比如CMSIS下有头文件,所以要把这个路径添加。
点击①处,出现对话框,将文件定位到“CMSIS”,确定。
完成后如下图。
在下图中添加框中内容,箭头所指是逗号,一定要在英文状态下输入,为防止大家输入错误,可以复制我的。
USE_STDPERIPH_DRIVER,STM32F10X_MD
确定以后,编译程序。
出现一个警告,双击上图中的第一个框。将光标闪烁放到最后,由于是截图看不到,就是箭头所指位置。
再次编译, 0 Error(s), 0 Warning(s)。
在进行相关的设置,如下图,那么以后基本可以用这个模块了,大家最好自己亲手做一次,以后直接拿来可以用了!