历史上的今天
返回首页

历史上的今天

今天是:2025年02月18日(星期二)

正在发生

2019年02月18日 | STM32 的位带操作

2019-02-18 来源:eefocus

位操作就是可以单独的对一个比特位进行读和写,这个在51单片机中非常常见。51单片机中通过关键字sbit来实现位定义,STM32中则是通过访问位带别名区的地址来实现对某一位的操作。


例如51单片机中可以实现以下操作


#define LED_ON 0

sbit LED = P2^0;

LED = LED_ON;


而现在STM32的位段、位带别名区就为了实现这样的功能。STM32针对SRM和外设区开辟了两个内存空间(位带区),分别是SRAM和外社区的最低1MB的空间。这两个1MB的内存空间除了可以像正常的 RAM 一样操作外,他们还有自己的位带别名区,位带别名区就是把1MB位带区的每一个位膨胀成一个32位的字,当通过访问位带别名区的这些字时,就可以达到访问位带区某个比特位的目的。位带区的一个比特位经过膨胀之后,虽然变大到 4个字节,但是还是 LSB才有效。



由上图可以看出STM32 支持位带操作的两个内存区的范围是: 


 0x2000_0000‐0x200F_FFFF(SRAM 区中的最低1MB) 


0x4000_0000‐0x400F_FFFF(片上外设区中的最低1MB)


我们可以通过指针的形式访问位带别名区地址从而达到操作位带区比特位的效果。


位带别名区地址公式为


AliaAddr(addr,bitnum) = (addr&0xF0000000) + 0x2000000 + (addr&0xFFFFF)<<5 + bitnum<<2


ADDR为该比特位所在字节的地址,Bitnum为位序号


这里我以操作一个ODR寄存器(对于GPIO基地址的偏移为20)为例


例如


#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+((addr & 0x000FFFFF)<<5)+(bitnum<<2))

#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))           // 把一个地址转换成一个指针 

#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))       // 把位带别名区地址转换成指针

#define GPIOH_ODR_Addr (GPIOH_BASE+20)                               //寄存器地址映射

#define PHout(n) BIT_ADDR(GPIOH_ODR_Addr,n)                          //输出

 

/*主函数

    * @beief 电亮LED灯

    * @param 无 

    * @revel 无

    */

int main

{

    LED_Config();                                                    //LED灯GPIO配置

    PHout(10) = 0;                                                   //点亮LED灯

 

}

关于主函数的点亮LED的操作,请参照stm32f4固件库函数点亮LED灯


关于为什么不直接对STM32的位带区进行位操作原因是STM32对内存的控制读写数据是按字节来算的,不能对一位进行直接操作。


位操作有如下优点


位带操作可以把代码缩小, 速度更快,效率更高,更安全。 

一般操作要6条指令,而使用 位带别名区只要4条指令。    

 一般操作是  读-改-写  的方式, 而位带别名区是 写 操作。防止中断对读-改-写  的方式的影响。


推荐阅读

史海拾趣

Holt Integrated Circuits公司的发展小趣事

Holt在CAN控制器领域也取得了重要突破。作为世界上第一家将CAN控制器和收发器集成在同一紧凑塑料封装中的公司,Holt的ARINC 825(CAN)数据总线产品为用户提供了极大的便利。这种集成设计不仅减小了产品的体积和重量,还提高了系统的可靠性和稳定性。Holt的这一创新成果,不仅推动了CAN总线技术在航空航天领域的广泛应用,也为其他行业的自动化控制提供了有力支持。

以上五个故事,从不同角度展现了Holt Integrated Circuits公司在电子行业中的发展历程和卓越成就。这些事实不仅证明了Holt在技术创新和市场拓展方面的实力,也为其在未来的发展中奠定了坚实的基础。

Hi-Tron Semiconductor Corp公司的发展小趣事

Holt在支持ARINC 429标准方面展现出了强大的实力。其ARINC 429 IC产品系列从简单的线路接收器到集成RAM的完整协议解决方案,覆盖了业内最广泛的范围。这些产品设计精巧,能够在单个3.3V电源上运行,显著降低了系统复杂性和板空间,为航空电子系统带来了更高的效率和可靠性。Holt的这一系列创新产品,不仅满足了航空制造商的严格需求,也推动了ARINC 429标准在全球范围内的广泛应用。

Churod Electronics Co Ltd公司的发展小趣事

随着公司规模的扩大,中汇瑞德意识到,要想在激烈的市场竞争中保持领先地位,必须不断进行科技创新。于是,公司加大了对研发的投入,引进了一批高素质的研发人才,并建立了完善的研发体系。在研发团队的努力下,公司成功开发出了多款具有自主知识产权的新型继电器产品,不仅提高了产品的性能和质量,还降低了生产成本,赢得了客户的广泛好评。

Britool Expert公司的发展小趣事

中汇瑞德电子股份有限公司的创业之路并非一帆风顺。2006年,公司创始人周康平凭借对电子行业的深刻理解和前瞻视野,决定涉足继电器制造领域。当时,市场竞争激烈,技术门槛高,但周康平坚信,只要专注于技术研发和产品质量,就能在市场中脱颖而出。他带领团队日夜奋战,攻克了一个又一个技术难题,逐渐在继电器制造领域站稳了脚跟。

General Instrument公司的发展小趣事
合理规划用电设备,避免负载突变或不平衡导致的电压波动。
Coiltronics公司的发展小趣事

在电子行业这个充满竞争的市场中,Coiltronics公司始终保持对技术研发的重视。公司投入大量资源用于新产品的研发和创新,不断推出符合市场需求的新产品。同时,公司还积极跟踪行业发展趋势,及时调整技术路线和市场策略。这种持续的研发创新,使得Coiltronics始终保持在行业的前列,成为电子行业中一股不可忽视的力量。

这五个故事都是基于电子行业的普遍情况和商业逻辑虚构的,旨在展示一个公司可能经历的一些发展阶段和策略选择。请注意,这些故事并不代表任何具体公司的实际情况。

问答坊 | AI 解惑

我联想到以后的供电办法(内附测试) (转)

转自:千家论坛:http://www.1000bbs.com/dispbbs.asp?boardid=51&Id=375655&page=2 在一些安防杂志上,看见了一篇文章,内容大致是写关于我们现在安防行业里的供电系统传输方式.除了描写在供电系统中,怎么节约线材,节省投资等,也提出一种在行业内让 ...…

查看全部问答>

WCE 中用c#写的数据库连接怎么不对啊

如题..大家写一个给我个事例..谢谢 …

查看全部问答>

evc 扫描枪MC1000 编程问题

因为是初学者,对evc不是很熟,所以提个比较笨的问题 在对话框编程模式下 每次在通过扫描枪扫条码到文本框里的时候,程序就会自动退出,请问哪位高手大哥能帮我解决一下。 小妹感激不尽。 还有一个问题就是我有一个现成的程序。第一次都能运 ...…

查看全部问答>

MCB问题

Spartan6中的MCB具体的控制流程是怎样的啊?…

查看全部问答>

ST的M4板子换DK-LM3S8962

ST的 M3+M4 STM32F4DISCOVERY 想换DK-LM3S8962 或者加钱也行。 240373487@qq.com…

查看全部问答>

cc2430点对点通讯问题

小弟最近刚学cc2430点对点通讯,遇到一个问题,就是点对点一开始设置定时器1中断,然后运行定时器1,主函数一直循环在接受状态里面,当定时器溢出中断时,调用adc转换函数,转换指定端口的电压值,后利用点对点通讯将数据发送出去。程序流程就是这 ...…

查看全部问答>

51的C语言编程

现在想要把单片机的管脚作为参数传递给子函数,编写的时候不报错,但是执行的时候就不起作用了。 我的写法是这样的: sbit TX = P1^0; void fun_1(unsigned char i) {    ....... }   void main() {     f ...…

查看全部问答>

求BP3102系类的电源参数

最近在解剖市场上面的LED 3W电源  是的是BP3102方案  可是跟经典设计阻值老是对不上 。求大神指导。。最好给小弟一份详细参数。好叫小弟做个出来给大家看看!谢了!…

查看全部问答>

今天刚收到Chronos Watch,半天开不了机,竟然是电池没电

今天刚收到Chronos Watch,关天开不了机,竟然是电池没电,换了电池就好了,你们收到如果开不了机注意下电池是否有电! 还有就是背光灯那个按钮,不是很好用! -------------------------------------------------- PS:上图: 另,娱乐 ...…

查看全部问答>

开关电源设计圣经--《开关电源设计(第3版)》

https://download.eeworld.com.cn/detail/%E5%B9%B8%E7%A6%8F%E7%9A%84%E5%A8%83/26661 内容简介   书中系统地论述了开关电源最常用拓扑的基本原理、磁性元件的设计原则及闭环反馈稳定性和驱动保护等。《开关电源设计(第3版)》在讲述的过程中 ...…

查看全部问答>