时间:2024.10.21
TIPS:参考资料在《CM3 权威指南 CnR2》存储器系统章节
一、学习内容
位带操作--GPIO输入与输出
1.知识回顾
在前面的GPIO输出点亮LED中,虽然使用固件库编程,但底层逻辑还是对寄存器操作
GPIOB->ODR |= 0<<0;
51单片机的操作:P0=0xFE; //总线操作
sbit LED1=P0^0
LED1 =0; //位操作
2.位带简介
位操作:
可以单独地对一个比特位进行读和写。
在51单片机中利用关键字sbit来实现位定义
在STM32中没有这样的关键字,而是通过访问位带别名区来实现的
理解:
位带操作就是对寄存器里的单独的一个位操作,此时我们进行操作需要地址,位带操作就是对寄存器里的每一个位都重新在位带别名区里找了一个地址,而且这个地址(一个位)会重新膨胀成一个字(四个字节),但是它在进行操作的时候,只有最低位是有效的
原因:
STM32的总线都是32位的,当它按照32位来进行操作时效率是最高的
总结:
寄存器的每一个位都对于一个地址,我们对地址进行操作,那么就可以单独地实现对这个位的读和写,此时不影响其它位
位带区和位带别名区示意图
TIPS:
在STM32里,片上外设和片上SRAM可以实现位带操作,但并不是所有的都可以,它有一个地址的限制。
片上外设和片上SRAM均有1MB的位带区,位带区里面的每一个位都可以通过位带别名区的地址来访问。位带区的一个位,对应位带别名区的四个字节。
3.位带区和位带别名区地址转换
地址转换:
统一地址:
问题:
addr:要操作的位所在寄存器的地址,怎么查询到?
解决:
参考手册-2存储器和总线架构-2.3存储器映像