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进行下载。
相关文章推荐
- CMake学习笔记(2)——建立一个标准的工程和安装程序
- cortex_m3_stm32嵌入式学习笔记(一):建立工程模板+跑马灯实验(IO输出)
- STM32学习笔记之工程模板的建立
- SilverLight学习笔记--实际应用(一)(2):手把手建立一个Silverlight应用程序之添加记录
- 在MDK上建立一个C++的STM32开发工程
- STM32学习笔记——新建工程模板步骤(向原子哥学习)
- OpenCV学习笔记(六十一)——建立支持OpenGL的OpenCV工程“Master OpenCV”chp.3
- SilverLight学习笔记--实际应用(一)(4):手把手建立一个Silverlight应用程序之同步数据校验1
- maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程
- ARM&LINUX学习笔记(5)-----ADS建立工程
- 51操作系统学习笔记(四):建立一个属于自己的AVR的RTOS(2)
- Node.js 学习笔记--- (2)创建一个简单的博客工程
- SilverLight学习笔记--实际应用(二) 建立一个轮盘图片展示程序
- away3d 4.0.9Gold 学习笔记 建立一个地形天空的第一视角漫游(8)
- SilverLight学习笔记--实际应用(一)(1):手把手建立一个Silverlight应用程序之开始篇
- SilverLight学习笔记--实际应用(一)手把手建立一个Silverlight应用程序
- STM32学习(一)——MDK3 工程建立过程
- [BizTalk][Adapter][部署]BTS学习笔记1:建立一个简单的Biztalk数据交换项目(一)
- JPA学习笔记---JPA实体Bean的建立---链接上一个博文:对实体Bean中属性进行操作:保存日期类型,设置字段的长度,名字,是否为空,可以声明枚举字段;可以存放二进制数据,可以存放
- 在MDK上建立一个C++的STM32开发工程