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

这个寒假有幸在学长的帮助下接触到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.最后,也是必不可少的,你需要一本数据手册和一些指导书。(链接我就不附了,大家可以自行寻找)。

建立工程

准备工作就绪,下面就开始建立你的第一个工程吧。
  1. 新建文件夹demo,在里面建立4个文件夹

    1. 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文件夹:待用。
  2. 打开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进行下载。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值