首页 > 应用 > 单片机应用
[导读]STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置'1'或置'0'。 GPIOx_BSRR的高16位中每一位对应端口x的每个位,对高16位中的某

STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置'1'或置'0'。

本文引用地址: http://www.21ic.com/app/mcu/201807/779007.htm

GPIOx_BSRR的高16位中每一位对应端口x的每个位,对高16位中的某位置'1'则端口x的对应位被清'0';寄存器中的位置'0',则对它对应的位不起作用。

GPIOx_BSRR的低16位中每一位也对应端口x的每个位,对低16位中的某位置'1'则它对应的端口位被置'1';寄存器中的位置'0',则对它对应的端口不起作用。

简单地说GPIOx_BSRR的高16位称作清除寄存器,而GPIOx_BSRR的低16位称作设置寄存器。另一个寄存器GPIOx_BRR只有低16位有效,与GPIOx_BSRR的高16位具有相同功能。

举个例子说明如何使用这两个寄存器和所体现的优势。例如GPIOE的16个IO都被设置成输出,而每次操作仅需要改变低8位的数据而保持高8位不变,假设新的8位数据在变量Newdata中, 这个要求可以通过操作这两个寄存器实现,STM32的固件库中有两个函数GPIO_SetBits()和GPIO_ResetBits()使用了这两个寄存器操作端口。

上述要求可以这样实现:

GPIO_SetBits(GPIOE, Newdata & 0xff);

GPIO_ResetBits(GPIOE, (~Newdata & 0xff));

也可以直接操作这两个寄存器:

GPIOE->BSRR = Newdata & 0xff;

GPIOE->BRR = ~Newdata & 0xff;

当然还可以一次完成对8位的操作:

GPIOE->BSRR = (Newdata & 0xff) | (~Newdata & 0xff)<<16;

从最后这个操作可以看出使用BSRR寄存器,可以实现8个端口位的同时修改操作。 如果不是用BRR和BSRR寄存器,则上述要求就需要这样实现:

GPIOE->ODR = GPIOE->ODR & 0xff00 | Newdata;

使用BRR和BSRR寄存器可以方便地快速地实现对端口某些特定位的操作,而不影响其它位的状态。 比如希望快速地对GPIOE的位7进行翻转,则可以:

GPIOE->BSRR = 0x80; // 置'1'

GPIOE->BRR = 0x80; // 置'0'

或:

GPIOE->BSRR=1<<7;

GPIOE->BRR=1<<7;

如果使用常规'读-改-写'的方法:

GPIOE->ODR = GPIOE->ODR | 0x80; // 置'1'

GPIOE->ODR = GPIOE->ODR & 0xFF7F; // 置'0'

有人问是否BSRR的高16位是多余的,请看下面这个例子:

假如你想在一个操作中对GPIOE的位7置'1',位6置'0',则使用BSRR非常方便:

GPIOE->BSRR = 0x4080;

如果没有BSRR的高16位,则要分2次操作,结果造成位7和位6的变化不同步!

GPIOE->BSRR = 0x80;

GPIOE->BRR = 0x40


换一批

延伸阅读

[单片机应用] STM32F103内部弱上拉弱下拉电阻阻值的大小

STM32F103内部弱上拉弱下拉电阻阻值的大小

内部上拉下拉电阻阻值典型值40K欧。查STM32F103x6/STM32F103x8/STM32F103xB的DATASHEET的5.3.12 I/O port pin characteristics如下:红框中所示为内部弱上拉和下拉电阻阻......

关键字:STM32F103 弱上拉 弱下拉 电阻阻值

[单片机应用] STM32 CAN总线标识符过滤器难点解析

STM32 CAN总线标识符过滤器难点解析

CAN总线是目前应用非常多的一种总线,在汽车电子,航空航天中应用广泛,博主用的是战舰的STM32开发板。CAN的介绍和功能特点就不讲了,书本上网上都有,请大家在阅读本文前了解CAN总线协议的特点和功能。今天博主将和......

关键字:STM32 CAN总线 标识符 过滤器

[单片机应用] STM32F103RCT6的脉冲宽度调制(PWM)的输出设定

STM32F103RCT6的脉冲宽度调制(PWM)的输出设定

关键词:重映射连接在APB1(低速外设)上的设备有:电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看门狗、Timer2、Timer3、Timer4。连接在APB2(高速外设)上的设备有:UAR......

关键字:STM32F103RCT6 脉冲宽度 PWM 输出设定

[单片机新品] 加强物联网安全防御能力!ST推出STM32L5超低功耗微控制器

  加强物联网安全防御能力!ST推出STM32L5超低功耗微控制器

意法半导体(STMicroelectronics,简称ST)推出新的STM32L5系列®Cortex®-M33内核微控制器(MCU),为低功耗物联网设备带来先进的网络保护功能。 ......

关键字:物联网 微控制器 ST STM32L5

[单片机应用] 基于stm32的通用定时器详解

基于stm32的通用定时器详解

TM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。时钟源问题:名为TIMx的有八个,其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在APB1总......

关键字:stm32 通用定时器

[单片机应用] ARM的37个寄存器

ARM的37个寄存器

1.ARM的7种工作模式ARMv4和ARMv5的指令集规定了ARM的7种工作模式,由寄存器CPSR[4:0]决定(见下表),分别是用户(User)模式:ARM处理器正常的程序执行状态系统(System)模式:运行具有特权的操作系统任务快速中......

关键字:ARM 寄存器

[单片机应用] stm32 usb_istr.c 文件分析

stm32 usb_istr.c 文件分析

最近做一个项目,在stm32内部一部分用来存储自己的代码,开辟出一段空间来用来存储FPGA代码。每次开机实现stm32往FPGA写入代码的功能。向stm32某段空间写入代码的方法:(1)ST_LINK Utility软件通过JTAG,连接后......

关键字:stm32 usb_istr.c 文件分析

[单片机应用] STM32系列第22篇--I2C

STM32系列第22篇--I2C

简介:I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与I......

关键字:STM32系列 I2C

[测试测量] 磁翻板液位计因磁浮子导致的面板显示不正常原因及解决方

磁翻板液位计因磁浮子导致的面板显示不正常原因及解决方

作为磁翻板液位计的生产厂家,经常会有朋友来电或来邮件询问关于磁翻板液位计一些使用中的问题解决方法。本文就是一篇用户与技术人员互相沟通的一个实例,主要是涉及的磁翻板液位计的磁浮子使用问题的内容,经整理如......

关键字:磁翻板液位计 磁浮子 面板显示

我 要 评 论

网友评论

芯闻号

技术子站

更多

项目外包

更多

推荐博客