STM32 - GPIO 的位带操作

  我采用得是STM32F10RC  参考得是STM32普中科技的给出得例子:https://www.bilibili.com/video/av30149282/?p=45(这里给出网址)

https://blog.csdn.net/bulebin/article/details/73730141  这个博文还可以

ps:在15中 是个hi用sbit 进行位带

1、位带介绍

什么是位带呢? stm32 中没有sbit, 所以我们采用的是位带别名区

(1)

STM32 - GPIO 的位带操作

STM32 - GPIO 的位带操作

 

通过访问Bit band Alias 他 来控制 bit Band  ALias 的位

(2)位带区和位带别名区的转换

STM32 - GPIO 的位带操作

 

别名区地址=外设微带别名区的基地址+(位带区-位带区的起始地址)*32+n*4

n:表示的是是在第几位啊    其中每一位又膨胀成为i32位 4个字节  所以乘以4  

通过访问位带别名区 来访问别位带区

 

 

下面对上面这个两个公式进行统一“

STM32 - GPIO 的位带操作

 

 

位带操作一般都是对GPIO直接进行操作

 

3、位带部分的程序是怎么写的?

STM32 - GPIO 的位带操作

 

4、定义需要可以进行位带的GPIO口

一般位带的使用 我们都是对GPIO进行操作,所以我们还要将GPIO对应其来加入下面程序

STM32 - GPIO 的位带操作

 

 

大家可能跟我一样会对这个ODR和 IDR 有一定的考虑,为什么还会有输入呢?

https://zhidao.baidu.com/question/429972752.html(可以参考)

IDR这个寄存器的作用是为了实现读取端口的电位

 

5、实际应用

你们看,如果我想对使用哪个管脚的输出的位带 或者 读取电平的位带,我就可以直接对齐进行操作就ok了

STM32 - GPIO 的位带操作