GPIOC 外设,其基地址是0x4001 1000,那么本寄存器GPIOx_BSRR 地址=0x4001
1000+0x10=0x4001 1010。对于其他的GPIO 外设也是一个原理。
C.红色框6 和7 表示的是寄存器的位表。其中6 表示寄存器编号,因为一个
寄存器是32bit,所以范围是0-31。7 表示的是相应位的权限,w:只写,r:只
读,rw:可读可写。本寄存器位权限是w,所以只能写,如果试图读本寄存器,
是无法保证读取到它真正内容的。而有的寄存器位权限为只读,一般是用于表示
STM32 外设的某种工作状态的,由STM32 硬件自动更改,通过读取那些寄存器位
来判断外设的工作状态。
D.红色框8 是寄存器位功能说明。这个也是寄存器说明中最重要的部分,它
详细介绍了寄存器每一个位的功能。例如本寄存器中有两种寄存器位,分别为
BRy 及BSy,其中的y 数值表示的是管脚号,可以是0-15。如BR0、BS0 用于
控制GPIOx 的第0 个引脚,若x 表示GPIOC,那就是控制GPIOC 的第0 引脚,
而BR1、BS1 就是控制GPIOC 第1 个引脚。
其中BRy 引脚的说明是“ 0:不会对相应的ODRx 位执行任何操作; 1:
对相应ODRx 位进行复位”。这里的“复位”是将该位设置为0 的意思,而“置
位”表示将该位设置为1;说明中的ODRx 是另一个寄存器的寄存器位,我们只
需要知道ODRx 位为1 的时候,对应的引脚x 输出高电平,为0 的时候对应的
引脚输出低电平即可(感兴趣的读者可以查询该寄存器GPIOx_ODR 的说明了
解)。所以,如果对BR0 写入“ 1”的话,那么GPIOx 的第0 个引脚就会输出
“低电平”,但是对BR0 写入“ 0”的话,却不会影响ODR0 位,所以引脚电
平不会改变。要想该引脚输出“高电平”,就需要对“ BS0”位写入“ 1”,寄
存器位BSy 与BRy 是相反的操作。
使用C 语言封装寄存器:
实例1:控制GPIOC 端口的第0 管脚输出一个低电平。首先我们需要知道
GPIOC 端口外设是挂接在哪个总线上的,然后根据总线基地址和本身的偏移地址
得到GPIOC 外设基地址,最后通过这个外设基地址得到里面各种寄存器基地址。
(1)总线和外设基地址封装
普中STM32F1xx 开发攻略
41
根据寄存器的概念,我们可以使用C 语言中的宏定义对寄存器进行定义。具
体代码如下:
//定义外设基地址
#define PERIPH_BASE ((unsigned int)0x40000000) 1)
//定义APB2 总线基地址
#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000) 2)
//定义GPIOC 外设基地址
#define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800) 3)
//定义寄存器基地址这里以GPIOC 为例
#define GPIOC_CRL *(unsigned int*)(GPIOC_BASE+0x00) 4)
#define GPIOC_CRH *(unsigned int*)(GPIOC_BASE+0x04)
#define GPIOC_IDR *(unsigned int*)(GPIOC_BASE+0x08)
#define GPIOC_ODR *(unsigned int*)(GPIOC_BASE+0x0C)
#define GPIOC_BSRR *(unsigned int*)(GPIOC_BASE+0x10)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-66178-3.html
小米电源不需要抢吧
专家说
只是对于大多数人而言
主要是中国的国籍不开放