历史上的今天
返回首页

历史上的今天

今天是:2024年09月22日(星期日)

正在发生

2020年09月22日 | STM32中的位带(bit-band)操作

2020-09-22 来源:eefocus

//位带操作,实现51类似的GPIO控制功能

//具体实现思想,参考<>第五章(87页~92页).

//IO口操作宏定义

#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 

#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) 

#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum)) 

//IO口地址映射

#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C 

#define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C 

#define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C 

#define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C 

#define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C 

#define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C    

#define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C    


#define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808 

#define GPIOB_IDR_Addr    (GPIOB_BASE+8) //0x40010C08 

#define GPIOC_IDR_Addr    (GPIOC_BASE+8) //0x40011008 

#define GPIOD_IDR_Addr    (GPIOD_BASE+8) //0x40011408 

#define GPIOE_IDR_Addr    (GPIOE_BASE+8) //0x40011808 

#define GPIOF_IDR_Addr    (GPIOF_BASE+8) //0x40011A08 

#define GPIOG_IDR_Addr    (GPIOG_BASE+8) //0x40011E08 

 

//IO口操作,只对单一的IO口!

//确保n的值小于16!

#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出 

#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //输入 


#define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //输出 

#define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //输入 


#define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //输出 

#define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //输入 


#define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //输出 

#define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //输入 


#define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //输出 

#define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //输入


#define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //输出 

#define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //输入


#define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  //输出 

#define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //输入


推荐阅读

史海拾趣

Friedrich Lütze GmbH公司的发展小趣事

在激烈的市场竞争中, Friedrich Lütze GmbH 深知品牌建设的重要性。公司不断加大品牌宣传力度,通过参加国内外知名展会、举办技术研讨会等方式,提升品牌知名度和影响力。同时,公司注重客户服务体验,建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。这些举措有效提升了公司在市场上的竞争力和客户满意度。

General Cable公司的发展小趣事
根据应用需求,将YN5103的数据和控制引脚连接到相应的输入或输出设备。例如,数据引脚可能连接到微控制器或其他数据源,控制引脚可能用于接收外部控制信号。
GaN Systems公司的发展小趣事

多年来,GAIA盖亚电源凭借其卓越的产品性能和专业的技术支持,赢得了众多知名客户的信赖和合作。这些客户涵盖了航空航天、军事、交通运输、工业自动化等多个领域。在与客户的合作过程中,GAIA盖亚电源不仅提供了高质量的产品和服务,还与客户共同研发了多项创新解决方案,帮助客户解决了许多技术难题。这些成功案例不仅彰显了GAIA盖亚电源的技术实力和市场竞争力,也为其在电子行业的发展奠定了坚实的基础。

Cotco公司的发展小趣事

面对电子行业日新月异的变化和不断涌现的新挑战,Cotco公司始终保持敏锐的市场触觉和应变能力。公司及时调整战略方向,加大在新兴领域如物联网、智能家居等的投入和研发力度。同时,Cotco也积极拓展国际市场,与全球多个国家和地区的合作伙伴建立合作关系,推动产品的全球化销售和服务。展望未来,Cotco将继续秉承创新、质量和服务的理念,致力于成为全球电子行业的佼佼者。

Euvis Inc公司的发展小趣事

在技术创新的基础上,Euvis Inc公司积极拓展市场,通过与国际知名电子产品制造商的合作,将其产品应用于各类高端电子产品中。同时,公司注重品牌建设,通过一系列营销活动提升品牌知名度和美誉度。随着市场份额的不断扩大,Euvis Inc公司逐渐在电子行业中树立起了高端、可靠的品牌形象。

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

近年来,随着全球半导体市场的不断变化和技术的快速发展,Renesas也面临着一些挑战。为了应对这些挑战并保持竞争力,Renesas开始进行战略转型和结构调整。公司加强了与客户的合作和沟通,深入了解市场需求和趋势;同时,Renesas还加大了对新技术和新产品的研发投入,不断提升自身的技术实力和创新能力。此外,Renesas还注重人才培养和引进,打造了一支高素质、专业化的团队。这些措施的实施使Renesas在应对挑战和转型过程中取得了积极的成效。

问答坊 | AI 解惑

高压电机矢量控制有坛友做吗?

矢量控制算法讨论,欢迎大家热论!…

查看全部问答>

寻ISP高手

在下一心想学习ISP技术,但我对单片机又一窍不通,敬请各位指点迷津,我该从哪下手学习,诚心拜师学艺!…

查看全部问答>

SPI例程中这段程序看不懂

// Provided by CodeVisionAVR to clear the SPI interrupt flag #asm   in r30,spsr   in r30,spdr #endasm 说是以保证SPI中断是空闲的,但我看不懂,在我看来只是将两个寄存器的内容放到r30里去了。 书上还说这是 ...…

查看全部问答>

单片机设计流水灯

刚刚学习单片机,老师留得作业使用ATmega16设计流水灯,A B C D 四口从低位向高位依次点亮,然后从高位向低位依次熄灭。如果只用一个口 PORTA 我会,但是不知道怎样写四个的 …

查看全部问答>

请问有谁了解TRACE32和OPENICE-A1000这2个仿真器的使用啊 手机的IMEI用这个2个仿真器能进行修改吧

请问有谁了解TRACE32和OPENICE-A1000这2个仿真器的使用啊 能够熟练的修改TRACE32的CMM脚本文件修改成支持其他FLASH读写 有熟悉的工程师吗 请联系我谢谢...可以站内PM我 发个Q 还有个问题 就是问一下手机的IMEI用这个2个仿真器能进行修改吧。。。 ...…

查看全部问答>

2011年国赛复测名单

本帖最后由 paulhyde 于 2014-9-15 03:48 编辑 2011年国赛复测名单A题…

查看全部问答>

TI 9B96开发板死锁问题解决

经过一段时间的接触TI的开发板,发现TI芯片确实算是比较容易锁死的。我边上有人锁死过,网上也有一大票人锁死过,很幸运的是,今天我也荣幸的锁了一回,我是在调SDRAM时,因为直接load网上下载的代码,导致了芯片锁死,于是就开始了漫漫的寻找答案 ...…

查看全部问答>

请教lanchpad关于默认时钟的问题

我把lanchpad一起的32K晶振焊上去了。寄存器处于默认状态。这时候ACLK,MCLK,SMCLK分别是什么呢??谢谢咯。。…

查看全部问答>

为啥更换液晶后单片机片外存储器不能存数据了?

各位大虾,我使用普通的51单片机,有片外数据存储器用于存储一些参数,通过按键调整这些参数(显示用液晶12864),调整完毕后存到片外存储器中,要调整时再读出来。由于原液晶厂家不在了,我更换了一个厂家,更换后液晶显示没问题,但是不知道片外 ...…

查看全部问答>

仪器外壳存在20mVESD电压怎么消除

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 我们做了一个仪器,验收时发现ESD有点问题。我们用万用表测仪器外壳(金属)与电源地之间电压,发现有20mV的电压。后来我们又发现,每拔掉一块PCB,仪器外壳的电压就会减少。拔掉PCB越多,电压 ...…

查看全部问答>