历史上的今天
返回首页

历史上的今天

今天是:2024年08月26日(星期一)

正在发生

2018年08月26日 | STM32之寄存器访问

2018-08-26 来源:eefocus

一般的寄存器访问需要通过读-改-写三步曲 和 位运算的清0置1来实现,但在stm32的编程中,通过利用它的一些优秀的特性如端口位设置/复位寄存BSRR、位绑定等,我们可以大大提升寄存器的访问速度和简化寄存器的操作。


//一般寄存器操作:

GPIOx->ODR |= 0x10;  //Pin4置1

GPIOx->ODR &= ~0x10; //Pin4清0

BSRR/BRR寄存器 
这里写图片描述
这里写图片描述

GPIOx->BSRR //对BSRR的低16位写1置位,对BSRR的高16位写1清零

GPIOx->BRR  //对BRR的低16位写1清零,BRR的高16位保留


由此可见,通过BSRR/BRR寄存器来操作ODR寄存器, 不需要 读-改-写三步曲, 仅通过 写 就可一步到位,方便不少。


位绑定 

当然了,stm32还有一个更牛X的特性–位绑定,仅仅只要1个时钟周期就能实现单独的位操作。位绑定,是通过简单的地址变换将寄存器中的某一个位映射到内存中的某一个存储单元。这样通过对一个内存单元的读写就能间接访问相应寄存器的某个位了,当然此时该32位的内存单元也只有最低位是有效的啦!


但是整个M3内核并没有全部允许位绑定,只有两个区有,分别是

SARM:0x20000000~0x2000FFFF 1M大小 

这个区绑定的地址是从0x22000000开始的;  

PERIPHERALS:0x40000000~0x4000FFFFF 1M大小

这个区绑定的地址是从0x42000000开始的;


对应的位绑定公式为:  

SRAM:AliasADDr = 0x22000000+((A-0x20000000)*32+n*4)

其中A:0x20000000~0x2000FFFF n:0~31

PERIPHERALS: AliasADDr = 0x42000000+((A-0x40000000)*32+n*4)

其中A:0x40000000~0x4000FFFFF n:0~31

下面就可以通过位绑定来快速实现位操作 
这里写图片描述
这里写图片描述

#define GPIOA_ODR_ADDR (GPIOA_BASE + 0x0C)

#define GPIOA_IDR_ADDR (GPIOA_BASE + 0x08)


#define BitBind(Addr, bitNum) (*(volatile unsigned long *)((Addr&0xF0000000)+0x2000000+((Addr&0xFFFFF)<<5)+(bitNum<<2)))

//Addr&0xF0000000是为了区分SRAM还是PERIPHERALS

//Addr&0xFFFFF相当于(A-0x20000000)或者(A-0x40000000)

//左移是为了实现快速的乘法操作:左移n位相当于乘以2^n


#define PAout(n) BitBind(GPIOA_ODR_ADDR, n) 

#define PAin(n) BitBind(GPIOA_IDR_ADDR, n)


这样就实现了类似51单片机访问I/O的操作方式


sbit P10 = P1^0

P10 = 0; 或 P10 = 1;


PAout(3) = 1; 或 PAout(3) = 0;   


Pretty cool, huh!


推荐阅读

史海拾趣

Control Sciences Inc公司的发展小趣事

随着技术的不断进步,Control Sciences Inc开始寻求更广阔的市场空间。公司积极参与国内外各大电子展会,展示其先进的产品和技术。同时,公司还加大了市场推广力度,与多个知名企业建立了战略合作关系。通过这些努力,Control Sciences Inc的产品逐渐走进了更多的企业和家庭,其品牌影响力也日益增强。

Eska公司的发展小趣事

Eska公司注重技术传承与创新发展。作为奥地利唯一一家仍在为手套制造业培训学徒和技术工人的企业,Eska坚持手套传统工艺和技术的秉承。同时,公司也积极引入新技术和新材料,不断提升产品的性能和质量。这种技术传承与创新相结合的发展模式,使得Eska在保持传统优势的同时,也能不断适应市场的变化和发展。

明波通信(BWAVE)公司的发展小趣事

经过多年的发展,明波通信在技术和市场上都取得了显著成绩。为了进一步推动公司的发展,明波通信成功在新三版上市。这一举措不仅为公司筹集了更多的发展资金,也提升了公司的品牌影响力和市场竞争力。上市后的明波通信,在资本市场上展现出了强劲的发展势头。

C&H Technology公司的发展小趣事

C&H Technology成立于2005年,由两位志同道合的电子工程师陈先生和何先生共同创立。两位创始人凭借在半导体领域的深厚技术积累,瞄准了当时正在兴起的智能手机市场,决定开发一款高性能、低功耗的手机芯片。他们租下一间小办公室,招募了几名志同道合的工程师,开始了艰苦的创业之旅。

起初,公司面临资金短缺、技术瓶颈和市场认可度低等重重困难。但陈先生和何先生凭借坚定的信念和不懈的努力,逐步攻克技术难题,与供应商建立了稳定的合作关系,并通过参加行业展会等方式,逐渐提高了品牌知名度。经过几年的努力,C&H Technology成功推出了首款手机芯片,并获得了市场的认可。

Hisetec Electronic Co Ltd公司的发展小趣事

背景:随着全球化进程的加速,电子产品的供应链越来越复杂,国际合作成为必然趋势。Hisetec Electronic Co Ltd公司敏锐地洞察到这一点,开始实施国际化战略。

发展:公司首先在欧洲设立研发中心,与当地高校和科研机构合作,共同开发新技术。随后,又在亚洲多个国家和地区建立生产基地和销售网络,实现了全球范围内的资源配置和市场覆盖。通过这一系列举措,Hisetec公司不仅降低了生产成本,还提升了品牌知名度,实现了业务的高速增长。

Cicoil公司的发展小趣事

Cicoil公司的创立可以追溯到电子行业的快速发展时期。创始人看到了扁平电缆在电子设备中的巨大潜力,于是决定专注于这一领域的研究和开发。他们投入大量资源,研发出具有独特技术的柔性扁平电缆,为电子设备提供了更为灵活和可靠的连接方案。这一创新产品在市场上引起了轰动,为Cicoil公司赢得了良好的声誉和市场份额。

问答坊 | AI 解惑

帮分析个简单的程序。。实在扛不住弄出来了

用定时器1做的简单输出,友善micro2440的板子 请帮我分析下,搞了好长时间,还是出不来 流驱动:#include \"options.h\" #include #include #include #include #include #include #include #include #include \"time.h\"  ...…

查看全部问答>

C语言与单片机C语言(C51)有啥不同?

请问一下各位 学校里学的C语言和单片机C语言(C51)有啥子不一样的?哪个好学一点. 在学校里学了C语言后感觉没有学到啥子,挺浮浅的,现在只记得一些简单的规则和语法。 不知道现在是继续学它基础打扎实点呢,还是就开始学C51,希望大家给点建 ...…

查看全部问答>

wince界面设计问题

请问要设计出这样的界面需要使用什么软件? 这种界面设计使用的什么方法。都是贴的图吗? 那具体设计过程是怎么样的? 好像是先设计整个界面,然后在截图。 …

查看全部问答>

在WINCE60里面把CELLCORE组件加进了NK,怎么测试这块是不是可以正常工作?有没简单的测试AP可用?怎么测试RIL组件绑定了物理通信的串口?

在WINCE60里面把CELLCORE组件加进了NK,怎么测试这块是不是可以正常工作?有没简单的测试AP可用?怎么测试RIL组件绑定了物理通信的串口?…

查看全部问答>

ppc2003可以直接访问sql2000 server中的数据吗?

ppc2003通过wifi跟局域网连接后,可以通过编程直接访问服务器上sql2000 server中的数据吗?有人说必须在ppc上安装sql CE,然后通过sql CE跟服务器上的sql2000交换数据?真的是这样?…

查看全部问答>

立即报名预约2010吉时利新能源与新材料测试技术研讨会

2010年度吉时利测试测量技术全国巡回研讨会将从9月初开始,在成都、重庆、合肥、南京、哈尔滨、武汉、兰州举办届时吉时利资深技术专家将与您深入交流: 绿色电子革命中的光电测试/新能源测试方案 新材料的测试方案 微弱信号测量难点与应对方 ...…

查看全部问答>

uCADCDMA通道4中断问题!

使用uC2.86   ADC使用DMA中断的模式,在DMA1_CH1 初始化以及 中断 都没问题,都可以进中断, 但是改成 DMA1_CH4 就再也不进中断了,为什么?? 难道 DR_ADDRESS 地址不对?? RCC,等其他设置应该都没问题请大家看下我的初始化函 ...…

查看全部问答>

问高手一个关于STM8 I2C的问题

最近在调STM8 的I2C(不想搞模拟的I2C),结果I2C没有调通,不知道问题所在,软件是参考I2C EEPROM固件那个程序写的。初始化如下: void IIC_Init(void) { UCHAR temp; CLK_PCKENR1 |= 0x01; I2C_CR1    = 0x00;  &n ...…

查看全部问答>

关于vca810的放大增益

本帖最后由 dontium 于 2015-1-23 12:51 编辑 我这两天用面包板按照vca810芯片的datasheet中的figure2 电路搭建了一个压控放大,将8脚的50欧姆电阻去掉,并在8脚加了一个vpp=30mv,f=800hz的正弦波(函数发生器产生),并在1脚直接接地。但是在Vc= ...…

查看全部问答>

《TMS320C28x系列DSP》读书笔记--通用目标文件格式,段

      TMS320系列DSP的目标文件各式为通用目标文件格式 COFF (Command Object File Format,简称COFF)。 采用这种目标文件各式的优点是:将指令和数据按照段的概念进行组织和存储,这使得程序的可读性大大增强,更容易编写 ...…

查看全部问答>