历史上的今天

今天是:2025年02月08日(星期六)

正在发生

2020年02月08日 | 怎样用STM32单片机的GPIO控制LED显示状态

发布者:星光闪耀 来源: elecfans关键字:STM32  单片机  GPIO控制  LED显示状态 手机看文章 扫描二维码
随时随地手机看文章

用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;

怎样用STM32单片机的GPIO控制LED显示状态

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

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

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

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

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

关键字:STM32  单片机  GPIO控制  LED显示状态 引用地址:怎样用STM32单片机的GPIO控制LED显示状态

上一篇:STM32单片机设计extern全局变量的定义解析
下一篇:基于STM32单片机对跑马灯的控制

推荐阅读

福特自动驾驶警车当汽车行业都向自动驾驶时代迈进时,大部分人关心的是乘客能否解放双手,其实除此之外,自动驾驶技术也会进一步提升交通执法的效率。最近,福特申请的一项自动驾驶警车专利曝光,这种警车可以自动化完成违规停车、超速等行为的检测,大大减轻交通执法人员的负担。专利显示,自动驾驶警车可以检测超速、违规停车等行为,让这些工作不再依赖...
时间总在不经意时间流逝,未来就这样悄无声息的来临。我们才刚适应了快递、外卖小哥的温馨服务,配送机器人又开始出现在我们的视野中。2017年统计数据显示,全球的食物配送市场规模达1000亿美元,快递配送市场达3000亿美元。与此同时,电商的崛起也使得快递、外卖成了人力成本最高的支出行业,因此,配送机器人就成为各大平台和企业争相角逐的新方向。从室...
“出动应急通信保障人员2843人、各类通信保障车1185辆、应急油机898台;累计为505家政企单位免费提供527个疫情防控服务产品。”2月6日,四川联通公布了一组数据,凸显了其在在新型冠状病毒感染的肺炎疫情防控工作中的积极举措。 四川联通表示,为确保打赢疫情防控阻击战,四川联通以为助力,科技战“疫”,安防巡检机器人、消毒机器人、自助发热预筛查工...
日前,Vishay Intertechnology, Inc.宣布,公司推出新型0612外形尺寸器件,扩充NCW AT系列宽边薄膜片式电阻。Vishay Beyschlag NCW 0612 AT电阻具有出色的高温性能和极佳的长期稳定性,额定功率高达1 W,阻值低至0.10 W,适用于汽车和工业应用中的电力电子设备。 结合先前发布的NCW 0406 AT,日前发布的AEC-Q200标准器件宽边几何形状具有优异的温...

史海拾趣

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

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved