你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32学习笔记(一) 如何新建一个STM32工程模板

[复制链接]
STMCU小助手 发布时间:2022-1-15 22:38
直接使用例程对于快速开发实现功能十分有利,但当我们需要学习时就会变得复杂。为了更好的解析学习STM32,脱离例程,建立工程模板是十分有必要的。初次建立自然错误一堆,但通过查错的过程,可以清晰的了解项目的执行流程和各模块及定义的含义。如果你只是想快速的开发功能,那么上面网址内的资源会更加有效,不过如果你想深入学习嵌入式,那么从工程模板开始,一步步积累自己的STM32工程库是必要的。
1. 准备工作
  建立工程文件夹,在其下面添加/DRIVER,/MDK-ARM,/USER这三个文件夹(PS:所有文件夹名字要用英文,中文在某些情况下会出现未知编译错误):
270926356102978.jpg   
  DRIVER:包含着与STM32F10x芯片相关的外设固件函数库,启动文件以及寄存器地址定义。
  MDK-ARM:包含工程文件,编译生成的中间文件以及最后输出hex文件。
  USER: 用户编译的代码,包含外设配置和main文件。
  移动标准库函数文件中的配置文件到DRIVER文件夹中,以我当前使用的STM32F10x_StdPeriph_Lib_V3.5.0为例(后续的库可能有其它改动,这可以按照这个思路去处理配置驱动文件),解压STM32F10x_StdPeriph_Lib,...\\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries文件夹下的
270931165785841.jpg   
  并复制到...\\DRIVER文件夹下。
  CMSIS:Cortex的微控制器软件接口标准,它提供了stm32的启动文件,外设定义,以及器件的定义。
  STM32F10x_StdPeriph_Driver: ST公司提供的操作芯片的外设库函数。
2. 使用MDK建立工程
  1).新建工程
  打开MDK5.14,选项Porject->New uVision Project,将生成的project放在...\MDK-ARM文件夹,之后选择开发板对应芯片,例如我选择的是芯片是STM32F107VC,如此便建立了一个空的工程。
  2).添加GROUP,并添加项目文件
270939095787403.jpg   
  添加三个GROUP,并改名字为User,Driver,StartUp
  User:用户代码,包含自己编写的外设配置函数和程序的功能主体实现,在...\\USER文件夹下
  Driver:系统固件函数库,在...\\DRIVER\STM32F10x_StdPeriph_Driver\src文件夹下
  StartUp:启动代码,在...\\DIVER\CMSIS\CM3\DeviceSupport\ST\STM32F10x文件夹下
  3).添加头文件查找,解决错误
  选中MDK中target文件夹,右键选择OPTION(或者快捷键ALT+F7),在弹出的对话框上方选中C/C++。
311734061105106.jpg   
  在对话框下方的include Pathe处添加:......\SOURCE\STM32F10x_StdPeriph_Driver\inc提供头文件目录支持(后续还要添加新的头文件目录,如果了解windows环境变量Path,其实和这个的原理一样),也就是将用到的头文件的路径包含到软件中,在编译的时候软件就可以查询指定目录内的头文件。
270947363753641.jpg   
  如此完成了整个工程的建立,下面就是解决错误了。上面的都完成后,再main.c文件里添加代码,头文件为#include"stm32f10x.h",编译。如果你用的是标准库文件,那么这时会出现
  C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(8319):error:  #5: cannot open source input file "stm32f10x_conf.h": No such file or directory
  stm32f10x_conf.h里是所用外设的头文件的申明以及程序内部assert处理命令,在3.5的固态库我没有找到这个头文件,于是我下载一个具有所有外设头文件申明的头文件stm32f10x_conf.h,将其放入......\DRIVER\STM32F10x_StdPeriph_Driver\inc中,继续编译,出现一堆端口未定义,这是因为stm32f10x_conf.h虽然添加进去了,但并没有真正启用,在stm32f10x.h中查找,大概100行的位置
  20150416131932972.jpg  
  取消掉#define USE_STDPERIPH_DRIVER这句话的注释,如上图即可。
  此外,#include”stm32f10x_conf.h”定义在#include"stm32f10x.h"的末尾.
20150416132136855.jpg   
 下面就来讲stm32f10x_conf.h这个头文件。
20150416132159584.jpg   
  里面包含了所有的外设头文件,你需要用什么外设就取消对应得头文件注释即可。此外如果出现
  C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(97):error:  #35: #error directive:"Please select first the target STM32F10x device used in your application(in stm32f10x.h file)"
  表明你没有申明当前选择的STM芯片的类型,在stm32f10x.h找到如下的代码段,下方会有英文注释告诉你如何选择,取消掉你所用板子型号对应类型的注释即可(重要,板子型号对应的寄存器设置会不同,选择不符合的可能程序跑不起来),如stm32f107为互联型,则取消STM32F10X_CL的注释。
20150416132045902.jpg
  解决以上问题,那么一个基础ARM项目模板就建立起来了,不过要实现一个完整的实现功能的嵌入式程序,还需要自己添加相关的代码。上述程序的实践可参考第二章:基于STM32F10x.3.5.0库的流水灯程序实现
  注意:如果使用系统自带的启动文件如startup_stm32f10x_cl.s等,则必须添加文件system_stm32f10x.c,否则程序会启动不成功。
271006203446661.jpg  
  从这可以看出,复位后程序会先加载SystemInit,这个函数实现了系统时钟RCC的配置,它的定义正是在system_stm32f10x.c中。

3 b% {. x9 s8 @
收藏 评论0 发布时间:2022-1-15 22:38

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版