嵌入式stm32 复习(工作用)--- GPIO位操作基础知识 2020.5.17

1.位操作就是单独的对一个比特位进行读或者写操作,这个在51单片机中非常常见,51单片机通过关键字sbit来实现位定义,但是我们在cortex-m芯片中没有关键字这个操作,例如stm32f4xx系列。

2.在f4系列中,有两个地方实现了位带。一个是SRAM区的最低1MB空间,另一个就是外设区的最低1MB空间。同时需要特别注意,如果想要实现对这两个空间的访问,就必须先访问其对应空间的别名区域,也就是这两个位带区都有自己的位带别名区,位带别名区把这两个1MB空间的每一个比特位都膨胀成32位的字,但是膨胀之后的32位的字只是LSB位有效,即最低位有效,其他位都是没有意义的。即通过访问位带别名区的这些字时,就可以达到访问位带区的某个比特位的目的。
3.
在这里插入图片描述
4.
在这里插入图片描述
5.由上面两张图可以得知两个位带区对应的别名位带区地址,那么这个别名位带区地址是怎样得来的呢,即位带区是怎样映射到别名区呢?接下来给大家答案!

由于一般都不会对SRAM区进行单个比特位的读/写操作,所以这里就以片内外设区为例。

在这里插入图片描述

对上述公式解释如下:
bit_word_offset:目标位在位带存储区域中的位置。
byte_offset:包含目标位的位带区域中的字节数。
byte_offset x 32:一个字节有8个比特,一个比特在别名区域中被扩大4个字节。
bit_number:目标位的位置(0-7)。
bit_number x 4:一个比特在别名区域中被扩大4个字节。
bit_word_addr:映射到目标位的别名内存区域中的字的地址。
bit_band_base:别名区域的起始地址。

6.C语言实现:
在这里插入图片描述注意:这里<<5等价于32;<<2等价于4;接下来就可以根据其不同的寄存器地址来对其目标比特位进行读/写操作,最常用的就是通过控制GPIO的输入/输出寄存器来实现控制其模式进而实现LED的亮灭。

原创文章 46 获赞 90 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40544107/article/details/106172852