STM32使用BSRR和BRR寄存器快速操作GPIO端口

发布者:BlissfulMoments最新更新时间:2017-11-07 来源: eefocus关键字:STM32  BSRR  BRR  寄存器  GPIO端口 手机看文章 扫描二维码
随时随地手机看文章

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

      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


关键字:STM32  BSRR  BRR  寄存器  GPIO端口 引用地址:STM32使用BSRR和BRR寄存器快速操作GPIO端口

上一篇:STM32一种从用户代码调用系统存储器中Bootloader 的方法
下一篇:stm32使用FPU时注意事项

推荐阅读最新更新时间:2024-03-16 15:43

STM32单片机外部中断配置讲解
01 单片机外部中断简介 所谓外部中断,就是通过外部信号所引起的中断,如单片机引脚上的电平变化(高电平、低电平)、边沿变化(上升沿、下降沿)等。51单片机有5个中断源,其中有两个是外部中断,分别为INT0和INT1,INT0被分配在P3.2引脚,INT1被分配在P3.2引脚,也即是说如果使用51单片机的外部中断0,则必须将信号接在P3.2上,否则无效。 02 举例说明什么是中断 单片机在执行程序时有两种方式: 查询方式 中断方式 所谓查询方式就是单片机一遍一遍的扫描,查看所监视的目标有没有发生变化,是一种主动式的监视方法,用一个成语可以很客观的描述:守株待兔。 所谓中断方式就是单片机不主动去监视目标,而是目标主动通知单片机状态发
[单片机]
STM32中SYSTICK定时器、端口复用和重映射
第一部分STM32SYSTICK定时器: systick 定时器按照字面意思就知道是一个简单的定时器,主要用来做延时,以避免MCU的资源浪费。 它是一个24位的倒置计数器,倒置的意思就是从最大数字递减到0,SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常,即用于中断系统。 systick有四个寄存器分别如下: 1、CTRL SysTick 控制和状态寄存器 LOAD :主要用于使能 systick定时器,异常请求,选择内部还是外部时钟,计数是否为零标志位 2、SysTick 自动重装载除值寄存器 :就是存放计数递减到零以后所自动装载的值。 3、VAL SysTick 当前值寄存器 CALIB :按照意思
[单片机]
STM32 PCM1770调试
本文初步介绍了PCM1770配置方法与调试过程,希望能起到抛砖引玉的作用。 PCM1770是24位的DAC,支持I2S信号输入,可直接驱动耳机,也可加后级功放来驱动喇叭,应用电压范围为-0.3V至4V,普通的3V3就可以。 如图1所示,该DAC对22KHZ以上频率有60dB的衰减,相当于自带一个低通滤波,减少了后级的干扰。 如图2所示,该DAC在3V3电压条件下有100dB的信噪比,72dB的分离度确实低了点,用来玩玩还行。 图1
[单片机]
STM32库函数之断言
我们在学STM32的时候函数assert_param出现的几率非常大,上网搜索一下,网上一般解释断言机制,做为程序开发调试阶段时使用。下面我就谈一下我对这些应用的看法,学习东西抱着知其然也要知其所以然。 4 断言机制函数assert_param 我们在分析库函数的时候,几乎每一个函数的原型有这个函数assert_param();下面以assert_param(IS_GPIO_ALL_PERIPH(GPIOx));为例说一下我的理解,函数的参数IS_GPIO_ALL_PERIPH(GPIOx),我们可以寻找到原型 #define IS_GPIO_ALL_PERIPH(PERIPH) (((*(uint32
[单片机]
<font color='red'>STM32</font>库函数之断言
STM32的看门狗配置详情解说
  stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。独立看门狗有自己独立的40Khz时钟,不存在使能问题;而窗口看门狗使用的是PCLK1时钟,需要先使能时钟。以下是关于看门狗的具体说明:   ①独立看门狗是限制喂狗时间在0-x内,x由你的相关寄存器决定。喂狗的时间不能过晚。   ②窗口看门狗,所以称之为窗口就是因为其喂狗时间是一个有上下限的范围内,你可以通过设定相关寄存器,设定其上限时间和下限时间。喂狗的时间不能过早也不能过晚。   显而易见的是,独立看门狗比较简单,容易理解。这里,主要对窗口看门狗的详细含义作具体说明。   窗口看门狗介绍:   看门狗的上窗口就是配置寄存器WW
[单片机]
<font color='red'>STM32</font>的看门狗配置详情解说
stm32 CubeMx 实现SD卡/sd nand FATFS读写测试
1. 前言 SD卡/SD nand是嵌入式开发中常为使用的大容量存储设备,SD nand虽然当前价格比SD卡高,但胜在价格、封装以及稳定性上有优势,实际操作和SD卡没什么区别。 关于 SD卡/SDnand 的驱动,有了CubeMx之后其实基本上都自动生成了对应的驱动了,基本上把驱动配置一下之后,自己写一些应用就可以完成基本的读写了,同时关于FATFS文件系统,也可以直接采用CubeMx配置,也不用自己移植,因此使用STM32开发这些还是比较爽的!不过使用过程中也有一些坑,自动生成的驱动有时候也还是有一些bug,因此还是需要大家对对应驱动有一定的了解。 本文将主要分享关于使用 CubeMx 配置 stm32 的工程,通过SD
[单片机]
<font color='red'>stm32</font> CubeMx 实现SD卡/sd nand FATFS读写测试
STM32三种复位形式
STM32F10xxx支持三种复位形式,分别为系统复位、上电复位和备份区域复位。 一、系统复位 系统复位将复位所有寄存器至它们的复位状态。 当发生以下任一事件时,产生一个系统复位: NRST引脚上的低电平(外部复位) 窗口看门狗计数终止(WWDG复位) 独立看门狗计数终止(IWDG复位) 软件复位(SW复位) 低功耗管理复位 可通过查看RCC_CSR控制状态寄存器中的复位状态标志位识别复位事件来源。 软件复位通过将Cortex™-M3中断应用和复位控制寄存器中的SYSRESETREQ位置’1’,可实现软件复位。请参考Cortex™-M3技术参考手册获得进一步信息。低功耗管理复位在以下两种情况下可产生低功耗管理复位: 在进入待机
[单片机]
<font color='red'>STM32</font>三种复位形式
X9241数字电位器的原理及在DSP中的应用
1 X9241 概述   X9241是Xicor公司生产的一种集成数字电位器。它在单一芯片上集成了4个10kΩ数字电位器,每个电位器的滑动端共有64个离散的调节节点,并有4个8bit的E 2 PROM数据寄存器以及一个滑刷控制寄存器(WCR)。用户可以通过相应指令使电位器的WCR(滑刷控制寄存器)与某个数据寄存器相关联,也可以直接控制WCR以达到改变电位器滑动端位置的目地。X9241芯片具有I 2 C总线接口,可以实现寄存器映射、改变滑刷位置以及进行电位器级联等操作。X9241采用20引脚双列直插封装,其引脚排列如图1所示。其中VWi(i=0~3)为四个独立的10kΩ电位器的滑动端;VLi(i=0~3)分别为四个电位器的两
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved