一天入门stm32

上传人:suns****4568 文档编号:60808318 上传时间:2018-11-18 格式:PDF 页数:53 大小:2.63MB
返回 下载 相关 举报
一天入门stm32_第1页
第1页 / 共53页
一天入门stm32_第2页
第2页 / 共53页
一天入门stm32_第3页
第3页 / 共53页
一天入门stm32_第4页
第4页 / 共53页
一天入门stm32_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《一天入门stm32》由会员分享,可在线阅读,更多相关《一天入门stm32(53页珍藏版)》请在金锄头文库上搜索。

1、零死角玩转零死角玩转 STM32 F1 系列系列 第第 1 页 共页 共 53 页页 前言前言 一天入门 STM32,仅一天的时间,是否有真的这么快。不同的人对入门的理解不一 样,这篇一天入门 STM32 的教程,我们先对入门达成一个共识,如果你有异议,一天入门 不了,请不要较真,不要骂街,保持一个工程师该有的修养,默默潜心学习,因为你还有 很大的上升空间。 我眼中的入门:(前提是你学过 51 单片机和 C 语言) 1、知道参考官方的什么资料来学习,而不是陷入一大堆资料中无从下手。 2、知道如何参考官方的手册和官方的代码来独立写自己的程序,而不是一味的看到人 家写的代码就觉得人家很牛逼。 3、

2、消除对 STM32 的恐惧,消除对库开发的恐惧,学习是一个快乐而富有成就感的过 程。 零死角玩转零死角玩转 STM32 F1 系列系列 第第 2 页 共页 共 53 页页 第 1章一天入门 STM32 本章参考资料:STM32 中文参考手册CM3 权威指南 CnR2 学习本章时,配合STM32 中文参考手册GPIO 章节一起阅读,效果会更佳,特 别是涉及到寄存器说明的部分。 1.1 51与 STM32 简介 51 是嵌入式学习中一款入门级的精典 MCU,因其结构简单,易于教学,且可以通过 串口编程而不需要额外的仿真器,所以在教学时被大量采用,至今很多大学在嵌入式教学 中用的还是 51。51 诞

3、生于 70 年代,属于传统的 8 位单片机,如今,久经岁月的洗礼,既 有其辉煌又有其不足。现在的市场产品竞争激烈,对成本极其敏感,相应地对 MCU 的 要求也更苛刻:功能更多,功耗更低,易用界面和多任务。面对这些要求,51 现有的 资源就显得得抓襟见肘了。所以无论是高校教学还是市场需求,都急需一款新的 MCU 来 为这个领域注入新的活力。 基于这市场的需求, ARM 公司推出了其全新的基于 ARMv7 架构的 32 位 Cortex-M3 微控制器内核。紧随其后,ST(意法半导体)公司就推出了基于 Cortex-M3 内核的 MCUSTM32。STM32 凭借其产品线的多样化、极高的性价比、简

4、单易用的库开发方 式,迅速在众多 Cortex-M3 MCU 中脱颖而出,成为最闪亮的一颗新星。STM32 一上市就 迅速占领了中低端 MCU 市场,受到了市场和工程师的无比青睐,颇有星火燎原之势。 作为一名合格的嵌入式工程师,面对新出现的技术,我们不是充耳不闻,而是要尽快 吻合市场的需要,跟上技术的潮流。如今 STM32 的出现就是一种趋势,一种潮流,我们要 做的就是搭上这趟快车,让自己的技术更有竞争力。 1.1.1 51与 STM32架构的区别 我们先普及一个概念,单片机(即 MCU)里面有什么。一个人最重要的是大脑,身体 的各个部分都在大脑的指挥下工作。MCU 跟人体很像,简单来说是由一

5、个最重要的内核加 其他外设组成,内核就相当于人的大脑,外设就如人体的各个功能器官。 下面我们来简单介绍下 51 和 STM32 的结构。 1.51系统结构 51 系统结构框图 零死角玩转零死角玩转 STM32 F1 系列系列 第第 3 页 共页 共 53 页页 图 1 51 系统结构框图 我们说的 51 一般是指 51 系列的单片机,型号有很多,常见的有 STC89C51、 AT89S51,其中国内用的最多的是 STC89C51/2,下面我们就以 STC89C51 来讲解,并以 51 简称。 内核内核 51 由一个 IP 核和片上外设组成,IP 核就是上图中的 CPU,片上外设就是上图中的:

6、时钟电路、SFR 和 RAM、ROM、定时/计数器、并行 I/O 口、串行 I/O 口、中断系统。IP 核跟外设之间由系统总线连接,且是 8bit的,速度有限。 51 内核是上个世纪 70 年代 intel 公司设计的,速度只有 12M,外设是 IC 厂商(STC) 在内核的基础上添加的,不同的 IC 厂商会在内核上添加不同的外设,从而设计出各具特色 的单片机。这里 intel 属于 IP 核厂商,STC 属于 IC 厂商。我们后面要讲的 STM32 也一 样,ARM 属于 IP 核厂商,ARM 给 ST 授权,ST 公司在 Cortex-M3 内核的基础上设计出 STM32 单片机。 外设外

7、设 我们在学习 51 的时候,关于内核部分接触的比较少,使用的最多的是片上外设,我们 在编程的时候操作的也就是这些外设。 零死角玩转零死角玩转 STM32 F1 系列系列 第第 4 页 共页 共 53 页页 编程的时候操作的寄存器位于 SFR 和 RAM 这个部分,其中 SFR(特殊功能寄存器) 占有 128字节(实际上只用了 26 个字节,只有 26 个寄存器,其他都属于保留区),RAM 占有 128字节,我们在程序中定义的变量就是放在 RAM 中。其中 SFR 和 RAM 在地址上 是重合的,都是在 80FF 这个地址区间,但在物理区间上是分开的,所以 51 的 RAM 是有 256 个字

8、节。 编写好的程序是烧写到 ROM 区。剩下的外设都是我们非常熟悉的 IO 口,串口、定时 器、中断这几个外设。 2.STM32系统结构 STM32 系统结构框图 图 2 STM32 系统结构框图 内核内核 在系统结构上,STM32 和 51 都属于单片机,都是由内核和片上外设组成。只是 STM32 使用的 Cortex-M3 内核比 51 复杂得多,优秀得多,支持的外设也比 51 多得多,同 时总线宽度也上升到 32bit,无论速度、功耗、外设都强与 51。 零死角玩转零死角玩转 STM32 F1 系列系列 第第 5 页 共页 共 53 页页 从结构框图上看,对比 51 内核只有一种总线,取

9、指和取数共用。Cortex-M3 内部有若 干个总线接口,以使 CM3 能同时取址和访内(访问内存),它们是: 指令存储区总线(两条)、系统总线、私有外设总线。有两条代码存储区总线负责对代 码存储区(即 FLASH 外设)的访问,分别是 I-Code 总线和 D-Code 总线。 I-Code 用于取指,D-Code 用于查表等操作,它们按最佳执行速度进行优化。 系统总线(System)用于访问内存和外设,覆盖的区域包括 SRAM,片上外设,片外 RAM,片外扩展设备,以及系统级存储区的部分空间。 私有外设总线负责一部分私有外设的访问,主要就是访问调试组件。它们也在系统级 存储区。 还有一个

10、MDA 总线,从字面上看,DMA 是 data memory access的意思,是一种连接 内核和外设的桥梁,它可以访问外设、内存,传输不受 CPU 的控制,并且是双向通信。简 而言之,这个家伙就是一个速度很快的且不受老大控制的数据搬运工,这个在 51 里面是没 有的。 外设外设 从结构框图上看,STM32 比 51 的外设多得多,51 有的串口、定时器、IO 口等外设 STM32 都有。STM32 还多了很多特色外设:如 FSMC、SDIO、SPI、I2C 等,这些外设按 照速度的不同,分别挂载到 AHB、APB2、APB1 这三条总线上。 3.小结 从内核和外设这两大方面来比较,STM3

11、2 之于 51 就是一个升级版的单片机。它适应 市场,引流潮流,在中低端的微控制器中流光溢彩。 1.2 学习方法的区别 学习 51 用寄存器,学习 STM32 用库。 以前我们在学习 51 的时候,用的是寄存器编程的方法,想要实现什么效果,直接往寄 存器里面赋值,优点是直观,简单粗暴,知道自己具体干了啥,心里踏实。 直接操作寄存器之所以在 51 上可行,究其原因,我想有两点: 1、51 主频不高,资源有限,必须注重程序执行的效率,只能直接操作寄存器。关键 的地方还得用汇编,不适合用固件库。 零死角玩转零死角玩转 STM32 F1 系列系列 第第 6 页 共页 共 53 页页 要知道当初我们学习

12、 51 单片机的时候用的还是汇编,连现在的 C 编程都不是,就更 别说什么库函数编程。 2、51 功能简单,寄存器不多。以国内普及最广的 STC89C52 为例,寄存器全部加起 来不到 30 个。按照功能区分来记的话,可以把每个寄存器背的滚瓜烂熟,并且寄存器每一 位的功能都可以记得住,在编程的时候做到了然于胸。 现在从 51 过度到 STM32 的学习,很多人还是喜欢沿用 51 的学习方法。接受不了库, 在学习库的时候陷入迷糊之中,来回几个月下来,都不知道到底有没学会 STM32,因为在 这一路的学习中都是在调用库函数,压根就没有操作过寄存器,心里面很不踏实。其实大 家在调用库函数的时候心中难

13、道就没有疑问,库的底层是怎么实现的?难道就没有勇气对 库的底层一探究竟。可最后当我们开始跟踪库函数底层的时候,看到一堆的宏定义、结构 体、指针、各种的文件包含,而且注释全部都是英文的,是不是又心生忌惮。鉴于此,我 想用两个原因来总结下很多初学者畏惧库不愿意用库的原因。 1、C 语言知识点的欠缺 库在实现寄存器映像时使用的宏定义,强制类型转换,在定义寄存器时使用的结构 体,在外设初始化函数时使用的指针,在组织头文件时使用的条件编译等 C语言知识,在 大学课程中很少涉及,大多数老师也基本是不讲。在一些简单的 51 单片机编程中又很少会 用到这些知识。学单片机,做嵌入式开发其实 80%的工作都跟 C

14、 语言编程相关,剩下的 20%的工作就是阅读各种数据手册,熟悉各种硬件外设。所以掌握这些基本的 C 语言知 识,是嵌入式学习中一道迈不过去的坎,STM32 的库则给了我们一次提升 C 的机会。 凡是可以从书本中找到的,相信我们基本都可以学会,很多初学者并不是不够聪明或 者勤奋,只是缺少方向性的指导罢了。对于这欠缺的知识点我们稍微花点时间就可以掌 握,剩下的就是不断地实践调试。这里我为大家推荐一本 C 语言的书籍C 和指针。 2、程序架构设计思想的欠缺 这个比较难搞,很多 C 语言学习得挺好好的人,也比较难掌握。还好我们遇到了 STM32 的库,这给了我们一个学习和提升 C 语言绝佳的机会。库的

15、整个架构是如何搭建起 来的,代码上是如何如何一步一步写出来的:从寄存器映像开始,到寄存器的封装,然后 到函数的编写,到每个外设函数对应的驱动文件,这里面涉及到了大量的条件编译,文件 包含的思想,对应刚写过几行 51 单片机的初学者来说简直就是噩梦。但是,如果你把这一 系列的关系弄明白了,那么对库的整个架构也了解的差不多了,以后你就不用嚷嚷着说要 操作寄存器了。 如果你一开始不喜欢用库,对库开发很忌惮,那么请自问:是不是我的 C 语学得 不够好。库是一种全新的学习方法,是一种潮流,我更把它看做是与 C 语言的又一次 历练和提升。是否用库,只差你一个闪亮的回眸。 零死角玩转零死角玩转 STM32

16、F1 系列系列 第第 7 页 共页 共 53 页页 1.3 用寄存器点亮 LED 为了顺利过渡到库开发,在 STM32 编程的开始,我们对照 51 点亮一个 LED 的方法, 给大家演示一下 STM32 如何用操作寄存器的方法点亮一个 LED,然后再慢慢讲解到底什 么是库,让大家知道库跟寄存器的关系。 1.3.1 用 51点亮一个 LED 在用 STM32 点亮一个 LED 之前,我们先来复习下用 51 如何点亮一个 LED。 硬件上我们假设 51 单片机的 P0 口的第 0 位接了一个 LED,负逻辑亮。如果我们要点 亮这个 LED,代码上我们会这么写: 1 P0 = 0XFE;/ 总线操作点亮 LED 这时候我们就把 LED 点亮了,如果要关掉 LED,则是: 1 P0 = 0XFF;/ 总线操作关闭 LED 这里面我们用的是总线操作的方法,即是对 P0 口的 8 个 IO 同时操作,但起作用的只 是 P00。 除了这种总线操作的方法,我们还学习过位操作,利用 51 编译器

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号