用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个端口位的同时修改操作。
上一篇:STM32 常用GPIO操作函数记录
下一篇:STM32F4先设置寄存器还是先使能时钟
推荐阅读
史海拾趣
Concord Semiconductor Corp深知人才是企业发展的根本。因此,公司高度重视人才培养和引进工作。公司建立了一套完善的人才培养机制,通过内部培训、外部引进等方式,不断提升员工的技能水平和综合素质。同时,公司还积极营造良好的工作氛围和企业文化,吸引更多优秀人才加入。这些人才的加入为公司的持续发展提供了有力保障。
在电子行业中,品质控制和质量管理是企业生存和发展的关键。创世公司深知这一点,始终将品质放在首位。公司建立了严格的质量管理体系,从原材料采购到生产制造、产品检测等各个环节都严格把控品质。同时,创世公司还引进了先进的生产设备和检测仪器,确保产品的可靠性和稳定性。这种对品质的执着追求使得创世公司的产品在市场上获得了良好的口碑和广泛的认可。
人才是企业发展的核心动力。Diconex公司高度重视人才培养和引进工作。公司建立了完善的人才培养机制,为员工提供广阔的发展空间和良好的职业晋升通道。同时,公司还积极引进行业优秀人才,为公司的快速发展提供了有力的人才保障。这种人才战略的成功实施使得Diconex在电子行业中拥有了强大的技术团队和人才队伍。
在20世纪90年代初,Dionics Inc由几位对电子技术充满热情的工程师创立。当时,电子市场正处于快速发展期,但也面临着激烈的竞争。Dionics Inc凭借其在电源管理领域的创新技术,成功开发出一款高效节能的电源管理芯片,赢得了市场的认可。然而,随着市场的进一步开放,来自国内外的竞争对手纷纷涌入,Dionics Inc面临着巨大的挑战。
璟德电子工业股份有限公司(ACX)于1998年在中国台北板桥市正式成立,初始资本为2300万美元。公司从创立之初就专注于利用低温共烧陶瓷(LTCC)技术,研发与制造无线通信组件与模块。这一技术选择为公司日后的成功奠定了坚实的基础。在创立初期,璟德(ACX)面临着激烈的市场竞争和技术挑战,但公司凭借对技术的深入理解和不懈的创新精神,逐步在行业中崭露头角。
为了支持公司的快速发展和技术创新,Array Microsystems Inc高度重视人才引进和团队建设。公司积极招聘业内优秀的技术人才和管理人才,为他们提供良好的工作环境和福利待遇。同时,公司还注重员工的培训和晋升机制,鼓励员工不断学习和成长。这些措施使得Array Microsystems Inc拥有了一支高素质、专业化的团队,为公司的发展提供了有力的人才保障。
被开除是最难堪的,但知道为什么被开除吗?老板心中的那把尺在哪里? 1.不懂得承担责任的人:有些人不愿意承担责任,只想到得到多少,而不是自己贡献多少的,形成了管理障碍。 2.缺乏团队精神的人:许多人过于专注于自己的专业上,不太注意 ...… 查看全部问答∨ |
本帖最后由 paulhyde 于 2014-9-15 09:45 编辑 设计出有一定输出电压范围和功能的数控电压源 基本要求 (1)输出电压:范围0~+9.9V,步进0.1V,纹波不大于10mV; (2)输出电流:500mA; (3)输出电压值由数码管显示; ...… 查看全部问答∨ |
我在网上查,最便宜的 RTL8019AS也要12RMB/个 我现在做的一个小东西需要一个以太网控制器加RJ45口,订货量可以非常大,10K - 100K,但是成本非常关键,如果太贵,项目肯定被踢掉了 另外也问了dm9000, 比realtek得还要贵 我的要求很简单,就是支 ...… 查看全部问答∨ |
大家好:我的protel99se的鼠标增强器出现了点小问题 同样的增强器版本(第三版),同样的设置(开机自动运行),在别人的机子上都是好好的 在我的笔记本就是开机时会自动弹出一个类似于记事本的 protel99seMex.ini文件里面的内容显示如下: [All ...… 查看全部问答∨ |
用evc编译成功的程序想在U盘上在wince下运行怎么操作 请各位大侠指教 用evc编译成功的程序通过USB下载到系统中可以运行 现在想放在U盘上在wince下运行怎么操作 请各位大侠指教… 查看全部问答∨ |
阿牛哥拜访华北地区的一些光端机和视频服务器制造商朋友,也看到很多专业做光端机和视频服务器一篮子解决方案的供应商。有很多是用到TI ,ADI ,NS 等美系品牌方案,阿牛哥查查这些制造商朋友的BOM,基本都有选用ADI 的两颗料: AD ...… 查看全部问答∨ |
一、cadence原理图设计中的端口有什么作用?端口号相同是否表示这两个端互连?端口与端口互连是否可以用网络标号? 二、网络标号有什么作用?总线上加网络标号有什么意义?总线和总线相连是否可以用网络标号? 三、上图中的TP6是什么符号?代表什 ...… 查看全部问答∨ |