历史上的今天

今天是:2024年09月27日(星期五)

正在发生

2019年09月27日 | STM32学习笔记1——建立一个工程

发布者:HeavenlySunset 来源: eefocus关键字:STM32  学习笔记  工程 手机看文章 扫描二维码
随时随地手机看文章

这个寒假有幸在学长的帮助下接触到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.hcore_cm0plus.h 

startup_stm32f091。 

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

3.User文件夹:User 存放main.cmain.hstm32f0xx_conf.hstm32f0xx_it.cstm32f0xx_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_Driversrcstm32f0xx_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添加

这里写图片描述

完成后,点一下编译后,你会发现这么多错误!!! 

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

这里写图片描述

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

这里写图片描述 

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

不用着急让我们慢慢分析代码:错在什么地方了呢?..LibrariesSTM32F0xx_StdPeriph_Driversrcstm32f0xx_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进行下载。

关键字:STM32  学习笔记  工程 引用地址:STM32学习笔记1——建立一个工程

上一篇:关于STM32F2系列项目开发工程文件的建立
下一篇:一步步告诉你stm32开发环境搭建流程

推荐阅读

近日,福特在德国汉诺威举行的IAA商用车展上发布了一款全新的重型卡车概念车。F-Vision概念车是一款大型的商用卡车,它将把未来的动力技术、清洁能源和自动驾驶结合在一起。据悉,F-Vision原型车由福特位于土耳其的设计中心设计。它是一款具备4级自动驾驶功能的卡车,这意味着它可以在不需要人类任何干预的情况下自行驾驶。此外,它还符合欧洲道路交通研究...
自从OPPO Reno2发布会结尾沈义人留下的OPPO10月神秘新机彩蛋,这款搭载全球最快闪充技术的神秘新机OPPO Reno Ace的热度就一直不减,今天,OPPO官方终于曝出了这款万众期待的神秘新机的参数。从官方曝出的数据来看OPPO Reno Ace不仅仅是搭载了高达65W的超级快充,更有高通骁龙855 Plus处理器和90Hz电竞屏,超级玩家OPPO Reno Ace王牌配置实锤 ,官...
9月25日消息,名为“Mi Watch Lite”的小米手表新品(以下称之为“小米手表Lite”)获得认证。  从命名不难看出,小米Watch Lite定位要比小米手表低,其价格自然更便宜。  当前小米手表定价为1299元,小米手表Lite定价势必会低于1299元。  值得注意的是,近日Redmi首款智能手表获得了入网许可,有种猜测认为海外获得认证的小米手表Lite...
近日,高通技术公司发布新报告《环境可持续发展和绿色经济:5G的变革性作用》。报告强调,5G技术可以通过多种方式实现亟需的可持续发展效益,并呼吁业界和政府携手合作加速5G普及。 报告指出,通过打造新产品和创建支持环境可持续发展的新流程,5G可以变革并积极影响全球各个行业。重要的是,报告显示5G赋能的可持续发展蕴藏着丰富的经济机遇,有极大潜力...

史海拾趣

问答坊 | AI 解惑

中国海洋大学2009年大学生电子设计竞赛竞赛选拔试题

本帖最后由 paulhyde 于 2014-9-15 09:21 编辑 中国海洋大学2009年大学生电子设计竞赛竞赛选拔试题  …

查看全部问答∨

怎么在没有自带TCP协议的CDMA模块上实现彩信的收发呢?给点思路就行了。谢谢

怎么在没有自带TCP协议的CDMA模块上实现彩信的收发呢?给点思路就行了。谢谢 …

查看全部问答∨

串口ClearCommError问题。

                    ClearCommError(hComm, ref dwErrorFlags, ref ComStat);                    & ...…

查看全部问答∨

求ARM开发板接两路模拟摄像头的方案

想用ARM开发板接两路模拟摄像头,复合信号输入。 有些板子(像飞思卡尔)太贵,如果选用三星的ARM9,虽然有些支持模拟视频输入,但只是一路。 不知道有没有支持两路(或更多)模拟视频输入的ARM9开发板? 或者有没有其它转接模块? 现在有很多 ...…

查看全部问答∨

如何快速得到对方挂机的消息

Moden收到来电后在没有接听前每5秒发送RING/CRING,这个时间间隔太长了,我现在想要快速得到对方挂机的消息,2秒左右吧,不知道是否能实现。 尝试发送AT+CPAS检测状态,但是总是返回0(待机)。我看91program几年前问过这个问题,不知道你实现没有 ...…

查看全部问答∨

怎样在工具栏中加入输入法控制按钮

做了个Wince的程序,想要在工具栏中加入输入法控制的按钮,不知怎样才能实现,请高手指点一下…

查看全部问答∨

【备战2013国赛】CPU的选择

本帖最后由 paulhyde 于 2014-9-15 03:43 编辑     最近经常有参加电子设计大赛的同学讨论这样的问题:我最近在学XX单片机或者XX ARM,不知道这个对大赛是否有用?或者参加电子设计大赛最好学什么控制器?应该从以下几个方面去考虑 ...…

查看全部问答∨

低价转让价值2500元的嵌入式面授培训

本帖最后由 ddllxxrr 于 2016-1-7 17:04 编辑 价值2500元的嵌入式面授培训,培训课程由深圳信盈达电子有限公司提供,地点在深圳,有效期至2012年7月   1000元低价转让 …

查看全部问答∨

团购搞个pandaboard或者beagleboard吧

这两天看了看pandaboard ES 和 beagleboard xM / beaglebone 这些开源项目搞个团。板子看着都不错啊。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved