完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一般的寄存器访问需要通过读-改-写三步曲 和 位运算的清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的操作方式 ***it P10 = P1^0 P10 = 0; 或 P10 = 1; PAout(3) = 1; 或 PAout(3) = 0; |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1760 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1613 浏览 1 评论
1058 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1670 浏览 2 评论
1932浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
724浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
564浏览 3评论
590浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
548浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 16:58 , Processed in 0.830861 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号