一天入门STM资料下载.pdf

上传人:b****1 文档编号:16119353 上传时间:2022-11-20 格式:PDF 页数:53 大小:2.63MB
下载 相关 举报
一天入门STM资料下载.pdf_第1页
第1页 / 共53页
一天入门STM资料下载.pdf_第2页
第2页 / 共53页
一天入门STM资料下载.pdf_第3页
第3页 / 共53页
一天入门STM资料下载.pdf_第4页
第4页 / 共53页
一天入门STM资料下载.pdf_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

一天入门STM资料下载.pdf

《一天入门STM资料下载.pdf》由会员分享,可在线阅读,更多相关《一天入门STM资料下载.pdf(53页珍藏版)》请在冰豆网上搜索。

一天入门STM资料下载.pdf

现在的市场产品竞争激烈,对成本极其敏感,相应地对MCU的要求也更苛刻:

功能更多,功耗更低,易用界面和多任务。

面对这些要求,51现有的资源就显得得抓襟见肘了。

所以无论是高校教学还是市场需求,都急需一款新的MCU来为这个领域注入新的活力。

基于这市场的需求,ARM公司推出了其全新的基于ARMv7架构的32位Cortex-M3微控制器内核。

紧随其后,ST(意法半导体)公司就推出了基于Cortex-M3内核的MCUSTM32。

STM32凭借其产品线的多样化、极高的性价比、简单易用的库开发方式,迅速在众多Cortex-M3MCU中脱颖而出,成为最闪亮的一颗新星。

STM32一上市就迅速占领了中低端MCU市场,受到了市场和工程师的无比青睐,颇有星火燎原之势。

作为一名合格的嵌入式工程师,面对新出现的技术,我们不是充耳不闻,而是要尽快吻合市场的需要,跟上技术的潮流。

如今STM32的出现就是一种趋势,一种潮流,我们要做的就是搭上这趟快车,让自己的技术更有竞争力。

1.1.151与STM32架构的区别我们先普及一个概念,单片机(即MCU)里面有什么。

一个人最重要的是大脑,身体的各个部分都在大脑的指挥下工作。

MCU跟人体很像,简单来说是由一个最重要的内核加其他外设组成,内核就相当于人的大脑,外设就如人体的各个功能器官。

下面我们来简单介绍下51和STM32的结构。

1.51系统结构51系统结构框图零死角玩转零死角玩转STM32F1系列系列第第3页共页共53页页图151系统结构框图我们说的51一般是指51系列的单片机,型号有很多,常见的有STC89C51、AT89S51,其中国内用的最多的是STC89C51/2,下面我们就以STC89C51来讲解,并以51简称。

内核内核51由一个IP核和片上外设组成,IP核就是上图中的CPU,片上外设就是上图中的:

时钟电路、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单片机。

外设外设我们在学习51的时候,关于内核部分接触的比较少,使用的最多的是片上外设,我们在编程的时候操作的也就是这些外设。

零死角玩转零死角玩转STM32F1系列系列第第4页共页共53页页编程的时候操作的寄存器位于SFR和RAM这个部分,其中SFR(特殊功能寄存器)占有128字节(实际上只用了26个字节,只有26个寄存器,其他都属于保留区),RAM占有128字节,我们在程序中定义的变量就是放在RAM中。

其中SFR和RAM在地址上是重合的,都是在80FF这个地址区间,但在物理区间上是分开的,所以51的RAM是有256个字节。

编写好的程序是烧写到ROM区。

剩下的外设都是我们非常熟悉的IO口,串口、定时器、中断这几个外设。

2.STM32系统结构STM32系统结构框图图2STM32系统结构框图内核内核在系统结构上,STM32和51都属于单片机,都是由内核和片上外设组成。

只是STM32使用的Cortex-M3内核比51复杂得多,优秀得多,支持的外设也比51多得多,同时总线宽度也上升到32bit,无论速度、功耗、外设都强与51。

零死角玩转零死角玩转STM32F1系列系列第第5页共页共53页页从结构框图上看,对比51内核只有一种总线,取指和取数共用。

Cortex-M3内部有若干个总线接口,以使CM3能同时取址和访内(访问内存),它们是:

指令存储区总线(两条)、系统总线、私有外设总线。

有两条代码存储区总线负责对代码存储区(即FLASH外设)的访问,分别是I-Code总线和D-Code总线。

I-Code用于取指,D-Code用于查表等操作,它们按最佳执行速度进行优化。

系统总线(System)用于访问内存和外设,覆盖的区域包括SRAM,片上外设,片外RAM,片外扩展设备,以及系统级存储区的部分空间。

私有外设总线负责一部分私有外设的访问,主要就是访问调试组件。

它们也在系统级存储区。

还有一个MDA总线,从字面上看,DMA是datamemoryaccess的意思,是一种连接内核和外设的桥梁,它可以访问外设、内存,传输不受CPU的控制,并且是双向通信。

简而言之,这个家伙就是一个速度很快的且不受老大控制的数据搬运工,这个在51里面是没有的。

外设外设从结构框图上看,STM32比51的外设多得多,51有的串口、定时器、IO口等外设STM32都有。

STM32还多了很多特色外设:

如FSMC、SDIO、SPI、I2C等,这些外设按照速度的不同,分别挂载到AHB、APB2、APB1这三条总线上。

3.小结从内核和外设这两大方面来比较,STM32之于51就是一个升级版的单片机。

它适应市场,引流潮流,在中低端的微控制器中流光溢彩。

1.2学习方法的区别学习51用寄存器,学习STM32用库。

以前我们在学习51的时候,用的是寄存器编程的方法,想要实现什么效果,直接往寄存器里面赋值,优点是直观,简单粗暴,知道自己具体干了啥,心里踏实。

直接操作寄存器之所以在51上可行,究其原因,我想有两点:

1、51主频不高,资源有限,必须注重程序执行的效率,只能直接操作寄存器。

关键的地方还得用汇编,不适合用固件库。

零死角玩转零死角玩转STM32F1系列系列第第6页共页共53页页要知道当初我们学习51单片机的时候用的还是汇编,连现在的C编程都不是,就更别说什么库函数编程。

2、51功能简单,寄存器不多。

以国内普及最广的STC89C52为例,寄存器全部加起来不到30个。

按照功能区分来记的话,可以把每个寄存器背的滚瓜烂熟,并且寄存器每一位的功能都可以记得住,在编程的时候做到了然于胸。

现在从51过度到STM32的学习,很多人还是喜欢沿用51的学习方法。

接受不了库,在学习库的时候陷入迷糊之中,来回几个月下来,都不知道到底有没学会STM32,因为在这一路的学习中都是在调用库函数,压根就没有操作过寄存器,心里面很不踏实。

其实大家在调用库函数的时候心中难道就没有疑问,库的底层是怎么实现的?

难道就没有勇气对库的底层一探究竟。

可最后当我们开始跟踪库函数底层的时候,看到一堆的宏定义、结构体、指针、各种的文件包含,而且注释全部都是英文的,是不是又心生忌惮。

鉴于此,我想用两个原因来总结下很多初学者畏惧库不愿意用库的原因。

1、C语言知识点的欠缺库在实现寄存器映像时使用的宏定义,强制类型转换,在定义寄存器时使用的结构体,在外设初始化函数时使用的指针,在组织头文件时使用的条件编译等C语言知识,在大学课程中很少涉及,大多数老师也基本是不讲。

在一些简单的51单片机编程中又很少会用到这些知识。

学单片机,做嵌入式开发其实80%的工作都跟C语言编程相关,剩下的20%的工作就是阅读各种数据手册,熟悉各种硬件外设。

所以掌握这些基本的C语言知识,是嵌入式学习中一道迈不过去的坎,STM32的库则给了我们一次提升C的机会。

凡是可以从书本中找到的,相信我们基本都可以学会,很多初学者并不是不够聪明或者勤奋,只是缺少方向性的指导罢了。

对于这欠缺的知识点我们稍微花点时间就可以掌握,剩下的就是不断地实践调试。

这里我为大家推荐一本C语言的书籍C和指针。

2、程序架构设计思想的欠缺这个比较难搞,很多C语言学习得挺好好的人,也比较难掌握。

还好我们遇到了STM32的库,这给了我们一个学习和提升C语言绝佳的机会。

库的整个架构是如何搭建起来的,代码上是如何如何一步一步写出来的:

从寄存器映像开始,到寄存器的封装,然后到函数的编写,到每个外设函数对应的驱动文件,这里面涉及到了大量的条件编译,文件包含的思想,对应刚写过几行51单片机的初学者来说简直就是噩梦。

但是,如果你把这一系列的关系弄明白了,那么对库的整个架构也了解的差不多了,以后你就不用嚷嚷着说要操作寄存器了。

如果你一开始不喜欢用库,对库开发很忌惮,那么请自问:

是不是我的C语学得不够好。

库是一种全新的学习方法,是一种潮流,我更把它看做是与C语言的又一次历练和提升。

是否用库,只差你一个闪亮的回眸。

零死角玩转零死角玩转STM32F1系列系列第第7页共页共53页页1.3用寄存器点亮LED为了顺利过渡到库开发,在STM32编程的开始,我们对照51点亮一个LED的方法,给大家演示一下STM32如何用操作寄存器的方法点亮一个LED,然后再慢慢讲解到底什么是库,让大家知道库跟寄存器的关系。

1.3.1用51点亮一个LED在用STM32点亮一个LED之前,我们先来复习下用51如何点亮一个LED。

硬件上我们假设51单片机的P0口的第0位接了一个LED,负逻辑亮。

如果我们要点亮这个LED,代码上我们会这么写:

1P0=0XFE;

/总线操作点亮LED这时候我们就把LED点亮了,如果要关掉LED,则是:

1P0=0XFF;

/总线操作关闭LED这里面我们用的是总线操作的方法,即是对P0口的8个IO同时操作,但起作用的只是P00。

除了这种总线操作的方法,我们还学习过位操作,利用51编译器的关键字sbit,我们可以定义一个位变量:

1sbitLED=P00;

那么LED=0;

就点亮了LED,LED=1;

就关闭了LED。

为了让程序看起来见名知义,我们定义两个宏:

1#defineON02#defineOFF1点亮和关闭LED的代码就变成了:

1LED=ON;

/位操作点亮LED2LED=OFF;

/位操作关闭LED稍微整理下代码,整体的效果就是:

1/假设51单片机的P00口接LED,负逻辑

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1