stm32f1指导书.doc_第1页
stm32f1指导书.doc_第2页
stm32f1指导书.doc_第3页
stm32f1指导书.doc_第4页
stm32f1指导书.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

stm32f1指导书 1嵌入式系统之STM32F1STM32F103ZET6实验指导书嵌入式系统之STM32F1实验指导书合肥求精电子有限公司2嵌入式系统之STM32F1STM32F103ZET6实验指导书 一、开发环境搭建在这一节里,我们将会学习到常用的程序开发软件的安装。 有MDK5集成开发环境,它集、编译(或汇编)、仿真调试等功能与一体。 还有串口驱动PL2303和CH430,用于STM32串口程序下载。 (一)MDK5安装。 1.打开实习包-工具包-keil5文件夹。 能看到两个文件夹,分别是keil注册机和器件支持包pack库。 前者的作用是破解keil5,如果没有破解的话代码不能超过2K,超过则会出错。 后者的作用对我们使用的芯片就行支持。 当然这里面的文件可以在我们安装完成keil后,使用其下载安装。 剩下两个软件是keil5的安装包。 C51V953是51系列单片机安装包,mdk512是ARM系列单片机的安装包。 只要两者安装在同一个文件夹便可以一起使用,不过得先安装C51V953,然后安装mdk512。 两者的安装过程是差不多。 在这里我们以mdk512为例。 2.双击打开mdk512,然后点击NEXT。 3.在出现的新界面勾选上复选框,然后点击NEXT。 3嵌入式系统之STM32F1STM32F103ZET6实验指导书4.选择安装路径。 core是keil5核心的安装路径。 Pack是器件支持包的路径。 点击对应的Browse可改变路径。 但是一定不让路径里面出现中文文件夹,一个也不行。 改完后点击NEXT。 5.四个文本输入框可以随便填,不影响功能。 输入完成后点击NEXT。 便开始安装。 6.安装完成点击FINISH。 7.然后在跳出来的窗口点击OK。 这个界面便是下载安装器件支持包。 因为我们已经下载好了。 所以的关掉这个界面。 4嵌入式系统之STM32F1STM32F103ZET6实验指导书8.点击右上角的X。 在弹出的对话框点击是。 然后再在弹出的新对话框点击否。 9.如果在以上安装的过程中出现驱动的安装的对话框则点击安装,这是仿真器的驱动。 10.然后安装我们下载好的器件支持包。 打开实习包-工具包-keil5-pack库文件夹。 我们是用的是STM32F1,所以双击Keil.STM32F1xx_DFP.1.0.5安装便可以了。 如果要使用STM32F4系列的便可以安装Keil.CM4xx_DFP.1.0.1和Keil.STM32F4xx_DFP.2.2.0。 双击打开后点击Next,便开始安装,安装完成后关闭。 11.找到在桌面生成的keil uVision5图标,右击,在弹出的菜单点击属性。 选择以管理员的身份运行此程序。 如果是WIN7则点击兼容性选项卡,然后勾选特权等级的以管理员身份运行此程序。 5嵌入式系统之STM32F1STM32F103ZET6实验指导书如果是WIN8则点击快捷方式选项卡,点击高级。 勾选用管理员身份运行此程序。 完成设置后双击打开keil5。 出现以下界面。 单击菜单栏上的File。 然后在弹出来的菜单选择License Management(许可证管理)。 6嵌入式系统之STM32F1STM32F103ZET6实验指导书接着复制CID。 12.接下来我们进行KEIL5的破解。 打开实习包-工具包-keil5-keil注册机文件夹。 然后双击打开KEIL_LIC软件。 会出现以下界面。 1.CID是本机keil5的ID号,2.Target是选择使用的内核,3的下拉菜单式选择使用的版本,4是生成的注册码。 7嵌入式系统之STM32F1STM32F103ZET6实验指导书13.粘贴CID到CID文本框。 Target选择ARM内核(如果使用的是51单片机则选择C51)。 点击Generate按键,生存注册码。 然后复制注册码。 14.回到keil5的许可证管理界面。 把复制的注册码粘贴到New LincenseID code(LIC):对应的文本框里。 然后点击Add LIC按钮。 在下面后显示出”LIC AddedSuessfully”。 这就表示添加成功,keil也就破解完成了。 (二)USB转串口驱动安装1.实习包的串口驱动有两种,一种是PL2303的驱动,另一种是CH340的驱动。 使用哪种便安装哪种驱动。 我们现在使用的是PL2303。 打开PL2303驱动。 如果系统是XP则打开XP文件夹,双击PL-2303Driver Installer,否则打开WIN7文件夹。 双击PL2303_Prolific_DriverInstaller_v1.5.0软件安装。 安装比较简单这里就不详细解说了。 如果使用的CH340的话,则打开CH340驱动(USB串口驱动)_XP_WIN7共用文件夹,然后双击SETUP,然后在弹出的界面点击安装。 2.接下来测试驱动是否安装成功或者下载线是否是好的。 把下载线插到电脑的USB接口上,然后打开电脑的设备管理器。 8嵌入式系统之STM32F1STM32F103ZET6实验指导书操作系统是WIN7第一步右键桌面的【计算机】图标,可以选择【管理】或者【属性】。 都能从不同入口找到设备管理器。 第二步从计算机【管理】中可以看到设备管理器。 第三步计算机【属性】中可以看到计算机的系统属性和【设备管理器】9嵌入式系统之STM32F1STM32F103ZET6实验指导书操作系统是WIN8【窗口键win+字母X】,在弹出的菜单出,点击设备管理器按钮,如图红框所示进入设备管理器后,找一下有没有端口(和LPT)这一栏,如果没有则驱动或者下载线有问题。 如果有,则看一下Proligic USB-to-Serial CommPort(5)(不同电脑或者USB口时端口号可能不一样)前面有没有黄色的感叹号标志,如果有则驱动或者下载线有问题。 正常情况如下图所示。 找一条确定是好的下载线插到USB口,再看看设备管理器的端口是否显示正常。 正常则是下载线坏了。 不正常则重新安装串口驱动。 如果你的电脑是WIN8以上的,然后端口上有黄色感叹号的话,那便是驱动不兼容。 可进行如下操作10嵌入式系统之STM32F1STM32F103ZET6实验指导书首先选中Proligic USB-to-Serial CommPort(5),然后右击。 点击更新驱动程序软件(P)。 点击浏览计算机以查找驱动程序软件(R)。 点击从计算机的设备驱动程序列表中选择(L)11嵌入式系统之STM32F1STM32F103ZET6实验指导书然后在驱动列表中选择一个驱动,然后点击下一步。 安装完成后如下图所示便是成功,如果不是则选择列表中的其他驱动直到成功。 到此基本上的软件开发环境便安装完成了。 12嵌入式系统之STM32F1STM32F103ZET6实验指导书 二、软件的使用介绍这一节里,我们主要熟悉keil5菜单栏和工具栏以及软件的配置,还有学会程序下载软件的使用。 2.1MDK5的使用2.1.1MDK5的简介有许多商业的开发平台可以用在CM3上,其中最流行的之一就是KEIL的RealView MicrocontrollerDevelopment Kit(简称RealView MDK或RVMDK)。 RVMDK的前身就是曾一度在8051开发业界享有盛誉的KEIL套件。 RVMDK包含了很丰满的组件?uVision?集成开发环境?调试器?模拟器?由ARM提供的RealView工具链?C/C+编译器?汇编器?连接器?RTX实时内核?为各单片机而设的详细启动代码(包含源代码)?各种Flash的编程算法?程序示例(英蓓特还把RVMDK的帮助文件翻译成了中文,并包装成“中国版”的RVMDK译者注)。 使用RVMDK来学习CM3,甚至不需要拥有CM3硬件uVison环境包含了指令模拟器,使用它可以测试“纯粹”的CM3程序代码,对于学习和开发基于内核的系统软件都很有好处。 RVMDK还可以与GNU工具链一起使用。 可以从KEIL网站上获取的KEIL tool之演示版,也可以从.realview./2.1.2MDK5使用技巧之格式设置格式设置主要是字体编码的选择,Tab键的设置和代码字体大小颜色设置等。 可通过工具栏按钮进入Configuration(配置)界面。 或者通过菜单栏的Eidt()-Configuration(配置)进入。 我们把字体编码Encoding改成Chinese GB2312(Simplified),这样子就能很好的支持中文了,可以把keil里面和其他地方的中文互相拷贝而不出现乱码。 由于我们使用的是C语言,把C/C+里的Tab size:设置为4。 每当按下Tab键就是空4格。 以后对程序的缩进,便可使用Tab键。 这里涉及到编程的修养。 13嵌入式系统之STM32F1STM32F103ZET6实验指导书然后代码字体颜色等的设置可点击Colors&Fonts。 在Window栏选择C/C+Editor files。 Element就是选择要设置哪种代码的字体。 Text为普通文本,Number是数字,Block Comment是由/*/标注起来的注释。 Line Comment是由/标注起来的注释。 Keyword是关键字。 String是字符串。 Character是字符。 剩下的可以自己尝试。 只要选择这些元素便可设置对应代码的字体,大小,颜色了。 有时候需要临时改变字体大小,可以直接按住Ctr,滚动鼠标滚轮,进行放大或缩小。 接着设置自定义的关键字,在STM32的代码上会看到uint16_t(无符号16位整型)或者INT8U(无符号8位整型),这是函数库给unsigned shorint或者unsigned char新起了一个名字。 就像我们使用宏定义#define uintunsigned int这样。 我们点击User Keywords也可以设置这些自定义的关键词的颜色。 选择C/C+Editor files。 然后在User Keywords对话框按新建按钮,填入自己定义的关键词。 填写完成后按OK结束所有的设置。 14嵌入式系统之STM32F1STM32F103ZET6实验指导书2.1.3语法检测&代码提示MDK4.70以上的版本,新增了代码提示与动态语法检测功能,使得MDK的器越来越好用了,这里我们简单说一下如何设置,同样,通过工具栏按钮进入Configuration(配置)界面。 或者通过菜单栏的Eidt()-Configuration(配置)进入。 选择Text Completion选项卡,如图下图所示Strut/Class Members,用于开启结构体/类成员提示功能。 当我们输入.或者-要写结构体的成员时,会如上图所示显示这个结构体类型的所有成员供我们选择。 单击即可选择。 Function Parameters,用于开启函数参数提示功能。 此功能可在我们输入函数的(时显示函数的声明。 15嵌入式系统之STM32F1STM32F103ZET6实验指导书Symbols afterxx characters,用于开启代码提示功能,即在输入多少个字符以后,提示匹配的内容(比如函数名字、结构体名字、变量名字等),这里默认设置3个字符以后,就开始提示。 Dynamic SyntaxChecking,则用于开启动态语法检测,比如编写的代码存在语法错误的时候,会在对应行前面出现图标,如出现警告,则会出现图标,将鼠标光标放图标上面,则会提示产生的错误/警告的原因。 然后在错误的地方下面有红色波浪线。 2.1.4快速定位函数/变量被定义的地方大家在调试代码或编写代码的时候,一定有想看看某个函数是在那个地方定义的,具体里面的内容是怎么样的,也可能想看看某个变量或数组是在哪个地方定义的等。 尤其在调试代码或者看别人代码的时候,如果编译器没有快速定位的功能的时候,你只能慢慢的自己找,代码量比较少还好,如果代码量一大,那就郁闷了,有时候要花很久的时间来找这个函数到底在哪里。 幸好MDK提供了这样的快速定位的功能(顺便说一下CVAVR的2.0以后的版本也有这个功能)。 只要你把光标放到这个函数/变量(xxx)的上面(xxx为你想要查看的函数或变量的名。 点击Go toDefinition OfEDIT_SetText可以去到EDIT_SetText定义的地方。 Go toReference OfEDIT_SetText则是去到函数声明的地方。 除此之外还有使用快捷键去到函数或变量声明的地方,同样先把光标放到函数/变量上,然后按F12便可以了。 (有些品牌机需要Fn+F12才可实现此功能)。 2.1.5快速注释与快速消注释接下来,我们介绍一下快速注释与快速消注释的方法。 在调试代码的时候,你可能会16嵌入式系统之STM32F1STM32F103ZET6实验指导书想注释某一片的代码,来看看执行的情况,MDK提供了这样的快速注释/消注释块代码的功能。 也是通过右键实现的。 这个操作比较简单,就是先选中你要注释的代码区,然后右键,选择Advanced-Comment Selection就可以了。 要取消注销我们只要在选中了之后,选择右键,再选择Advanced-Comment Selection就可以把这段代码注释掉了。 2.1.6查找与替换上图工具栏第1个按钮是查找所有工程文件的按钮。 点击此按钮,在弹出的对话框Find输入需要查找的内容。 点击Find All,MDK就会帮你找出所有含有buffer字段的文件并列出其所在位置。 如果在上图工具栏的文本框输入内容,再按回车,则会在本文件内查找输入的内容。 在MDK里面查找替换的快捷键是“CTRL+H”,只要你按下该按钮就会调出下图所示界面17嵌入式系统之STM32F1STM32F103ZET6实验指导书2.2串口程序下载软件的使用第一步学习板插上电源,电源可选12V和5V。 第二步学习板靠近电源的串口座插上下载线,下载线的另一端插到USB口。 第三步设置BOOT。 BOOT0设置为OFF,BOOT1设置为ON。 按复位或者重新上电进入下载状态。 第四步双击打开实习包-工具包-mcuisp.exe。 第五步搜索串口。 第六步选择端口,端口选择带有Prolific USB-to-Serial COmmPort字符串的端口。 如果串口没有改变不需要第四步和第五步的。 第七步点击按钮,找到下载文件。 第八步选择STMISP选项卡,点击开始编程。 便开始下载程序了。 直到软件的右下角的进度显示100%和一切正常则下载成功。 由于我们在MCUISP里勾选了编程后执行。 所以当程序下载成功后便开始运行了。 但是,复位或者重新上电后,程序会不执行的。 因为我们的BOOT没有设置。 BOOT0设置为ON,BOOT1设置为ON。 按复位或者重新上电,这样程序就可以运行了。 程序运行的时候可以把下载线拔掉。 注意事项如果显示无法打开串口,则查看串口是否被其他软件占用,占用了关闭其他软件,然后单击搜索串口。 18嵌入式系统之STM32F1STM32F103ZET6实验指导书 三、程序培训介绍嵌入式工程师就是从事与嵌入式控制系统的硬件或者软件相关工作的人。 在今天这个世界里,嵌入式系统实际上总是围绕着一个运行管控软件的微处理器核来构建的。 尽管大多数嵌入式工程师会偏于专长硬件或者软件,但嵌入式领域的工作却不是像其他工程分支那么固定,一成不变。 一个优秀的嵌入式工程师即是软件工程师,又是数字工程师,也是模拟设计师,并且对射频技术还要有基本的了解至少要关注如何减轻射频干扰。 嵌入式工程是要像医学专家一样,首先是个全科医生,专业领域之外的经验可以帮助他在处理某些特殊的问题时特别充满自信。 嵌入式系统的定义是对对像进行自动控制而使其具有智能化并可嵌入对象体系中的专业计算机系统。 计算机系统的自动控制便是运行着管控软件的微处理器。 然后处理器再去控制一些外围设备。 比如用于人机界面的液晶屏,数码管,点阵和按键。 用于识别是否有物体存在的漫反射开关,激光和热识别红外传感器。 用于采集物理数据的红外非接触式温度传感器,气体传感器,噪声传感器,浊度传感器压强传感器,GPS和MPU6050陀螺仪。 用于MCU与MCU之间通信的WIFI模块,蓝牙模块,zigbee模块,RS485,CAN总线模块,NRF2401无线模块和GTM900模块。 还有用于控制电机转动的一些电路。 除此之外还有很多的外围设备可以通过微处理器控制。 这些设备的工作原理涉及到很多学科的理论。 但微控制器要与外围设备进行信息交换时,只涉及到接口技术,即硬件接口设计和接口驱动程序设计。 在大学里上单片机的课题前,一般会安排电路设计,数字电路,模拟电路,C语言等。 这些是学单片机的基础,有了这些基础会相对轻松的学会单片机。 但是没有并不代表学不会,只是辛苦一点。 大学的单片机课程一般会安排先学单片机的内部结构,包括I/O,存储器,CPU等。 然后就是指令系统汇编语言的学习。 接着就是中断,定时器,串行口的学习。 这些都是80C51内核的学习,汇编的学习不是为了用来编程,更多是用来理解内核的运行机制。 虽然书本上教的51系列内核有点过时,但很经典。 掌握了这款内核后,学习更复杂的内核会变得简单,因为很多理论都是通用的。 流行的芯片有很多,但不需要全部掌握,只需要把那些具有代表意义的芯片掌握便行,比如说AVR,MSP,ARM7,ARM9。 除了芯片这部分外还有接口技术。 学习一些接口的硬件设计和接口驱动程序设计。 接口技术的学习并不一定要用哪一款MCU。 单片机可以,ARM也可以,只要接口兼容。 也就是说接口技术不局限于哪个平台,但要学习接口技术要基于某个平台来学。 简单的外围设备通过两三个I/O按一定时序控制便可。 复杂一点外围设备一般会采用通用的协议,比如说I2C协议,SPI协议,异步串行通信协议。 所以说外围设备虽多,也是有共通之处。 常用的外围设备掌握了,其他外围掌握起来也不难。 通过前面的介绍,要找嵌入式工程师的工作起码得学习MCU内核以及接口技术。 除了找工作外,这些技能对参加电子设计大赛也是有很大的帮助的。 我们培训使用的MCU是19嵌入式系统之STM32F1STM32F103ZET6实验指导书STM32F1。 STM32F1采用的是Cortex-M3内核,也是当前流行的内核。 此内核采用ARM V7架构,不仅支持Thumb-2指令集,而且拥有很多新特性。 较之经典ARM7TDMI,Cortex-M3拥有更强劲的性能、更高的代码密度、位带操作、可嵌套中断、低成本、低功耗等众多优势。 所以要掌握ARM7这个经典学习此内核便可以了。 国内Cortex-M3市场,ST(意法半导体)公司的STM32无疑是最大赢家,作为Cortex-M3内核最先尝蟹的两个公司(另一个是Luminary(流明)之一,ST无论是在市场占有率,还是在技术支持方面,都是远超其他对手。 在Cortex-M3芯片的选择上,STM32无疑是大家的首选。 学习STM32F1,不会像学习单片机那样讲详细的内核的运行机制,和汇编,有单片机基础可以自学。 自学的同学可通过Cortex-M3权威指南(中文)这本书学习,里面会讲得很详细。 我们学习这个MCU的时候也会像单片机那样讲I/O输入输出,外部中断,定时器和串行口,这些概念都是一样的,只是功能更强大。 功能强大,对应的寄存器也会变得更多,所以我们也不像学习单片机编程那样去控制寄存器,而是使用ST(意法半导体)提供的STM32固件库间接的控制寄存器。 如果需要了解寄存器的同学可以学习STM32参考手册。 学完MCU后,我们会接着学习接口技术,比如说液晶接口等。 想成为底层驱动工程师起码得掌握多种MCU和接口技术。 底层驱动工程师可以完成一些不复杂嵌入式系统设计。 如果需求复杂了呢?原来是一个主函数里面做一件事的。 然后需求复杂了,那么在主函数里面就得实现很多个功能,这样就得考虑多个功能怎么在一个主函数里实现,会不会互相影响。 为了减低难度,做出更复杂的功能,就需要操作系统支持了。 多个功能分配到多个任务,一个任务就相当于一个主函数,一下子能减少编程难度。 还有利于模块化编程,实现多人分工合作完成一个嵌入式系统。 比如说,一部分人做底层驱动,一部分人做操作系统的移植,一部分人做顶层应用开发。 有了操作系统,顶层应用开发工程师不需要懂得硬件工作原理,只需调用底层驱动工程师提供的按照操作系统格式的函数便可以控制硬件一些动作。 不管做硬件的还是顶层的软件设计的,去学习操作系统都是很有意义的。 对于顶层软件设计者,操作系统便是应用程序的一部分,只是不是自己设计的罢了。 设计软件时也需要懂得操作系统提供了什么功能。 为了软件的安全性和稳定性也需要懂得操作系统。 还有系统升级时,不懂操作系统又如何知道以前设计的软件是兼容的呢?而对于搞硬件的,在设计一个硬件驱动程序,也需要了解操作系统的设备管理。 而且学习操作系统还能提高编程能力。 因为在操作系统就是一个真实的大程序实例。 在相关课题中很难用实例介绍的数据结构、算法、设计模式,以及软件工程中提到的“高内聚,低耦合”软件设计原则、代码动态链接以及充分利用指针实现的各种虚拟技术等,在操作系统中都有极为充分的体现,如果注意总结,那么你的软件设计能力会有突飞猛进的提高。 那学习什么嵌入式操作系统呢?是Linux,是VxWorks,是QNX,还是Windows CE呢?Linux,因为其开源,学习资料多,嵌入式工程师招聘不少时要求需要懂Linux的。 那么其具有普遍意义,以达到解剖一个实例就可以解决该课程全部问题的目的吗?其实Linux在这一点来看是不理想的。 但操作系统的基本作用和原理大致相同的,所以学习了Linux之后,20嵌入式系统之STM32F1STM32F103ZET6实验指导书学习其他系统就不难了。 那么,怎么学习Linux难不难呢?入门,甚至应用都不难,但要精通确实很难。 因为Linux是集各种编程思想和方法之大成者。 所以在学习Linux操作系统之前,学习一下小型操作系统,例如开源的uC/OS-II,以快速了解操作系统的一些基本概念。 当然会点数据结构,学习操作系统的大型数据结构时也会更简单。 操作系统不是那么容易掌握的,最好是按部就班,从易到难的学习。 而不是拔苗助长的学习。 在这次培训,我们会学习到uC/OS-II,了解一些基本概念。 为更高层次的学习做准备。 也会了解到图形界面uCGUI,这是为顶层QT设计做准备的。 不过uC/OS-II本身是一个开源的实时系统,在实时嵌入式系统还是很热门的。 uC/OS-II是可以在Window的keil环境里设计的,不像Linux操作系统,需要在电脑上安装Linux操作系统和交叉编译环境。 这样降低了学习难度。 那么怎么学习呢?先学习操作系统的基础概念,然后学习使用一堆操作系统的函数,然后在此基础上深入学习这些函数的源码。 至于Linux操作系统的学习方法,最好是以Shell编程来熟悉Linux,以阅读数据结构来了解内核构架,以编写守护进程和驱动程序为突破点来理解Linux内核。 总得来说,本培训是一个承前启后的培训。 是对大学单片机课程的一个升华,由理论到实践。 又为以后技能升级做准备。 21嵌入式系统之STM32F1STM32F103ZET6实验指导书 四、STM32F1工程建立程序从无到有,生成MCU可以执行的hex文件,需要经过预处理,编译,汇编,连接等步骤。 在我们学习单片机时,往往一个mian.c就可以,创建工程也很简单。 但在这里就行不通了。 使用STM32时,我们不是直接控制寄存器的,而是通过固件库间接控制寄存器。 那么在这一节里,我们将介绍什么是固件库,怎么创建带有固件库工程。 4.1.1库开发与寄存器开发的关系其实固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。 在51的开发中我们常常的作法是直接操作寄存器,比如要控制某些IO口的状态,我们直接操作寄存器P0=0x11;而在STM32的开发中,我们同样可以操作寄存器GPIOx-BRR=0x0011;这种方法当然可以,但是这种方法的劣势是你需要去掌握每个寄存器的用法,你才能正确使用STM32,而对于STM32这种级别的MCU,数百个寄存器记起来又是谈何容易。 于是ST(意法半导体)推出了官方固件库,固件库将这些寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用,大多数场合下,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些函数即可。 比如上面的控制BRR寄存器实现电平控制,官方库封装了一个函数void GPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_t GPIO_Pin)GPIOx-BRR=GPIO_Pin;这个时候你不需要再直接去操作BRR寄存器了,你只需要知道怎么使用GPIO_ResetBits()这个函数就可以了。 在你对外设的工作原理有一定的了解之后,你再去看固件库函数,基本上函数名字能告诉你这个函数的功能是什么,该怎么使用,这样是不是开发会方便很多?所以在培训中除了学习MCU的运行机制外,主要还是学习固件库的使用。 但是固件库不是万能的,如果想要把STM32学透,光读STM32固件库是远远不够的。 你还是要了解一下STM32的原理和寄存器是怎样配置的,而这些原理了解了,你在进行固件库开发过程中才可能得心应手游刃。 4.1.2Cortex-M3处理器内核vs.基于Cortex-M3的MCU22嵌入式系统之STM32F1STM32F103ZET6实验指导书Cortex-M3处理器内核是ARM公司设计CortexM3处理器内核是单片机的中央处理单元(CPU),由ARM公司设计,它本身不会生产芯片。 然后完整的基于CM3的MCU还需要很多其它组件。 在芯片制造商得到CM3处理器内核的使用授权后,它们就可以把CM3内核用在自己的硅片设计中,添加存储器,外设,I/O以及其它功能块。 不同厂家设计出的单片机会有不同的配置,包括存储器容量、类型、外设等都各具特色。 我们使用的STM32F1便是ST芯片公司制作的。 我们可以通过下图来了解一下它们之间的关系。 4.1.3STM32固件库介绍这一节内容主要讲解ST官方提供的STM32固件库包的结构。 ST官方提供的固件库完整包可以在官方下载,我们实习包也会提供。 固件库是不断完善升级的,所以有不同的版本,我们使用的是V3.5版本的固件库。 我们打开固件库的目录STM32F103实习包02资料包STM32相关00ST库3.5.0源码STM32F10x_StdPeriph_Lib_V3.5.0。 Libraries文件夹下面有CMSIS和STM32F10x_StdPeriph_Driver两个目录,这两个目录包含固件库核心的所有子文件夹和文件。 其中CMSIS目录下面是启动文件,STM32F10x_StdPeriph_Driver放的是STM32固件库源码文件。 源文件目录下面的inc目录存放的是stm32f10x_xxx.h头文件,无需改动。 src目录下面放的是stm32f10x_xxx.c格式的固件库源码文件。 每一个.c文件和一个相应的.h文件对应。 这里的文件也是固件库的核心文件,每个外设对应一组文件。 Libraries文件夹里面的文件在我们建立工程的时候都会使用到。 Project文件夹下面有两个文件夹。 顾名思义,STM32F10x_StdPeriph_Examples文件夹下面存放的ST官方提供的固件实例源码,在以后的开发过程中,可以参考修改这个官方提供的实例来快速驱动自己的外设,很多开发板的实例都参考了官方提供的例程源码,这些源码对以后的学习非常重要。 STM32F10x_StdPeriph_Template文件夹下面存放的是工程模板。 Utilities文件下就是官方评估板的一些对应源码,这个可以忽略不看。 根目录中还有一个stm32f10x_stdperiph_lib_um.chm文件,直接打开可以知道,这是一个固件库的帮助文档,这个文档非常有用,只可惜是英文的,在开发过程中,这个文档23嵌入式系统之STM32F1STM32F103ZET6实验指导书会经常被使用到。 下面我们要着重介绍Libraries目录下面几个重要的文件。 core_cm3.c和core_cm3.h文件位于LibrariesCMSISCM3CoreSupport目录下面的,这个就是CMSIS核心文件,提供进入M3内核接口,这是ARM公司提供,对所有CM3内核的芯片都一样。 你永远都不需要修改这个文件,所以这里我们就点到为止。 和CoreSupport同一级还有一个DeviceSupport文件夹。 DeviceSupportSTSTM32F10xt文件夹下面主要存放一些启动文件以及比较基础的寄存器定义以及中断向量定义的文件。 这个目录下面有三个文件system_stm32f10x.c,system_stm32f10x.h以及stm32f10x.h文件。 其中system_stm32f10x.c和对应的头文件system_stm32f10x.h文件的功能是设置系统以及总线时钟,这个里面有一个非常重要的SystemInit()函数,这个函数在我们系统启动的时候都会调用,用来设置系统的整个时钟系统。 stm32f10x.h这个文件就相当重要了,只要你做STM32开发,你几乎时刻都要查看这个文件相关的定义。 这个文件打开可以看到,里面非常多的结构体以及宏定义。 这个文件里面主要是系统寄存器定义申明以及包装内存操作。 在DeviceSupportSTSTM32F10x同一级还有一个startup文件夹,这个文件夹里面放的文件顾名思义是启动文件。 在startuparm目录下,我们可以看到8个startup开头的.s文件。 这里之所以有8个启动文件,是因为对于不同容量的芯片启动文件不一样。 对于103系列,主要是用其中3个启动文件startup_stm32f10x_ld.s适用于小容量产品startup_stm32f10x_md.s适用于中等容量产品startup_stm32f10x_hd.s适用于大容量产品这里的容量是指FLASH的大小.判断方法如下小容量FLASH32K中容量64KFLASH128K大容量256KFLASH启动文件到底什么作用,其实我们可以打开启动文件进去看看。 启动文件主要是进行堆栈之类的初始化,中断向量表以及中断函数定义。 启动文件要引导进入main函数。 Reset_Handler中断函数是唯一实现了的中断处理函数,其他的中断函数基本都是死循环。 Reset_handler在我们系统启动的时候会调用,下面让我们看看Reset_handler这段代码;Reset handler(分号后面的是注释)Reset_Handler PROC;(proc是子程序定义伪指令,Reset_Handler子程序名)EXPORT Reset_HandlerWEAK(表示本程序里面用到的变量提供给其他模块调用的)IMPORT_main;(定义表示这是一个外部变量的标号,不是在本程序定义的)IMPORT SystemInitLDR R0,=SystemInit;(将符号SystemInit所对应的地址装载到寄存器24嵌入式系统之STM32F1STM32F103ZET6实验指导书R0中)BLX R0;(转移到R0给出的地址,并把转移前的下条指令地址保存到LR(R14)LDR R0,=_main BXR0;(转移到R0给出的地址)ENDP;(表示PROC所定义的过程结束)还有其他几个文件stm32f10x_it.c,stm32f10x_it.h以及stm32f10x_conf.h等文件,这里就不一一介绍。 stm32f10x_it.c里面是用来编写中断服务函数,中断服务函数也可以随意编写在工程里面的任意一个文件里面,个人觉得这个文件没太大意义。 stm32f10x_conf.h文件打开可以看到一堆的#include,这里你建立工程的时候,可以注释掉一些你不用的外设头文件。 这里相信大家一看就明白。 4.2创建STM32F1工程合肥求精电子B2版工程结构介绍BSP存放各种板级驱动,就是所有自己写的驱动程序都放入里面Doc存放说明文档的地方Libraries存放系统库函数文件Project工程建立存放路径,系统编译时会自动生成Listings和Objects(HEX文件所在)User Main函数文件存放APP当使用ucos时,用来书写任务的。 其他比如ucgui和ucos文件,直接同级存放。 第一步新建一个文件夹,然后再在里面创建上面所说的各个子文件夹。 第二步打开keil5,点击project-New uVisonProject新建工程。 如果要关闭之前工程点击project-Close Project。 第三步保存工程,保存到Project文件里。 注意位置,不要保存到其他工程里面去了或文件夹放错。 25嵌入式系统之STM32F1STM32F103ZET6实验指导书第四步芯片选择,STMicroelectronics-STM32F103-STM32F103ZE。 (如果使用的是其他系列的芯片,选择相应的型号就可以了,特别注意一定要安装对应的器件pack才会显示这些内容哦,如果没得选择,请关闭MDK,然后安装工具包keil5pack库Keil.STM3

温馨提示

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

评论

0/150

提交评论