博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
新建基于STM32F103ZET6的工程-寄存器版本
阅读量:4560 次
发布时间:2019-06-08

本文共 1860 字,大约阅读时间需要 6 分钟。

1、新建空白工程

  新建一个文件夹,用来存放新建的工程文件。在这个新建的文件夹下创建MDK-PRO和OUTPUT两个子文件夹。MDK-PRO文件夹用来存放工程文件;OUTPUT用来存放工程编译器后输出的文件。

  打开MDK软件,点击“Project ->New uVision Project”创建新工程。

 

  输入工程的名称并选择存放新建工程的目录。

  选择芯片型号。

 

  点击OK后就创建了一个空工程。如图

 

  用鼠标右击MDK工程栏中的Group,选择‘Manage Project Items’。然后添加如下图所示的Group。

  接下来先将工程的编译输出文件设置到OUTPUT文件夹中。在MDK软件中,选择“Options for Target”,在弹出来的界面中选择Output选项卡,点击“Select Folder for Listings…”,在弹出来的界面中选择OUTPUT文件夹。

  然后再选择Listing选项卡,点击“Select Folder for Listings…”,也在弹出来的界面中选择OUTPUT文件夹。

 

2、添加启动文件

  一般STM32的工程都需要加载启动代码,启动代码是一段和硬件相关的汇编代码。

  启动代码的主要作用如下:

  堆栈(SP)的初始化。

  初始化程序计数器(PC)。

  设置向量表异常事件的入口地址。

  调用main函数。

  ST公司已经写好了启动文件,只要找到对应芯片的启动文件然后调用就可以了。

  ST公司提供了3个启动文件,这三个文件分别是:

  startup_stm32f10x_ld.s是小容量IC的启动文件。

  startup_stm32f10x_md.s是中容量IC的启动文件。

  startup_stm32f10x_hd.s是大容量IC的启动文件。 

  小容量是指FLASH≤32KByte的IC。

  中容量是指64KByte≤FLASH≤128KByte的IC。

  大容量是指256KByte≤FLASH≤512KByte的IC。

  STM32F103ZET6的FLASH容量为512KB,是大容量的IC,所以使用的启动文件是:startup_stm32f10x_hd.s。

  startup_stm32f10x_hd.s文件可以在官方提供的固件库里找到。

  将startup_stm32f10x_hd.s复制到MDK-PRO文件夹下。

   

  将startup_stm32f10x_hd.s文件添加到MDK软件中。

  选中startup_stm32f10x_hd.s文件后点击add。

3、新建源文件

  点击新建文档,输入相应的内容,然后保存为.c文件,将.c文件保存在MDK-PRO文件夹中,然后将.c文件添加到工程当中。

  如上图所示,点击编译并没有发现任何错误,但这个工程只是一个空的工程,什么操作都没有,寄存器也没有封装。如果这时候要操作寄存器,就得直接用指针操作寄存器的地址,如操作GPIOF的ODR寄存器,就得使用 *(unsigned int *)(0x40011C0C)。这样显得比较麻烦,可以通过添加ST提供的头文件来操作寄存器,其提供的头文件已经将STM32的寄存器封装好。

4、添加头文件

  STM32的不同类型的芯片的头文件是有差别的,STM32F103ZET6的头文件是stm32f10x.h,这些头文件可以在ST提供的固件库里找到。将stm32f10x.h文件放到工程目录下,然后将stm32f10x.h文件包含进项目当中。

  点击编译,发现错误,点击提示的错误会跳转到出错的地方,如下图:

  错误提示说找不到core_cm3.h文件,在stm32f10x.h文件中引用了一些头文件,必须找到这些文件并放到工程中才能消除错误,通过错误提示,可以查找到缺少的头文件,分别是:cmsis_armcc.h、core_cm3.h、core_cmFunc.h、core_cmInstr.h和system_stm32f10x.h等头文件,这些文件都能在ST提供的固件库中找到。添加完这些文件之后再点击编译就可以通过了。

  stm32f10x.h文件是通过结构体封装STM32寄存器的,使用寄存器可以通过结构体来操作。如下图中的程序控制GPIOF的寄存器。

转载于:https://www.cnblogs.com/h1019384803/p/10961898.html

你可能感兴趣的文章
如何解决php 生成验证码图片不显示问题
查看>>
PHP,javascript实现大文件上传
查看>>
c#图像处理算法学习
查看>>
webApi之FromUri和FromBody区别
查看>>
【SoapUI】http接口测试
查看>>
各种工具网站
查看>>
数据库事务
查看>>
xe7 控件升级
查看>>
TFrame bug
查看>>
刚学习的如何才能自信的拍美美的婚纱照呢(要结婚啦)
查看>>
M51文件注释
查看>>
关于临界资源访问互斥量的死锁问题
查看>>
django-view层
查看>>
异步加载JS的方法。
查看>>
golang-gorm框架支持mysql json类型
查看>>
【tool】白盒测试
查看>>
Linux 下的 scp
查看>>
理解同步,异步和延迟脚本
查看>>
Checklist: 2019 05.01 ~ 06.30
查看>>
Binary XML file : Error inflating class com.esri.android.map.MapView
查看>>