码迷,mamicode.com
首页 > 其他好文 > 详细

(转)STM32 GPIO 配置之ODR, BSRR, BRR 详解

时间:2014-11-25 18:05:29      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   on   art   问题   log   bs   

用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态.
ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平。管脚对于位写1 gpio 管脚为高电平,写 0 为低电平
BSRR 只写寄存器:既能控制管脚为高电平,也能控制管脚为低电平。对寄存器高 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 ------- 个人经验判断意法半导体仅仅是为了程序员操作方便估计做么做的。
因为SBRR的 低 16bsts 恰好是set操作,而高16bit是 reset 操作
而BRR 低 16bits 是reset 操作

如有不对欢迎指正!

参考:
1,STM32 GPIO 配置之ODR, BSRR, BRR 详解
http://blog.csdn.net/drivermonkey/article/details/17062381

(转)STM32 GPIO 配置之ODR, BSRR, BRR 详解

标签:blog   http   io   ar   on   art   问题   log   bs   

原文地址:http://www.cnblogs.com/tiancun/p/4121360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!