历史上的今天
返回首页

历史上的今天

今天是:2024年08月26日(星期一)

正在发生

2018年08月26日 | STM32 GPIO 配置之ODR, BSRR, BRR 详解

2018-08-26 来源:eefocus

用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态.

ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平。

管脚对于位写1 gpio 管脚为高电平,写 0 为低电平

BSRR 只写寄存器:[color=Red]既能控制管脚为高电平,也能控制管脚为低电平。
对寄存器高 16bit 写1 对应管脚为低电平,对寄存器低16bit写1对应管脚为高电平。写 0 ,无动作

BRR 只写寄存器:只能改变管脚状态为低电平,对寄存器 管脚对于位写 1 相应管脚会为低电平。写 0 无动作。

刚开始或许你跟我一样有以下疑惑:

1.既然ODR 能控制管脚高低电平为什么还需要BSRR和SRR寄存器?
2.既然BSRR能实现BRR的全部功能,为什么还需要SRR寄存器?

对于问题 1 ------ 意法半导体给的答案是---

“This way, there is no risk that an IRQ occurs between the read and the modify access.”
什么意思呢?就就是你用BSRR和BRR去改变管脚状态的时候,没有被中断打断的风险。也就不需要关闭中断。

用ODR操作GPIO的伪代码如下:

disable_irq()
save_gpio_pin_sate = read_gpio_pin_state();
save_gpio_pin_sate = xxxx;
chang_gpio_pin_state(save_gpio_pin_sate);
enable_irq();

关闭中断明显会延迟或丢失一事件的捕获,所以控制GPIO的状态最好还是用SBRR和BRR

对于问题 2 ------- 个人经验判断意法半导体仅仅是为了程序员操作方便估计做么做的。

因为BSRR的 低 16bsts 恰好是set操作,而高16bit是 reset 操作 而BRR 低 16bits 是reset 操作。

简单地说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 );

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

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

从最后这个操作可以看出使用BSRR寄存器,可以实现8个端口位的同时修改操作。

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

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

如果没有BSRR的高16位,则要分2次操作,结果造成位7和位6的变化不同步! 
  GPIOE->BSRR = 0x80; 
  GPIOE->BRR = 0x40;

BSRR还有一个特点,就是Set比Reset的级别高,

就是说同一个bit又做Set又做Reset,最后结果是Set

要同步变化只要简单的 GPIOx->BSRR = 0xFFFF0000 | PATTEN;

即可,不用考虑哪些需要置1,哪些需要清零

从最后这个操作可以看出使用BSRR寄存器,可以实现8个端口位的同时修改操作。


推荐阅读

史海拾趣

Hitachi (Renesas )公司的发展小趣事

在电子行业中,Hitachi(日立)及其子公司如Renesas(瑞萨电子,原日立半导体部门独立后成立)的发展历史充满了技术创新、市场扩张与全球合作的精彩故事。以下是五个相关故事,每个故事均基于事实描述:

1. 从电机制造到半导体巨头的转型

日立公司成立于1910年,最初以生产电动机和矿山设备起家,旨在支持日本的工业化进程。随着技术的不断进步和市场需求的多样化,日立逐渐将业务扩展到电子领域。1960年代,日立开始涉足半导体技术,并在随后的几十年里,通过持续的研发投入和技术创新,逐步建立了在半导体行业的领先地位。1999年,日立半导体部门独立成为Renesas Technology Corporation(瑞萨科技),进一步专注于微控制器、模拟IC、电源管理IC等产品的研发与生产,为汽车电子、工业控制、消费电子等多个领域提供关键解决方案。

2. 全球化战略与市场拓展

进入21世纪,日立及Renesas积极实施全球化战略,通过在全球各地设立研发中心、生产基地和销售网络,加速其产品和技术的国际化进程。例如,Renesas在美国、欧洲和亚洲等地建立了多个研发中心,与当地企业和研究机构紧密合作,共同推动半导体技术的创新与发展。同时,通过并购和合作,Renesas不断扩展其产品线,提升在全球市场的竞争力。

3. 技术创新引领行业发展

日立及Renesas在半导体领域的技术创新是其持续发展的重要驱动力。多年来,公司投入大量资源进行研发,不断推出具有行业影响力的新产品和技术。例如,在汽车电子领域,Renesas的MCU(微控制器)和功率半导体产品广泛应用于发动机控制、车身控制、安全系统等关键系统,为汽车行业的智能化和电动化转型提供了重要支持。此外,Renesas还在物联网、工业4.0等新兴领域积极布局,推动相关技术的研发与应用。

4. 应对挑战与危机管理

在发展过程中,日立及Renesas也面临过诸多挑战和危机。例如,2011年日本东北太平洋地区地震和海啸对日立及Renesas的生产基地造成了严重影响。面对这一突如其来的灾难,公司迅速启动应急响应机制,调整生产计划,确保关键产品的供应不受影响。同时,公司还加强了供应链的多元化和风险管理,以应对未来可能发生的类似危机。

5. 可持续发展与社会责任

作为一家全球性的电子企业,日立及Renesas始终将可持续发展和社会责任视为企业发展的重要组成部分。公司致力于开发环保型产品和解决方案,推动绿色能源和节能减排技术的应用。同时,公司还积极参与社会公益活动,支持教育、环保和社区发展项目,展现了作为全球企业公民的责任感。例如,日立通过引入“光伏+储能”智慧能源体系,构建绿色生产基地,为实现“双碳”目标贡献力量。

以上五个故事展示了Hitachi(日立)及其子公司Renesas在电子行业中的发展历程和成就,体现了公司在技术创新、市场拓展、危机管理、可持续发展和社会责任等方面的努力和贡献。

EG & G Inc公司的发展小趣事

EG & G Inc公司成立于20世纪早期,最初专注于电子设备的研发和生产。公司凭借其技术优势和创新能力,在电子行业中逐渐崭露头角。在成立初期,EG & G Inc就与多家知名企业和研究机构建立了合作关系,共同推动电子技术的发展和应用。这些合作关系不仅为公司带来了技术上的支持,也为其在市场上的扩张奠定了基础。

潮州三环(Three-circle)公司的发展小趣事

进入新世纪,三环集团继续加大研发投入,力求在电子元件领域取得更多突破。2001年,公司投资生产多层片式陶瓷电容器(MLCC),这是一种广泛应用于电子设备的关键元件。三环集团凭借其强大的研发能力和技术实力,成功实现了MLCC的量产,并将其应用于手机、电子、通讯等多个领域。这一突破不仅提升了公司的市场竞争力,也进一步巩固了其在电子行业中的地位。

百事通科技(BUDDIES)公司的发展小趣事

随着技术的不断成熟,百事通科技(BUDDIES)开始将目光投向更广阔的市场。公司制定了详细的市场拓展计划,通过参加国际电子展、与海外企业建立合作关系等方式,逐步打开了国际市场。同时,公司还注重品牌建设,通过精心设计的品牌形象和广告宣传,提升了品牌知名度和美誉度。

Globaltech Semiconductor Co Ltd公司的发展小趣事

随着技术的不断成熟,Globaltech开始积极拓展国际市场。公司通过与国内外多家系统厂商建立紧密的合作关系,共同开发新产品,进一步提升了其市场竞争力。特别是在亚洲市场,Globaltech凭借其高性价比的产品和快速的响应能力,迅速占据了大量市场份额。同时,公司还积极参与国际展会,与全球客户面对面交流,进一步提升了品牌知名度和影响力。

磁联达(CND-tek)公司的发展小趣事

随着全球环保意识的不断提高,磁联达(CND-tek)公司积极响应绿色发展的号召,将环保理念融入到企业运营的各个环节中。公司采用环保材料和节能技术生产产品,减少了对环境的污染和资源的浪费。同时,公司还积极参与环保公益活动,倡导员工和合作伙伴共同关注环保问题。这些举措不仅提升了公司的社会形象,也为公司带来了更多的商业机会。

以上五个故事是根据电子行业的一般趋势和可能的公司发展路径为磁联达(CND-tek)公司虚构的。这些故事旨在展示磁联达(CND-tek)公司在发展过程中所面临的挑战、机遇以及所取得的成就。希望这些故事能够为您提供一些参考和启示。

问答坊 | AI 解惑

滤波器设计基础

滤波器基础设计讲义   …

查看全部问答>

电视卡播放软件DScaler完全攻略

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 电视卡播放软件DScaler完全攻略 很多朋友在为自己的爱机添置了电视卡后,通常都是用电视卡本身所带的软件来收看电视节目,如果该软件的收视效果不能令你满意的话,不妨试用一个第三方的电视卡 ...…

查看全部问答>

大家来谈谈自己的工控板都需要哪些资源?

目前的工控板一般是: 8个光耦隔离的输入 8个光耦隔离的输出 4路12位的AD 4路pwm的DA 1个usb 1个485 1个232 一个2.4G无线发送模块 大家看看这些功能是否已经足够?在开发过程中是否需要删减? [ 本帖最后由 clark 于 2009-3-25 11:45 ...…

查看全部问答>

基于硬件构件的嵌入式底层软件开发方法研究及其应用

200892_荐红梅--基于硬件构件的嵌入式底层软件开发方法研究及其应用…

查看全部问答>

求助:(TFTP)TIMEOUT waiting for Ack block

我是个新手,用一块板子s3c2510测试了下tftp的功能,发现程序中定义的的包结构,都偏移了两个字节发送出去,在发送前人为添加了两个字节,可以正常与tftpserver通信了,并能下载104K 的BIN文件, 但在下载稍微大点的应用文件(大约4M)时,总会报 ...…

查看全部问答>

WINCE camera 应用程序:如何实时显示

大家好,我现在使用的WINCE6.0,想利用camera Interface接上摄像头,在应用程序里获取BMP图像,并且实时显示到屏幕上,据我了解有DSHOW和直接使用DevieceIoControl两种方法,后者最好,简单一点。 需要的结果就是视频时实时显示的,不会卡。 camer ...…

查看全部问答>

求助!有谁了解研祥104-1541CLDN?

请问有谁用过这个板子,我想用这块板子直接挂硬盘,请问可以吗?…

查看全部问答>

模电、数电、单片机硬软件的核心原理与衔接关系(可对整个电子有个感性了解

模电、数电、单片机硬件、单片机软件的核心原理 模电: 模电的核心是电路(网络、回路),它分析的是电流和电压在整个回路中所产生的各种转换作用之和。设计模拟电路往往会利用到艺术的一些原理,如平衡、稳定、对称、美观、折中……它会有各种直 ...…

查看全部问答>

NUC100VE3AN如何读写IS61C6416AL

/*请教下各位大侠  为什么读出来的数据老是等于0呢  麻烦各位这点一下*/ #include #include \"NUC1xx.h\" #include \"DrvGPIO.h\" #include \"DrvSYS.h\" /*$$$$$$$$$$$$$$$$$RAM$$$$$$$$$$$$$$$$$$$$$$*/ #define& ...…

查看全部问答>

哪位大牛给介绍一款常用的内部带flash的fpga

哪位大牛给介绍一款常用的内部带flash的fpga 领导非要用内部带flash的,小弟新手找了好久爱也没找到,不知道从手册的哪里能够看出来有没有内置flash。 我们公司以前的产品里面貌似只有XC3S50AN-4TQ144C这个里面有,但是这个的资源不够用…

查看全部问答>