端口位设置/复位寄存器BSRR: 注:如果同时设置了BSy和BRy的对应位,BSy位起作用。

位31:16  BRy: 清除端口x的位y (y = 0…15)  
    这些位只能写入并只能以字(16位)的形式操作。  
    0:对对应的ODRy位不产生影响  
    1:清除对应的ODRy位为0

位15:0 BSy: 设置端口x的位y (y = 0…15)  
    这些位只能写入并只能以字(16位)的形式操作。 
    0:对对应的ODRy位不产生影响 
    1:设置对应的ODRy位为1

端口位复位寄存器BRR: 
位31:16  保留。  
位15:0 BRy: 清除端口x的位y (y = 0…15)  
     这些位只能写入并只能以字(16位)的形式操作。  
     0:对对应的ODRy位不产生影响  
     1:清除对应的ODRy位为0

使用方法:

1.混合改变 
需要置1的端口对应的位,在低16位里置1 
需要置0的端口对应的位,在高16位里置1, 
不改变的,都置0. 
然后写寄存器BSRR

2.改变引脚为低 
需要置0的端口对应的位,在低16位里置1, 
然后写寄存器BRR

3.改变引脚为高 
需要置1的端口对应的位,在低16位里置1 
高16为全0 
然后写寄存器BSRR

另外就是,STM32的库,GPIO_SetBits,GPIO_ResetBits,可以对多个引脚操作的,就是把需要操作的引脚用“|”(或运算)。

最方便的还是自己直接写寄存器(方法1)。

第一步:第一你要用的IO口 比如说要用A口的高8位定义 GPIOA_USE=0xF0 
 第二步:写BSRR寄存器。                            GPIOA->BSRR=data&&GPIOA_USE 
 第三步:写BRR寄存器。                             GPIOA->BRR=(~data)&&GPIOA_USE

假设data为8位要写入的数据:

GPIO_SetBits(GPIOD, data & 0xff00); 
GPIO_ResetBits(GPIOD, (~data & 0xff00));

也可以直接操作这两个寄存器: 
GPIOD->BSRR = data & 0xff00; 
GPIOD->BRR = ~data & 0xff00;

规则: 
一、置GPIOD->BSRR低16位的某位为'1',则对应的I/O端口置'1';而置GPIOD->BSRR低16位的某位为'0',则对应的I/O端口不变。 
二、置GPIOD->BSRR高16位的某位为'1',则对应的I/O端口置'0';而置GPIOD->BSRR高16位的某位为'0',则对应的I/O端口不变。 
三、置GPIOD->BRR低16位的某位为'1',则对应的I/O端口置'0';而置GPIOD->BRR低16位的某位为'0',则对应的I/O端口不变。

例如: 
1)要设置D0、D5、D10、D11为高,而保持其它I/O口不变,只需一行语句: 
  GPIOD->BSRR = 0x0C21;// 使用规则一

2)要设置D1、D3、D14、D15为低,而保持其它I/O口不变,只需一行语句: 
  GPIOD->BRR = 0xC00A;// 使用规则三

3)要同时设置D0、D5、D10、D11为高,设置D1、D3、D14、D15为低,而保持其它I/O口不变,也只需一行语句: 
  GPIOD->BSRR = 0xC00A0C21;// 使用规则一和规则二

GPIO——端口位设置/清除寄存器BSRR,端口位清除寄存器BRR的更多相关文章

  1. linux下通过iptables只允许指定ip地址访问指定端口的设置方法

    这篇文章主要介绍了linux下通过iptables只允许指定ip地址访问指定端口的设置方法,需要的朋友可以参考下. 首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的 ...

  2. CentOS7查询端口占用,清除端口占用的程序,开放端口,打开防火墙

    1.根据端口号得到其占用的进程的详细信息 netstat -tlnp|grep 80tcp        0      0 192.168.33.10:80            0.0.0.0:*  ...

  3. Win10如何设置防火墙开放特定端口 windows10防火墙设置对特定端口开放的方法

    Win10防火墙虽然能够很好地保护我们的系统,但同时也会因限制了某些端口,而给我们的操作带了一些不便.对于既想使用某些端口,又不愿关闭防火墙的用户而言,在Win10系统中设置防火墙开放特定端口就非常必 ...

  4. 水星Mercury路由器端口映射设置图文方法

    在一些内网的环境里,你可能需要把自己的内网的WEB服务器或者其他应用服务器设置成通过互联网可以访问,但是在内网我们是通过路由器共享上网的,外网无法访问到我们的内部服务器.那么这就需要我们通过" ...

  5. PIC16SCM设置不同IO功耗端口状态的影响

    最近做的PIC低功耗微控制器,因此,要设置不同的IO端口状态有关电源的情况测试,在系列万用表的方法来测量电流,供应链管理IO港是在地狱,无头整个系统驱动器.的是PIC16F690单片机. 思路例如以下 ...

  6. CentOS7设置ssh服务以及端口修改

    很多时候我们都是通过SSH 服务 来对 Linux 进行操作,而不是直接来操作Linux机器,包括对Linux服务器的操作,因此,设置SSH服务对于学习Linux来说属于必备技能(尤其是运维人员),关 ...

  7. 常用邮箱POP3 STMP服务器与端口号设置

    一.常用邮箱POP3 STMP服务器与端口号设置: [网易 163.126免费邮箱目前不直接开放smtp.pop3服务.有需要的用户可通过购买随身邮或邮箱伴侣及加入会员中心获得.从2006年11月16 ...

  8. iptables之NAT端口转发设置

    背景:服务器A:103.110.114.8/192.168.1.8,有外网ip,是IDC的一台服务器服务器B:192.168.1.150,没有外网ip,A服务器是它的宿主机,能相互ping通服务器C: ...

  9. IIS7.5和IIS8如何设置FTP的pasv端口范围

    如果不设置端口范围,在防火墙开启的情况下,连接FTP时可能出现列表错误的现象,下面介绍下如何设置FTP的pasv端口范围.. 一.首先打开IIS选择服务器会进入全局设置,再双击FTP防火墙支持 二.设 ...

随机推荐

  1. java数组实现红包的方法

    package Hongbao; import java.text.DecimalFormat; import java.util.Scanner; public class Hongbao { pu ...

  2. Kali linux 2016.2(Rolling)里的枚举服务

    前言 枚举是一类程序,它允许用户从一个网络中收集某一类的所有相关服务.

  3. form表单ajaxSubmit提交并验证

    html: <form class="register-form" action="{:U('')}" method="post"&g ...

  4. CF932C Permutation Cycle

    思路: 构造. 实现: #include <bits/stdc++.h> using namespace std; ]; int main() { int n, a, b; while ( ...

  5. Java数组的交集、并集

    // 求两个数组的交集 public static int[] SameOfTwoArrays(int[] arr1, int[] arr2) { // 新建一个空数组,用于存储交集,空数组长度应该为 ...

  6. e.Row.RowType == DataControlRowType.DataRow详解(转)

    代码语句如下: protected void OnRowCreate(object sender, GridViewRowEventArgs e)    {        if (e.Row.RowT ...

  7. API设计指南(译)

    API的设计在软件系统中的重要性不言而喻,在swift.org上看到一篇“API Design Guidelines”,虽然是就Swift而言,但对于其它语言也有不少可以借鉴的地方,在这里粗略翻译一二 ...

  8. H1B工作签证·绿卡:美国留学的两个关键步骤

    月20日在留美学生家长群聚会上的发言稿一.H1B签证系美国最主要的工作签证类别,发放给美国公司雇佣的外国籍有专业技能的员工,属于非移民签证的一种.持有H1B签证者可以在美国工作三年,然后可以再延长三年 ...

  9. workstation服务丢失 共享打不开 0x80070035

    这个问题困扰一个星期了,希望能帮到人.

  10. HDU_1542_(树状数组)

    Stars Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...