您的位置:首页 > 其它

STM32学习笔记1——建立一个工程

2015-02-06 17:06 567 查看
这个寒假有幸在学长的帮助下接触到arm,作为单片机还没学明白的我,51基础也就是几节郭天祥老师的视频,现在学习arm也是一头雾水。不过也学了这么多天了,需要整理下思路来看看自己学了什么了。好了,废话不多说,开始我的arm的学习之路。


准备条件

1.一块开发板。(笔者认为这是非常重要的,方便你能随时对你的代码进行下载调试。笔者手上的是一块最新的ARM CORTEX M0内核的STM32F091RC开发板)。
2.一个顺手的IDE。(对于软件,我的观点一向是最新的就是最好用的,所以我用的是KEIL的5.13版本,在此附上[\[链接\]](%28https://www.keil.com/demo/eval/arm.htm#DOWNLOAD%29)
和适合你开发板的pack包[地址](http://www.keil.com/dd2/Pack/))。
3.ST公司提供的标准固件库。(我的开发板是F0系列,希望大家根据自己的板子自己选取适合自己的[库](http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961),库里面有各种外设的性能特性和应用实例,帮助我们更好的应用和掌握STM32,由于库里的驱动源代码都符合Strict ANSI-C标准,所以不受开发环境影响。而且,在固件库中还有各种新出型号的补丁工具,笔者的STM型号就是在固件库的补丁工具中添加的)。
4.最后,也是必不可少的,你需要一本数据手册和一些指导书。(链接我就不附了,大家可以自行寻找)。


建立工程

准备工作就绪,下面就开始建立你的第一个工程吧。


新建文件夹demo,在里面建立4个文件夹

core文件夹:core 存放固件库的核心支持文件core_cm0.h\core_cm0plus.h

startup_stm32f091。

2.Library文件夹:从固件库里复制过来的Library文件夹。

3.User文件夹:User 存放main.c\main.h\stm32f0xx_conf.h\stm32f0xx_it.c\stm32f0xx_it.h文件。

4.Project文件夹:待用。

打开keil软件创建工程

(1).选择自己的MCU型号,将工程建在Project文件夹中。

(2).调出Manage Components进行设置

对其添加4个组,分别为User,Lib,CMSIS,Startup。

并对各个组添加用户的用文件



User组中添加自己USER文件夹中的main.c和stm32f0xx_it.c

Lib组中添加刚才Library文件夹中的STM32F0xx_StdPeriph_Driver\src\stm32f0xx_gpio.c和stm32f0xx_rcc.c添加

CMSIS中找到Libraries\CMSIS\Device\ST\STM32F0xx\Source\Templates\system_stm32f0xx.c添加进去

Startup中按路径Libraries\CMSIS\Device\ST\STM32F0xx\Source\Templates\arm\startup_stm32f091.s添加

完成后,点一下编译后,你会发现

这么多错误!!!

仔细分析,不难发现,这些错大部分是这种..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_gpio.c(76): error: #5: cannot open source input file “stm32f0xx_gpio.h”: No such file or directory文件在编译时没有打开头文件,我们的程序中,把各个头文件都放在了不同的文件夹内,当我们#include的时候,会自动向本文件夹内寻找,但是在找不到要包含的头文件的时候,就只能报错了,想解决这种错误,我们需要给他寻找头文件添加一个路径。把需要的头文件包含进来。


按图中步骤进行添加后,我们再来编译下试试。



错误怎么还变多了!!!这是怎么回事???

不用着急让我们慢慢分析代码:错在什么地方了呢?..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_gpio.c(122): warning: #223-D: function “assert_param” declared implicitly

assert_param(IS_GPIO_ALL_PERIPH(GPIOx));让我们看下这个警告,assert param()这个函数在哪呢?继续追踪可以发现在stm32f0xx_conf.h文件中有如下定义:

/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Uncomment the line below to expanse the "assert_param" macro in the
Standard Peripheral Library drivers code */
/* #define USE_FULL_ASSERT    1 */

/* Exported macro ------------------------------------------------------------*/
#ifdef  USE_FULL_ASSERT

/**
* @brief  The assert_param macro is used for function's parameters check.
* @param  expr: If expr is false, it calls assert_failed function which reports
*         the name of the source file and the source line number of the call
*         that failed. If expr is true, it returns no value.
* @retval None
*/
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
void assert_failed(uint8_t* file, uint32_t line);
#else
#define assert_param(expr) ((void)0)
#endif /* USE_FULL_ASSERT */


既然已经定义了,为什么还是有警告呢?在看发现在stm32f0xx.h的第5826行有如下代码:

`#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif `


对,问题就出在这。然后,我们加上这句话


再次进行编译,程序完美运行了!!!

到此我们的工程就建好了。

程序下载

以后,如果接下来你还想把自己编写的程序下载到板子上,那么,你还需要这最后一步。

1.安装驱动后,打开STM32 ST-LINK Untility点击链接,如果出现以下界面,表明驱动安装成功。



或在设备管理器中出现以下界面



2.在MDK中设置下载选项



之后选择settings进入如下界面



圈出部分如是JTAG改为SW。点击Flash Download如图标选:



其他的选默认。

设置完成后,点load进行下载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐