当前位置: 首页 > news >正文

华夏名网修改网站信息济南seo关键词优化方案

华夏名网修改网站信息,济南seo关键词优化方案,b2c网站开发核心技术,wordpress自定义菜单插件一、前言 学习STM32一阵子以后,相信大家对STM32 GPIO的控制也有一定的了解了。之前在STM32 LED的教程中也教了大家如何使用寄存器以及库函数控制STM32的引脚从而点亮一个LED,之前的寄存器只是作为一个引入,并没有深层次的讲解,在教…

一、前言

        学习STM32一阵子以后,相信大家对STM32 GPIO的控制也有一定的了解了。之前在STM32 LED的教程中也教了大家如何使用寄存器以及库函数控制STM32的引脚从而点亮一个LED,之前的寄存器只是作为一个引入,并没有深层次的讲解,在教程中,也没让大家有太多的了解。既然学习STM32有一段时间了,那我们能不能从现象推导到本质,去了解一下STM32 引脚控制的本质原理。那么本次教程,就来为大家讲解一下STM32引脚驱动的三个关键寄存器BSRR、BRR、ODR,相信看了本次教程以后,你对STM32会有更深层次的理解。如果你准备好了,那就让我们开始吧!

二、谁适合本次教程

        因为已经涉及到寄存器的操作与讲解了,所以请学习本次教程的小伙伴需要具备一定的STM32基础以及对十六进制转二进制比较熟悉。

三、资料的准备

        本次使用STM32F103C8T6进行演示,所以请大家自己准备一块STM32F103的开发板。本次教程中,我们需要去翻阅STM32F103的手册,所以大家准备一份STM32F103的数据手册,相信学习过一阵子STM32的小伙伴应该都有这个手册吧,这里我就不放了。

四、BSRR、BRR、ODR寄存器讲解

        在我们日常的代码或者一些模块的代码中,可能经常会看到下面这样的写法:

GPIOC->BSRR=0x00002000;

又或者是这种写法:

GPIOC->ODR=0x00002000;

我们可以很明显的看到,这些写法都是在控制GPIO的电平,那么这些写法之间都有什么区别呢?哪种写法更好呢?

1.BSRR

        这里我们首先来看BSRR,这里我们打开STM32F10的中文手册,找到BSRR寄存器处:

下面我们就来解释一下这个寄存器的作用,很明显的看到,这里寄存器的位下面只有一个W,表示这个寄存器只是可写的:

这里大家只需要记住这个寄存器只能写就可以了,后面会为大家讲解为什么。

我们再往下看,下面的寄存器详细描述中,将寄存器分为了两个部分来讲,分别是0-15位,以及16-31位,总的来说就是将这个寄存器分为了高十六位和低十六位:

这里我们先来看位16-31,这些位都被叫做BR位,这里的R即Reset,手册中的描述是这些位是用于清除端口0-15:

简单来说,16-31位就是用于将GPIO口拉低的。假如这里我想控制GPIOC,那么我就可以使用BSRR中的16-31位将GPIPC的0-16引脚全部拉低。

在下面也提到了,这些位只能写入并且只能一十六位的形式写入:

我们继续往下看,如果BSRR的16-31位写0不会对ODR产生影响,如果写1,则ODR的对应位就会为0,从而引脚电平被拉低。至于这里为什么我们写ODR的位就可以直接控制引脚我们后面讲解ODR寄存器的时候会讲。

然后我们来看BSRR的0-15位,这些位从手册中可以看到,是用于置位GPIO口的某一位的,0-15位被叫做BS位,这里的S即Set:

同样的,假如我还是控制GPIOC,那我就可以通过BSRR下的0-15位将GPIOC的0-15引脚都置高。同样的,下面也提到了,如果给0-15位的某一位置0,则ODR对应的位不产生影响。如果给0-15位置1那么对应的ODR位就会置1从而对应的引脚置1:

这里大家就可能有疑惑了,如果我将一个引脚对应BS位和BR位都置位,会怎么样?其实在手册中已经提到了,如果这样做的话,只有BR位会起作用:

看了上面的内容,相信大家对BSRR寄存器有一定的了解了,简单来说,它就是一个控制ODR寄存器对应位高低电平从而控制引脚的一个寄存器,在官方的库函数中,也使用到了BSRR寄存器来控制引脚电平:

这里大家可能又有疑问了,为什么我这里要通过BSRR来控制ODR从而来控制引脚的电平,我不能直接控制ODR吗?这个问题,同样也留到我们讲解ODR的时候再做讲解。

2.BRR

        BRR的功能和BSRR非常接近,以至于现在一些高端的芯片已经阉割了BRR寄存器,不过我们现在还是可以来看看,我们在手册中找到BRR对应的描述:

我们可以看到BRR寄存器的高十六位是没有作用的:

并且低十六位和BSRR一样,只能写:

这里我们直接看寄存器描述,这里提到了,0-15位主要用于清除端口的位,也就是为指定端口拉低。这里的用法其实和BSRR的高十六位一样,都是通过给对应的位置1从而给ORD对应的位置0从而控制引脚电平。如果你理解BSRR的话,理解BRR也不是什么难题,这里就不多说了:

3.ODR

        现在我们来讲解ODR,前面已经为大家留了许多问题在ODR这里了,现在我们一一来解决。

我们同样先在手册中找到ODR所在的位置:

这里我们可以看到,ODR的高十六位同样作为保留位。然后就是低十六位,这里的低十六位我们简单来说就是,对应了GPIO的十六个引脚。我们给ODR对应的位置高或者置低,那么对应的GPIO引脚就会被置对应的电平。假如我么就将ODR的第12位置1,那么对应的GPIO12就会被置1。在手册中也提到了,我们的BSRR寄存器可以对每个ODR位进行独立的设置和清除:

这就是为什么我们要通过BSRR来操作ODR从而来操作GPIO。因为BSRR可以对ODR的每一位进行操作并且不影响别的位。如果我们直接操作ODR的话,要实现不影响别的位的效果就需要将ODR的值先读出来然后再写入对应的值最后整体写入ODR,这也是我们常用的读-改-写的操作流程。那么大家可能又有疑问了,为什么我们的BSRR可以直接操作ODR。

这里我们在手册中,找到“8.1.8输出配置”,这里我们主要是需要下面的图:

我们将下面的图单独拿出来:

这里我们可以看到,我们的写入可以写到“位设置/清除寄存器”,这个“位设置/清除寄存器”是什么?这不就是BSRR吗?:

然后,我们写入BSRR以后,BSRR直接就写入了一个名为“输出数据寄存器”的地方,这个输出数据寄存器,不就是我们的ODR吗?:

相当于,BSRR一旦收到数据,就会发送给ODR,从而对ODR的位进行操作。BSRR发送完数据以后,就直接将内部存储的值扔掉了,本身就不保存值,所以读取BSRR本很就没有意义。这样也印证了为什么之前我们说BSRR不能读取。

最后,我们可以看到,我们的ODR上有一条单独的线,是用于读写ODR的,这些表示ODR可以被直接读写:

其实,总的来说,为什么我们不直接操作ODR呢?因为我们操作BSRR可以直接操作ODR的值从而不影响别的引脚。为什么我们操作BSRR可以直接操作ODR呢?因为它们在物理总线层面被链接在了一起,并且操作BSRR可以直接操作ODR的位。为什么BSRR不能读取呢?因为BSRR有了值以后直接就拿给ODR了,本身不存储值,没有读取的必要。

假如我们执行下面两段代码,在实际效果上应该是一样的:

#include "stm32f10x.h"                  
int main(void)
{RCC->APB2ENR=0x00000010;GPIOC->CRH=0x00300000;GPIOC->BSRR=0x00002000;while(1){}
}
#include "stm32f10x.h"                  
int main(void)
{RCC->APB2ENR=0x00000010;GPIOC->CRH=0x00300000;GPIOC->ODR=0x00002000;while(1){}
}

但是,最后的最后,仍然建议大家在操作引脚时不直接操作ODR,虽然我们可以通过读-改-写的方法保留原本的值并且写入新值,但是,这样会增加我们的代码量并且增加出错的概率。

五、结语

        以上就是我对GPIO相关的寄存器的一些见解,如果有讲得不对的地方,还请大家指正,最后感谢大家的观看!

http://www.mmbaike.com/news/87663.html

相关文章:

  • 苏州做网站企业微信管理软件
  • 部署wordpress最应该用什么os网络营销就是seo正确吗
  • 中医网站模板seo外包如何
  • 平乡企业做网站网络服务提供者知道或者应当知道
  • 网站域名更改后怎么做映射线上推广方式有哪些
  • 深圳三级分销网站设计公司2023疫情最新情况
  • 成都招聘网站建设关键词搜索
  • 那间公司做网站好磁力猫最佳搜索引擎入口
  • 原创小说网站建设源码谷歌paypal官网
  • 网站建设如何做用户名密码如何推广平台
  • 做网站需要几个程序重庆seo和网络推广
  • 怎么做自己的网站弄商城佣金淘宝网络营销方式
  • 自己做的网站怎样赚钱吗app优化方案
  • 中国最好的网站制作源码网站
  • 阿里云做企业网站网络营销渠道类型有哪些
  • wordpress 工单优化设计五年级下册数学答案
  • 进一步推进网站建设app注册推广
  • 做网站哪个平台电商运营培训班
  • 泰州网站设计培训seo优化入门教程
  • 门户网站自查整改情况报告如何快速提升网站关键词排名
  • 未来对网站建设的需求郑州seo公司哪家好
  • 网站优化注意事项提升seo排名平台
  • 石家庄高端网站建设seo主要做什么工作
  • wordpress 301代码做网站排名优化的公司
  • 制作网站怎么做导航栏俄罗斯搜索引擎yandex推广
  • 苏州网站seo服务站长之家怎么用
  • 长沙市师德师风建设网站电商网络推广
  • 网站改版 报价seo服务优化
  • wordpress会员vip购买扩展谷歌seo课程
  • wordpress 门户网站新闻平台发布