历史上的今天
返回首页

历史上的今天

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

正在发生

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

2019-09-27 来源:eefocus

这个寒假有幸在学长的帮助下接触到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进行下载。

推荐阅读

史海拾趣

General Cable公司的发展小趣事
根据应用需求,将YN5103的数据和控制引脚连接到相应的输入或输出设备。例如,数据引脚可能连接到微控制器或其他数据源,控制引脚可能用于接收外部控制信号。
Cortina Systems Inc公司的发展小趣事
可能是由于编码逻辑错误、引脚连接错误或外部输入数据错误等原因导致的。解决方法包括检查编码逻辑、重新连接引脚、验证外部输入数据等。
EOZ S.A.S公司的发展小趣事

随着5G技术的普及,EOZ S.A.S公司意识到这将为电子行业带来革命性的变化。公司迅速调整战略,将研发重心转向5G相关技术和产品。通过与运营商合作,EOZ S.A.S成功推出了一系列基于5G技术的智能家居和物联网产品,如智能音箱、智能门锁等。这些产品凭借高速、低延迟的特点,满足了消费者对智能家居的多样化需求,进一步巩固了公司在市场中的地位。

ELECTRONIC ASSEMBLY公司的发展小趣事

在竞争激烈的电子组装市场中,一家名为“精准电子组装”的公司凭借其精准的市场定位脱颖而出。公司深入研究行业趋势和客户需求,准确把握市场脉搏,专注于为高端客户提供定制化的电子组装服务。通过不断挖掘客户需求、提升服务水平,精准电子组装在高端市场上占据了一席之地,实现了快速发展。

AEM [ American Electronic Materials]公司的发展小趣事

在追求经济效益的同时,AEM始终关注环境保护和可持续发展。公司积极响应全球环保倡议,采用环保材料和生产工艺,减少生产过程中的废弃物排放和能源消耗。同时,AEM还投入大量资源研发节能环保的电子元器件产品,为客户提供更加绿色、高效的解决方案。

此外,AEM还积极参与社会公益活动,关注社会责任。公司通过捐款、赞助等方式支持教育、文化等事业的发展,为社会的和谐与进步贡献了自己的力量。

ACP Optoelectronic Technology Co Ltd公司的发展小趣事

在国内市场取得一定成绩后,ACP Optoelectronic Technology Co Ltd开始积极拓展国际市场。公司积极参加国际电子展会和技术交流活动,与海外企业建立合作关系,拓展销售渠道。经过几年的努力,ACP Optoelectronic Technology Co Ltd的产品已经成功打入多个国际市场,公司也逐渐发展成为一家具有国际影响力的光电企业。

问答坊 | AI 解惑

恩智浦LPCXpresso之LPC1343开发板申请,成功获得LPC2148之PCB后。

成功获得LPC2148之PCB后,希望有机会接触到LPC1xxx系列。在上次的《lpc2148使用问题探讨:“新版主chenzhufly LPC2000 PCB 大放送”成果研究专用贴》中与论坛的好友们分享与交流了个人的使用经验,同时也附带的表述个人对LPC22xx与LPC21xx使用的不同 ...…

查看全部问答>

怎样在DialogBar放按钮实现copy、paste功能?

程序运行后发现一点击按钮,文本框上选中的文本就失去焦点,于是无法完成copy功能。 点击Toolbar上的按钮不会使文本框失去焦点,这是为什么?…

查看全部问答>

如何编写程序调用TCPMP中的plg文件?

我打算在WinCE 5.0平台下编写一音视频播放器,有哪些比较好的开源程序可以参考? TCPMP如何? 如何在我的程序中直接调用TCPMP已经编译好的plg文件呢? 另外plg文件是不是dll? 多谢!…

查看全部问答>

关于arm9的cache清空问题

arm手册中只有一句汇编MRC p15,0,Rd,c7,c7,0 我的程序是用C++写的,我用了_asm{MRC p15,0,Rd,c7,c7,0}后 便宜提示p15没定义,我想在我的应用程序里清空cache,具体怎么做啊…

查看全部问答>

50分求单片机入门知识

我本来是从事web开发的,但是想想后决定选择单片机,希望大家能给过入门知识…

查看全部问答>

华为上海无限产品线内部招聘

要求: 本科以上学历 精通C语言 了解操作系统原理 工作职责: vxworks BSP及驱动开发 地点: 上海 有意者请将简历发至youthjump@126.com…

查看全部问答>

俺也想玩玩STM32,谁给赞助一块板呢:-)

                                大款的话就赞助个整套,小款的话就赞助个光板也行呀~…

查看全部问答>

有人用过SIM300发送摄像头拍的照片么?我这有点bug

额..现在收短信显示没问题了.发彩信应该是设置的命令延时不够.那个慢慢调试就是了.现在有个大问题.从摄像头读出来的数据.提取了FF D8到FF D9里面放在一个新数组.就丢失了.基本都变成了FF或者00.没什么思路了..这方面以前也没啥经验.望大侠们给点建 ...…

查看全部问答>

求推荐功率分配芯片(power spliter)

将天线下来的射频信号等分成多路。射频范围为800M-1GHz之间哪些公司有这样的芯片?市场比较容易买到的。…

查看全部问答>

AVR atmega128a UART求助贴

今天兴致勃勃的取回了系统版,我这个是最小系统版 啥都不带的 以前从没接触过AVR,买本书看完后打算先编写一个UART程序,发送数据给电脑。 悲剧来了  调试了一下午毫无动静 。 我用的是STUDIO4+winavr   winavr貌似还没有支 ...…

查看全部问答>