STM32 通用输入输出端口GPIO BRR、BSRR、ODR寄存器详解
详细页面:http://alanzjl.sinaapp.com/2015/02/gpio_brr_bsrr_odr/
BRR、BSRR、ODR都是用来控制16位针脚的。
其中,BRR和ODR高16位都不可用(Reserved),使用低16位控制针脚,而BSRR高16位和低16位皆可用,都用来控制16位针脚。
BRR与BSRR使用方法
BRR和BSRR的最显著用处就是可以只改变某一个或某几个针脚的值而不改变其他。
1.BRR:如果程序对其某针脚赋值0,则该针脚维持原值不变,比如BRR的位0本来为1,则GPIOx->BRR=0x0语句之后该位值还为1。若对其赋值1,则该位值变为0(即复位值),比如BRR的位0本来为1,则GPIOx->BRR=0x01语句之后该位值为0。
2.BSRR:对于高16位,与BRR相同。对于低16位,如果程序对其某针脚赋值0,则该针脚维持原值不变。若对其赋值1,则该位值变为1,比如BSRR的位0本来为0,则GPIOx->BRR=0x01语句之后该位值为1。
举个例子,GPIOx->BRR=0x01与GPIOx->BSRR=0x01<<16相同,后者为通过0x01左移16位来控制高16位。
BRR、BSRR都可以做到假如只想改变位0的值,则不论其他位为何值,用一个等号就可以完成。
而ODR改变时则是全部改变。
比如16位本来为1010101010101010,经过GPIOx->BSRR=0x01后变为1010101010101011,而经过GPIOx->ODR=0x01后变为0000000000000001。
借用之前看到的一个例子,
GPIOE->BSRR = 0x80; // 置’1'
GPIOE->BRR = 0x80; // 置'0'
如果使用常规'读-改-写'的方法:
GPIOE->ODR = GPIOE->ODR | 0x80; // 置’1'
GPIOE->ODR = GPIOE->ODR & 0xFF7F; // 置’0'
二者作用相同。
附上官网手册截图:
STM32 通用输入输出端口GPIO BRR、BSRR、ODR寄存器详解相关推荐
- 封装成jar包_通用源码阅读指导mybatis源码详解:io包
io包 io包即输入/输出包,负责完成 MyBatis中与输入/输出相关的操作. 说到输入/输出,首先想到的就是对磁盘文件的读写.在 MyBatis的工作中,与磁盘文件的交互主要是对 xml配置文件的 ...
- 【小趴菜STM32开发笔记】---- 01输入输出端口GPIO
目录 1 GPIO概述 2 GPIO的特性 3 两个重要概念 3.1 端口(PORT): 3.2 引脚(PIN): 4 电路基本结构 4.1 端口寄存器组 4.2 输入驱动器 4.3 输出驱动器 4. ...
- 【STM32学习笔记】(13)——外部中断详解
EXTI 简介 EXTI(External interrupt/event controller)-外部中断/事件控制器,管理了控制器的 20 个中断/事件线.每个输入线可以独立地配置 ...
- STM32基于IIC通信协议的OLED模块使用(详解)
目录 前言 一.项目内容 实验简介 二.IIC模块 1.IIC协议简介 2.物理层 3.协议层 4.硬件IIC代码配置 5.软件模拟IIC配置 1.起始信号与停止信号 2.从机应答信号 3.数据的有效 ...
- edtext 从右边开始输入 安卓_Android开发之EditText属性详解
1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以".&quo ...
- LPC201X的PLL(锁相环|倍频器)设置,GPIO(通用输入输出端口)【三】
1.PLL操作的寄存器 2.PLL频率的计算
- STM32 PWM输出原理和直流电机PWM驱动原理详解及例程
这次讲一讲STM32输出PWM的原理以及PWM可以作为信号传输数据的原理. PWM会有很多地方用到,有控制灯的亮度,控制电机,控制舵机或者其他一些外设,有时候你的单片机所输出的PWM是作为信号去控制, ...
- 【STM32】RTC实时时钟,步骤超细详解,一文看懂RTC
什么是RTC RTC (Real Time Clock):实时时钟 RTC是个独立的定时器.RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能.修改计数器的值可以重新设置当 ...
- STM32 之十一 LL 库(low-layer drivers)详解 及 移植说明
最新项目中需要使用 STM32L476 的片子.在选择片子时,资源的多少成为了一个比较重要的考量.在斟酌一番之后,我决定采用 LL 库来实现本次的功能.下面就以 STM32L476 为例来介绍一下 ...
最新文章
- jmeter笔记(8)--关联
- jQuery ajax contentType processData 笔记
- struts2文件下载出现Can not find a java.io.InputStream with the name的错误
- 支持4k输出的linux开发板,Linux 5.12率先开始支持SiFive的RISC-V FU740开发板
- 【数据库】使用PLSQL工具时,ORACLE客户端连接串的配置
- Java线程池ThreadPoolExecutor源码分析
- Linux设备驱动之字符设备(二)
- python 多线程伪_Python每日3题什么是死锁?
- python os 的坑_Python踩坑之旅其二裸用os.system的原罪
- 腾讯手游助手吃鸡一直服务器繁忙,腾讯手游助手里的吃鸡鼠标移动太快怎么办?...
- 【贪玩巴斯】数字信号处理Digital Signal Processing(DSP)——第二节「离散时间信号详解」2021-09-29
- CATIA飞机协同设计制造图形工作站配置方案
- OR-Tools工具介绍以及实战(从入门到超神Python版)
- 计算机配置更新太慢,电脑更新速度慢怎么办
- 树的深度 递归非递归实现
- 速看!没有比这更全面的 Firebase 介绍!
- (手机自适应)成人高考自考资讯网源码 织梦dedecms模板
- 什么是损失函数?什么是梯度
- Mac远程连接Windows桌面的软件推荐
- 重要接口部件——SRAM