#define GPIOD_BASE (APB2PERIPH_BASE + 0x1400)什么意思。

#define GPIOD_BASE (APB2PERIPH_BASE + 0x1400)什么意思。,第1张

define一般像下面这样使用。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换。

#define 宏名 字符串

如果定义了#define M (a+b),那么在编写源程序时,所有的M在预处理时,都会被(a+b)表达式所置换。

在stm32f10x.h文件中定义了

#define PERIPH_BASE             ((uint32_t)0x40000000)

#define APB2PERIPH_BASE    (PERIPH_BASE + 0x10000)

#define GPIOD_BASE              (APB2PERIPH_BASE + 0x1400)

那么在编译前GPIOD_BASE就是((0x40000000+0x10000)+0x1400),也就是0x40011400。

在stm32f103的数据手册register map一节中,可以看下Port D的基地址正是0x40011400。

main.c

这个不用解释了吧

stm32f10x.h

这个是头文件,它包含了stm32的一些常用宏,寄存器结构体的定义,高版本的库还放着中断向量表。

stm32f10x_rcc.c

这个文件里的固件函数包含了一些对复位、时钟的控制的函数

stm32f10x_gpio.c这个文件里的固件函数包含了对GPIO的 *** 作函数

stm32_eval.c

这个是st公司为其制作的评估板写的程序

system_stm32f10x.c主要包含了对系统时钟设置,一般是对倍频时钟的设置

三、GPIO_InitTypeDef

GPIO_InitStructure

ErrorStatus

HSEStartUpStatus

u8

count=0

四、void

Delay(vu32

nCount)

void

Turn_On_LED(u8

LED_NUM)

希望您能帮助我,我会给您高分的。回答:

1、因为引脚本来就是16个的啊,从pin0~pin15,GPIOA口有16个脚,GPIOB也有16个,GPIOC也有16个,是这样区分的,它是相对于一组io口的细分,ALL来代替的是选中了这一组io

2、不可以,呵呵你要选择到底是GPIOA还是GPIOB还是...C还是...D等等的GPIO_Pin_0

3、GPIO_InitTypeDef、ErrorStatus是两个结构体,u8是定义的unsigned

char你可以通过keil的go

to

definition选项找到它们的定义,这个是标准C的定义

嗯,是的C语言基础不太好,以前学单片机主要是用汇编。

回答:

这个是STM32里面的固件函数,

竖线是并的意思,即GPIOB和GPIOD同时使用时钟驱动,否则对IO口 *** 作无效;

下面就是对GPIOB的端口5进行初始化,这个是结构体,其中

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5//选中PIN_5

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP//输出模式为推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz//端口的最大反转速度50Mhz

GPIO_Init(GPIOB, &GPIO_InitStructure)//将上面的参数进行对实际的GPIOB进行设置


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/12026018.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存