STM32编程文档文档_第1页
STM32编程文档文档_第2页
STM32编程文档文档_第3页
STM32编程文档文档_第4页
STM32编程文档文档_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实用标准文案实用标准文案精彩文档精彩文档一、条件的准备我的习惯,第一步是先搭建一个学习的平台。原来学51,PIC,AVR时,都是想方设法自己做些工具,实验板之类,现在人懒了,直接购买成品了。硬件电路板:火牛板keil和iarIAR,如果真的有一天不得不用IAR,相信学起来也很容易,因为这个时候硬件部分我肯定很熟了,再加上有keil调试工具:JLINKV8。这个不多说了,价格便宜又好用,就是它了。二、热身细细端详,做工精良,尤其那上面的3.2装JLINKJLINK能不能与电脑和板子通信上了。真顺,一点问题也没有。于是准备将附带的程序一个一个地写进去试一试。一检查,大部分例子的HEX文件并没有给出,这要下一步自己生成,但是几个大工程的例子都有HEX文件,如MP3,如UCCGI测试等,写完以后观察程序运行的效果。因为之前也做过彩屏的东西,知道那玩艺代码量很大,要流畅地显示并不容,当时是用AVR做的,在1.8吋屏上显示一幅画要有一段时间。现在看起来,用STM32做的驱动显示出来的画面还是很快的,不过这里显示的实用标准文案实用标准文案一个晚上过去了,下一篇就是要开始keil软件的学习了。三、开始编程硬件调通后,就要开始编程了。编程的方法有两种,一种是用st提供的库,另一种是从最底层开始编程,网上关于使是从库开始啦。库是ST提供的,怎么说也不会差到哪里,再说了,用32位ARM的话,开发的观念也要随之改变一点了。说说我怎么学的吧。找个例子,如GPIO文件夹)-APP(文件夹)-CMSIS(文件夹)-STM32F10x_StdPeriph_Driver(文件夹)Lis(文件夹)OBJ(文件夹)其中SOURCE中保存的是应用程序,其中又有好多子文件夹,而CMSIS文件夹中和STM32F10x_StdPeriph_Driver文件夹中是ST提供的库,这样,如果要做新的工程只要将这个文件夹整个复制过来就行,其中APP中保存自己的代码。因为我们用51LISOBJ下面就将设置简单描述一下。将复到过来的GPIO根目录下的所有文件删除,因为我们要学着自己建立工程。用菜单Project--》NewuVisionPorject.。.建立新的工程,选择目标器件为STM32103VC,这个过程与建立51单片机的工程没有什么区别,这里就偷点懒,不上图了。接下来看一看怎么设置。点那个品字形,打开对话框VC或者IAR时总觉得它们的一个功能:就是建立一个是Debug组和Release组,这个功能挺好的,从Keil将刚才那个文件夹图中CMSIS中的文件加入CMSIS组,一共3个,其中\Source\CMSIS\Core\CM3有两个C语言源程序文件全部加入,另外还有一个在\Source\CMSIS\Core\CM3\startup\arm文件夹中,这个文件夹中有4个.s文件,我们选择其中的startup_stm32f10x_hd.s文件。这是根据项目所用CPU来选择的,我们用的CPU是103VC的,属于高密度的芯片,所以选这个。至于LIB\Source\STM32F10x_StdPeriph_Driver\src编译后的代码量,但会增加很多的编译时间。接下来设定目标输出文件夹。上面这个图怎么出来的就不说啦,单击“SelectFolerforObjects。”,在弹出来的对话框中选择OBJ文件夹。同样方法,选择List文件的输出文件夹。设置好后,如果直接编译是不行的,会出错。还需要提供头文件所在位置。单击c/C++标签页。第一次进入时IncludePaths相应的路径这样路径就设好了。单击OK,回到上一界面,然后再单击OK,退出设置,即可编译、链接。下一会要试一试新的3.12版的库效果如何了。实用标准文案实用标准文案升级库光盘中所带的例子是3.10的,另外还有一个3.12的,我试着将3.12的库替代原来的库,还真有问题,下面就简述问题及解决方法。将库文件解压库文件名是:stm32f10x_stdperiph_lib.zip,解压后放在任意一个文件夹中。由于原作者做了很好的规划,每一个项目中都分成三个文件夹,并且在source文件夹中又做了3个文件夹,其中APP3.1.2CMSIS和STM32F10x_StdPeriph_Driver直接复制过来,以为一切OK,结果一编译,出来一堆错误。其中有错误:Source\App\main.c(7):error:#20:identifier“GPIO_InitTypeDef”isundefined。..。还有大量的警告:warning:#223-D:function“assert_param”declaredimplicitly实用标准文案实用标准文案看了看,在APP文件夹中还有一些不属于自己的东西:stm32f10x_conf.h,stm32f10x_it.h,stm32f10x_it.c,打开一看,果然是3.10版本的,没说的,换。。。。,找到STM32F10x_StdPeriph_Lib_V3.1.2\Project\Template文件夹,用里面的同样的文件替换掉这几个文件,这回应该万事大吉了吧。再一看,依然如故,,没办法了,只好细细研究了。通过观察,发现原来可以编译通过的工程,在main.c下面挂满了.h文件,而这个通不过的,则少得很。这是编译能通过的工程这是编译通不过的工程显然,有些文件没有被包含进来。一点一点跟踪,发现大部分的头文件都包含在stm32f10x_conf.h中,而这个文件又出现在stm32f10x.h中,其中有这样的一行:#ifdefUSE_STDPERIPH_DRIVER#include“stm32f10x_conf.h”#endif看来,是这个USE_STDPERIPH_DRIVER没有被定义啊,于是,人为地去掉条件://#ifdefUSE_STDPERIPH_DRIVER#include“stm32f10x_conf.h”//#endifOK一搜果然就有了。到设置C/C++页面在那个define中加入“USE_STDPERIPH_DRIVER,STM32F10X_HD”当然,去掉条件编译前面的注释,回到原样。stm32f10x.h,可以看到有这么一行:而新的stm32f10x.h中则是这样的:原来那个3.1.0版的stm32f10x.h被人为地修改了一下,所以,不在define中定义也不要紧,而新升级的3.1.2则不行了。至此,简单的升级搞定。内存学习ARM中的RO、RW和ZIDATA一直以来对于ARM体系中所描述的和ZI实用标准文案实用标准文案我想应该有不少人也有和我同样的困惑W和I的理解写出来,希望能对大家有所帮助。要了解RO,RW和ZI需要首先了解以下知识:ARM程序的组成此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别。一个ARM程序包含3部分:RO,RW和ZIRO是程序中的指令和常量RW是程序中的已初始化变量ZI是程序中的未初始化的变量由以上3点说明可以理解为:RO就是readonly,RW就是read/write,ZI就是zeroARM映像文件的组成所谓ARM映像文件就是指烧录到ROM中的bin文件,也称为image文件。以下用Image文件来称呼它。Image文件包含了RO和RW数据。之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。Q:为什么Image中必须包含RO和RW?A:因为RO中的指令和常量以及RW中初始化过的变量是不能像ZI那样“无中生有”的。ARM程序的执行过程从以上两点可以知道,烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全一样的。因此就有必要了解ARM程序是如何从ROM中的image到达实际运行状态的。实际上,RO中的指令至少应该有这样的功能:RWROMRAMRWROM将ZI所在的RAMZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变量不ROM在程序运行的最初阶段,RO中的指令完成了这两项工作后C程序才能正常访问变量。否则只能运行不含变量的代码。和ZIRO,RW,ZIC1;RO我们之前说的,他们之间应该只会在RO数据中相差一个字节(字符常量为1字节)。Prog1:#include《stdio.h》voidmain(void){;}Prog2:#include《stdio.h》constchara=5;voidmain(void){;}Prog1编译出来后的信息如下:================================================================================CodeRODataRWDataZIDataDebug948600960GrandTotals================================================================================TotalROSize(Code+RO1008(0.98kB)TotalRWData+ZI96(0.09kB)TotalROM+ROData+RW1008(0.98kB)================================================================================Prog2编译出来后的信息如下:================================================================================CodeRODataRWDataZIDataDebug948610960GrandTotals================================================================================TotalROSize(Code+RO1009(0.99kB)TotalRWData+ZI96(0.09kB)TotalROM+ROData+RW1009(0.99kB)================================================================================以上两个程序编译出来后的信息可以看出:Prog1和Prog2的RO包含了Code和RODataProg2RODataProg11如果增加的是一条指令而不是一个常量,则结果应该是Code数据大小有差别。2;RW同样再看两个程序,他们之间只相差一个“已初始化的变量”,按照之前所讲的,已初始化的变量应该是算在RW中的,所以两个程序之间应该是RW大小有区别。Prog3:#include《stdio.h》voidmain(void){;}Prog4:#include《stdio.h》chara=5;voidmain(void){;}Prog3编译出来后的信息如下:================================================================================CodeRODataRWDataZIDataDebug948600960GrandTotals================================================================================TotalROSize(Code+RO1008(0.98kB)TotalRWData+ZI96(0.09kB)TotalROM+ROData+RW1008(0.98kB)================================================================================Prog4编译出来后的信息如下:================================================================================CodeRODataRWDataZIDataDebug948601960GrandTotals================================================================================TotalROSize(Code+RO1008(0.98kB)TotalRWData+ZI97(0.09kB)TotalROM+ROData+RW1009(0.99kB)================================================================================可以看出Prog3和Prog4之间确实只有RWData之间相差了1个字节,这个字节正是被初始化过的一个字符型变量“a”所引起的。3;ZI可以推测,这两个程序之间应该只有ZIProg3:#include《stdio.h》voidmain(void){;}#include《stdio.h》charvoidmain(void){;}Prog3编译出来后的信息如下:================================================================================CodeRODataRWDataZIDataDebug948600960GrandTotals================================================================================TotalROSize(Code+RO1008(0.98kB)TotalRWData+ZI96(0.09kB)TotalROM+ROData+RW1008(0.98kB)================================================================================Prog4编译出来后的信息如下:======================================================

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论