STM32的CRL CRH ODR BRR BSRR寄存器(逐句解析)

这篇具有很好参考价值的文章主要介绍了STM32的CRL CRH ODR BRR BSRR寄存器(逐句解析)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 一 端口配置寄存器(GPIOx_CRL 和 GPIOx_CRH)

这两个寄存器都是 GPIO 口配置寄存器, CRL 控制端口的低八位, CRH 控制端口的
高八位。寄存器的作用是控制 GPIO 口的工作模式和工作速度。
odr寄存器,stm32,嵌入式硬件,单片机
每组 GPIO 下有 16 IO 口,一个寄存器共 32 位,每 4 个位控制 1 IO如图
odr寄存器,stm32,嵌入式硬件,单片机
所以才需要两个寄存器完成。
比如 GPIOA_CRL 的复位值是 0x44444444 4 位为一个单位都是 0100,一共八个0100 ,以寄存器低四位说明一下。
首先位 1 0 00 即:设置  PA0 为输入模式,如图
odr寄存器,stm32,嵌入式硬件,单片机
3 2 01 即:设置为浮空输入模式,如图
odr寄存器,stm32,嵌入式硬件,单片机所以假如 GPIOA_CRL 的值是 0x44444444 ,那么 PA0~PA7 都是设置为输入模式,而
且是浮空输入模式。也就是说每一个框内设置的都是00:输入模式   01:浮空输入模式
odr寄存器,stm32,嵌入式硬件,单片机
上面这 2 个配置寄存器就是用来配置 GPIO 的相关工作模式和工作速度,它们通过不同的
配置组合方法,就决定我们所说的 8 种工作模式。
00 :模拟输入模式
01 :浮空输入模式 ( 复位后的状态 )
10 :上拉 / 下拉输入模式
在输出模式 (MODE[1:0]>00)
00 :通用推挽输出模式
01 :通用开漏输出模式
10 :复用功能推挽输出模式
11 :复用功能开漏输出模式
当MODE选择00,CNF为选择10时,代表着上拉/下拉输入模式。到底是上拉还是下拉呢?此时需要PxODR(端口输出数据寄存器)来确定,0为下拉输入,1为上拉输入。

二 端口输出数据寄存器(GPIOx_ODR)

该寄存器用于控制 GPIOx 的输出高电平或者低电平。
也就是说既能控制管脚为高电平,也能控制管脚为低电平。管脚对于位写1,GPIO 管脚为高电平,写 0 则为低电平。不过缺点是:会因中断而打断,关闭中断明显会延迟或丢失一事件的捕获,所以控制GPIO的状态最好还是用BSRR和BRR。
odr寄存器,stm32,嵌入式硬件,单片机

三 端口输入数据寄存器(GPIOx_IDR)

IDR寄存器低16位,每个位控制该组GPIO口的一个IO口,对应的是该IO口的输入电平。在输入模式下,可以读取I/O端口的电平值;在输出模式下,也可以读取I/O端口的电平值(在开漏输出时,读取到的I/O端口的电平值,不一定就是输出的电平值)文章来源地址https://www.toymoban.com/news/detail-764223.html

odr寄存器,stm32,嵌入式硬件,单片机

四 端口置位/复位寄存器(GPIOx_BSRR)

该寄存器也用于控制 GPIOx 的输出高电平或者低电平。
odr寄存器,stm32,嵌入式硬件,单片机
问:既然ODR 和 BSRR都用于控制GPIOx的输出高电平或低电平,为什么有了 ODR 寄存器,还要这个 BSRR 寄存器呢?
答:因为 BSRR 是只写权限,而 ODR 是可读可写权限。BSRR 寄存器 32 位有效。
对于低 16 位( 0- 15),往相应的位写 1(BSy=1) ,那么对应的 IO 口会输出高电平,往相应的位写 0(BSy=0) , 对 IO 口没有任何影响,
odr寄存器,stm32,嵌入式硬件,单片机
16 位( 16-31 ),对相应的位写 1(BRy=1) 会输出低电平,写 0(BRy=0) 没有任何影响, y=0~15 。 也就是说,对于 BSRR 寄存器,你写 0 的话,对 IO 口电平是没有任何影响的。
odr寄存器,stm32,嵌入式硬件,单片机因此要设置某个IO 口电平,只需要相关位设置为 1 即可。而 ODR 寄存器,要设置某个 IO 口电平, 首先需要读出来 ODR 寄存器的值,然后对整个 ODR 寄存器重新赋值来达到设置某个或者某些 IO 口的目的,而 BSRR 寄存器直接设置即可,这在多任务实时操作系统中作用很大。 BSRR寄存器还有一个好处,就是 BSRR 寄存器改变引脚状态的时候,不会被中断打断,而 ODR 寄存器有被中断打断的风险。

五 端口位清除寄存器(GPIOx_BRR) 

该寄存器只能改变管脚状态为低电平。 往相应的位写 1(BRy=1) ,那么对应的 IO 口会输出低电平,往相应的位写 0(BSy=0) , 对 IO 口没有任何影响,
odr寄存器,stm32,嵌入式硬件,单片机
odr寄存器,stm32,嵌入式硬件,单片机

GPIOx为(0..15)中任意接口
有了GPIOx->BRR清除寄存器,并且与GPIOx->BSRR高16为功能相同
假如你想在一个操作中对GPIOE的位1置'1',位15置'0',则使用BSRR非常方便:
GPIOE->BSRR = 0x80000002;
低16位中的0002将位1置‘1’( 低 16 ,对相应的位写 1 ,那么对应的 IO 口会输出高电平)高16位中的8000将位15置清零( 16 ,对相应的位写 1,那么对应的 IO 口会输出低电平),一步就可以做到。
如果没有BSRR的高16位,则要分2次操作,结果造成位1和位15的变化不同步
GPIOE->BSRR = 0x02;
GPIOE->BRR = 0x8000;

到了这里,关于STM32的CRL CRH ODR BRR BSRR寄存器(逐句解析)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32存储器映射以及寄存器映射

    目录 1.STM32的寻址范围? 2.存储器映射 3.存储器功能划分(以STM32F1为例) 4.寄存器映射 1.32位单片机有32根地址线,每根地址线有两种状态,导通或者不导通。 2.单片机内存地址访问的存储单元是按字节编址的,而不是bit。 比如我们要访问0x01这个地址,访问的其实是一个字节的空

    2024年04月23日
    浏览(50)
  • STM32-ADC电压采样实验(寄存器版)

    STM32F10X系列支持三路ADC,其ADC通道及对应IO口如下表所示: 其能接受的电压输入范围一般为0-3.3V(V REF- ≤ V IN ≤ V REF+ ),因此,如果需要测量超出0-3.3v量程范围的电压数据,需要在外围硬件增加分压电阻,将电路转换到0-3.3V量程范围内再进行采集。 这里用于做ADC采集的引脚使

    2024年02月15日
    浏览(55)
  • STM32 寄存器配置笔记——GPIO配置输出

           本文主要介绍GPIO 作为输出时的寄存器配置。包括时钟配置,输出模式配置。以STM32F10xxx系列为例,配置PA8、PD2端口作为输出,输出高/低电平。         1)GPIO外设时钟          通过查找STM32F10xxx中文参考手册得知,GPIO PORT口的时钟配置在RCC_APB2ENR寄存器的第2~6位,

    2024年01月24日
    浏览(72)
  • STM32的GPIO操作(寄存器&HAL)

    (注:此为乐某学习记录,若有出错的地方欢迎各位指出!) 本人使用的开发板的芯片是STM32H743XIH6,所以外设也是根据此芯片来介绍。 在使用HAL库配置的时候,需要安装STM32CubeMX。此软件可在ST官网下载,剩下的安装步骤比较简单,不会单独出篇进行讲解。 STM32CubeMX下载网址

    2024年02月04日
    浏览(53)
  • STM32 寄存器操作 GPIO 与下降沿中断

    寄存器本质就是一个开关,当我们把芯片寄存器配置指定的状态时即可使用芯片的硬件能力。 寄存器映射表则是开关的地址说明。对于我们希望点亮 GPIO_B 的一个灯来说,需要关注以下的两个寄存器:   对于我们实现希望点亮一个灯的需求来说,不仅需要配置配置 GPIO_B 的时

    2024年02月20日
    浏览(53)
  • STM32微机系统框架、内存、存储器、寄存器

    大家好,我是 杰哥嵌入式开发 最近在出定时器系列, 但是线下班有一些学生在学习完C语言之后, 在51接触各种寄存器和对软件代码各种操作是如何在单片机系统中起到作用的感到非常的不解, 经过我的初步分析,是对嵌入式微机系统的大概雏形系统框架不熟悉导致。 所以

    2024年02月06日
    浏览(59)
  • 【STM32调试】寄存器调试不良问题记录持续版

    记录一些stm32调试过程中:不易被理解、存在使用误区、不清不楚、是坑、使用常识等方面的一些记录。本记录只包含stm32的内核以及外设等寄存器的调试,不包含业务方面。 使用低功耗功能前是否需要打开PWR时钟? 是需要先打开PWR时钟的,否则无法唤醒。 睡眠模式、停机模

    2024年01月18日
    浏览(59)
  • keil5 查看stm32 寄存器的值

    1 查看芯片内部寄存器的值,首先是在仿真状态下,首先仿真,程序运行。 2 点击菜单栏的 View - System viewer ,右侧便会出现芯片的所有寄存器(如果没有,需要添加),点击要查看的寄存器,便会出现在侧边栏上 可以查看值,也可以直接设置寄存器的值。 3 如果没有出现,如下

    2024年01月24日
    浏览(52)
  • 【STM32 CubeMX】HAL库的本质读写寄存器

    在嵌入式系统开发中,HAL(Hardware Abstraction Layer)库是一个重要的概念,它提供了一个抽象层,使开发者可以更容易地编写可移植的代码,而不必担心底层硬件的细节。STM32CubeMX是一款由STMicroelectronics提供的工具,用于生成STM32微控制器的初始化代码,其中包括了HAL库的使用。

    2024年02月20日
    浏览(56)
  • 【【萌新的STM32学习25--- USART寄存器的介绍】】

    STM32–USART寄存器介绍(F1) 控制寄存器1 (CR1) 位13: 使能USART UE 0: USART分频器和输出被禁止 1: USART模块使能 位12 : 配置8个数据位 M 该位定义了数据字的长度,由软件对其设置和清零 0: 一个起始位,8个数据位,n个停止位 1: 一个起始位,9个数据位,n个停止位 有效数

    2024年02月09日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包