查看: 1033|回复: 0
打印 上一主题 下一主题

stm32f407流水灯(使用固件库)

[复制链接]
跳转到指定楼层
沙发
发表于 2016-5-31 18:35:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
从此刻起,我将踏上学习stm32的征程。从AVR转到STM32是一个比较大的跨越,这就注定了这必将是一条荆棘密布的道路,也必将是我人生中一段重要的历程。为此,记录下沿途中的种种供日后回顾。
由于STM32上的片内资源相比于AVR有了非常的提成,所以在STM32上能干的事情就非常多了。而且,ST公司提供了固件库,所以,相较于AVR,开发方式也多了许多。和AVR的学习一样,学习过程会按照一个一个的实验来记录。实践是检验真理的唯一标准,代码才是王道。计划按照汇编,寄存器,库和uCos_ii四种不同的编程方法来分别操作STM32上的外设实例为线索继续。
实验的平台为微雪电子(waveshare)出品的STM32F407I开发板。和AVR一样,首先从GPIO开始,这次的操作对象为开发板上的4个LED,做一个流水灯实验。这次使用ST公司提供的固件库来开发。如下图:

解压之后得到的目录结构如下所示:

_htmresc中存放了ST公司的logo,Libraries中就存放了我们需要用到的固件库,Project是ST公司提供的工程模版,Utilities是ST公司提供的官方Demo板对应的实例,Release_Notes.html是版本说明,stm32f4xx_dsp_stdperiph_lib_um.chm是ST提供的固件库的帮助文档。
首先我们新建一个工程文件夹,取名为led_fw,然后在这个目录下面新建如下目录:

首先我们要用ST提供给我们的库函数,所以不管三七二十一首先把Libraries\STM32F4xx_StdPeriph_Driver中的inc和src拷贝到FWLib,然后我们在USER文件夹中新建main.c和main.h文件,然后就应该新建工程了,打开MDK开发工具,如下图

新建工程,取名为led_fw。随后选择Target为STM32F407I-G,确定之后会弹出对话框询问是否添加启动文件,这里我们选择否,我们手动添加固件库中提供的启动文件。因此我们需要将固件库中Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm目录中的startup_stm32f4xx.s拷贝到我们的工程目录的CMSIS文件夹中,然后我们将固件库中的Project\STM32F4xx_StdPeriph_Templates目录中的stm32f4xx_conf.h、stm32f4xx_it.c、stm32f4xx_it.h文件拷贝到USER文件夹中,我们还要拷贝Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates中的system_stm32f4xx.c到我们工程文件夹中的CMSIS文件夹中,在工程中添加文件如下图所示:

总结一下,首先我们新建工程文件夹,然后把Library中的src和inc全部拷贝到工程文件夹中,其他文件我们看需要什么在添加什么,首先我们需要启动文件startup_stm32f4xx.s,这里面定义了包括Reset在内的所有中断向量,程序是Reset复位开始执行的,然后在Reset中断服务程序中调用了system_stm32f4xx.c中的一个函数来初始化系统的时钟系统,所以这个文件也是必须的,然后就跳转到main函数了,在我们新建的main.c中新建函数main,就可以开始写我们的程序了,首先我们包含stm32f4xx.h头文件,这个文件就像我们avr中的iom16.h头文件的功能类似,由于该头文件又包含如下头文件

所以system_stm32f4xx.h和core_cm4.h也要拷贝过来,然后core_cm4.h中又包含

所以core_cmInstr.h、core_cmFunc.h、core_cm4_simd.h也要拷贝到工程文件夹中
然后在main函数中编写代码如下:


然后在STM32F4xx_CONF.h头文件中选择要使用的外设头文件,如下图所示:

这里我们只用到rcc和gpio。编译,大功告成,一个用库函数完成的简单实例就完成了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表