
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进行设置
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)