51单片机系列开发之基于STM32开发板_点亮一个LED并其闪烁

开发环境:

开发板:STM32PZ6806L
  芯片:ARM_STM32F103_ZE

开发所需资料:

STM32F1XX芯片电路原理图
STM32F1XX系列芯片手册

XX代表系列版本号,ARM公司开发的芯片大多数都是一样的,除非增加了新功能才会更正芯片手册,XX就代表该文档支持系列版本!

第一步,分析电路原理图

首先第一步打开STM32F1XX芯片的电路原理图:


找到LED模块电路的原理图,其次也是看一下这个板子上有没有设计LED电路模块:


找到之后代表该板子已经设计了LED电路模块,那么放大来看一下:


从LED模块电路原理图中可以看到,每个LED(LED1-LED8)都有一个二极管(D1-D8)连接着

二极管的两个引脚具有正负极区分,从原理图中可以得知该二极管的正极对应着LED,而负极对应着输入源


所以如果我们想要让LED灯亮起,首先要经过连接在LED上的二极管,所以我们要让该二极管工作,从输入源里输入一个低电平,即可让二极管的负极一端引脚工作,相反输入高电平则二极管的负极一端不会产生任何作用!

(二极管极性连接识别方法)


并且输入源中设有两个排阻,每个排阻中有四个电阻,用于简化PCB板设计


但内部电阻作用原理图并没有明确给出,博主推断应该是上拉下拉电阻用于限流作用


除此之外同时又得知该电路模块最大承受电平值为+3.3v(0-3.3v)


LED模块的电路原理图看懂了,那么就要知道LED模块连接在处理器的哪个总线上!

为什么需要知道在哪个总线上?

这里就拿找人打个比喻吧:

就像找人一样,你知道他是谁,是干什么的,但是你现在想要找到他,是不是要去他家里?

那么去他家里之前你要知道他家在哪儿,房子编号是多少,有个具体的路线和编号就可以轻而易举的找到他家,并找到他!

那么接下里我们看一下电路原理图中,CPU这一块的连接电路原理图:


放大一点儿:



由此可以看到,每个LED模块(1-8)分别对应着PC特殊功能寄存器(0-7)

知道LED对应的特殊功能寄存器,那么就要知道该特殊功能寄存器挂设在哪个总线上,映射地址是多少!

开始查找之前给大家补充一点儿知识:

什么是特殊功能寄存器?什么是映射地址?

答:特殊功能寄存器本质上也是一个存储单元和内存里的存储单元没有什么区别,只是内存里的存储单元用于存储单字节数据的,而微型处理器内部的存储单元往往都是4字节或8字节作为一个单元,用于做特殊计算/操作时用到的,比如DS段寄存器用于存储地址,它的大小决定了CPU的寻址能力!CPU会根据DS寄存器里的地址来寻址,再则地址总线位宽也要和DS寄存器一致,假如说地址总线位宽小于DS寄存器那么地址总线将没有能力表示出大于自身的地址!

什么叫映射地址?

答:这里做个比喻,假如说你家住某某小区xx栋楼xx号室,那么这个地址就是你房间的地址,每次点外卖或者快递我们一般都会填写这个地址,那么快递员有了这个地址就可以轻而易举的找到我们的房间并把货物递送给我们,这个地址就是你房间的映射,而对特殊功能寄存器的映射如上所说,就是把开发板上的一个物理地址分配给它,就叫做地址映射!

相关文章:深度理解“CPU内部寻址方式” 详解:物理地址,虚拟地址,内存管理,逻辑地址之间的关系

言归正传,知道LED模块对应的特殊功能寄存器,我们就可以到STEM32的芯片手册里查看芯片各个寄存器以及地址映射和总线之间的介绍

打开STM32的芯片手册


在2.3.30页找到待有对PC特殊功能寄存器总线挂接介绍的原理图:


找到PC特殊功能寄存器:


如上图可以看到PC特殊功能寄存器是由GPIO端口为C的GPIO管脚所连接的,而GPIO端口C挂设到APB2总线上,而APB2挂设在AHB2总线上!

注意这个挂设怎么区分的,首先GPIO端口C实则上是一组GPIO管脚组成的,只不过该管脚负责PC特殊功能寄存器的I/操作,其他GPIO管脚负责其它的特殊功能寄存器,列如PE,PB等,ARM为了加以区分,让开发人员更易读,所以为其进行了区分,也就是成了端口C,端口E,端口G等,分别对应不同的特殊功能寄存器。

就像人一样,你想要让某个人过来帮你忙,你是不是首先要叫他的名字,他才知道你是在叫他,如果在很多人的情况下,谁也不知道你在叫谁!

言归正传,那么有了名字要工作是不是要分组?让某一组去做或管理某个事情,形成一个项目体系,所以ARM为其进行了分组,方便于管理,GPIO端口C和其他端口被规划到了APB2总线上,也就是这一组的名字称为APB2,而APB2呢又被规划到了AHB2总线上,所以对应情况是:GPIO端口C和其他端口=APB2而APB2同时也等于AHB2,方便于区分和管理,且形成一个项目体系!


这里从上图中可以知道,PC特殊功能寄存器所使用的总线连接引脚是GPIO,那么我们要查一下关于ARM是如何设计开发板的GPIO引脚的!

可以通过:STM32 Reference Manual这本开发文档里找到对GPIO引脚的设计,该开发文档对应所有芯片的GPIO引脚设计,除了一些特定的需要重新设计的开发板,因为ARM的系列STM开发板引脚设计所使用的方法都是基于此开发文档的,不会变更,由于文档较大,篇章较多建议下载中文版的:

可以在8.1里找到对GPIO引脚的设计图:


从上图可以看到,STM32所使用的GPIO引脚内部带有保护二极管,用于防止过高过低的不正常电压进入芯片如果电压过高的话保护二极管会被烧掉,因为二极管会首先吸收电压判断电压值是否正确在让其进去芯片,倘若电压过高可能会直接烧掉二极管


接了两个是因为一个对应输入一个对应输出,GPIO是属于I/O引脚!

其次还有上拉下拉电阻,用于矫正电平!


为什么有了保护二极管还需要上拉下拉电阻?

答:不同的模块所使用的电压不同,因为这些模块并非开发板自带的,而是后面焊接上去的,这些模块都是不同的硬件工程师开发的,所以接上上拉下拉电阻,可以把一个不确定的电压矫正成与模块所使用的正常电压!

其余的我们暂时不看,因为通过这些信息即可得知,我们这发送电压时无需考虑电脑所使用的电压是否与开发板子一直,当然要确定你的电脑电压不能太高!一般来说家用电脑都在3.xv左右,所以这种电压保护二极管是可以完全承受的!

知道了挂设总线,就像上面打的比喻,知道了名字想要找到他让他帮忙是不是需要知道他家在哪?就算打电话是不是也要知道电话号码?

那么我们在芯片手册里找一下特殊功能寄存器的映射:

可以在芯片手册的第4章找到总线映射地址,注意特殊功能寄存器是连接在总线上的,所以也就是总线映射地址:


下面来说一下上面的地址映射介绍


从该图中可以得出,ARM将地址空间划分为了四块,每块大小为512-Mbyte(MB),名称叫做bloc x以及作用

从上可以的值,ARM将地址空间划分为了四块,每块大小是512MB,4*512=4G空间,也就是说ARM将4G空间划分为了4块,每块512MB,其作用我们看下图:


如上图可以的值,每块空间的作用是:


讲解这些只是为了让大家对ARM的区域划分有个认识,最重要的地方还是地址映射:


右侧ARM将划分四块地址,每块地址的总线名都给写出来了,那么就可以在地址映射表里找到与我们所需要操作的总线名和地址,便可以通过C语言指针方式来操控它:


猜你喜欢

转载自blog.csdn.net/bjbz_cxy/article/details/80081886