b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

c语言内存分配对应 嵌入式C语言开发(3)

电脑杂谈  发布时间:2018-02-07 23:20:47  来源:网络整理

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

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...