回到GPIO_TypeDef 这段代码,这个代码用 typedef 关键字声明了名为 GPIO_TypeDef 的结构体类型,结构体内又定义了 7 个 __IO uint32_t 类型的变量.这些变量每个都为 32 位,也就是每个变量占内存空间 4 个字节.在 c 语言中,结构体内变量的存储空间是连续的,也就是说假如我们定义了一个 GPIO_TypeDef ,这个...
GPIO函数功能 //GPIO的初始化函数voidGPIO_DeInit(GPIO_TypeDef*GPIOx);//将外设 GPIOx 寄存器重设为缺省值voidGPIO_AFIODeInit(void);//将复用功能(重映射事件控制和 EXTI 设置)重设为缺省值voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);//处初始化IO端口引脚功能voidGPIO_StructInit(GPI...
2.void GPIO_Init(GPIO_TypeDef * GPIOx,GPIO_InitTypeDef * GPIO_InitStruct) //请配合上面真值表分析,如果不够直观,请查看GPIOMode_TypeDef结构体的枚举值二进制,我们这里以GPIO_Mode_Out_PP = 0x10推挽输出 (0001 0000)b为例 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) {...
unsigned long iong = uint64_t 5.typedef 结构体(struct) 枚举enum typedef unsigned char uint8_t;将一个较长的变量换一个名字,但是原名字依然可以使用 struct 结构体懂的都懂struct.x=struct->x(1两种选择方式相同) enum{FALSE=0,TRUE=1} EnumName (限制变量取值范围) 6.GPIO输入函数 uint8_t GPIO_R...
6.通过GPIO_TypeDef结构体,我们可以用较少的代码声明全部的GPIO #defineGPIOA ((GPIO_TypeDef *)GPIOA_BASE)#defineGPIOB ((GPIO_TypeDef *)GPIOB_BASE)#defineGPIOC ((GPIO_TypeDef *)GPIOC_BASE)#defineGPIOD ((GPIO_TypeDef *)GPIOD_BASE)#defineGPIOE ((GPIO_TypeDef *)GPIOE_BASE)#defineGPIOF (...
//通过查找 GPIO_TypeDef 结构体可以看到typedef struct{__IO uint32_t CRL;//端口配置低寄存器__IO uint32_t CRH;//端口配置高寄存器__IO uint32_t IDR;//端口输入数据寄存器__IO uint32_t ODR;//端口输出数据寄存器__IO uint32_t BSRR;//端口置位/复位寄存器__IO uint32_t BRR;//端口位清除寄存...
2. 配置结构体 GPIO配置结构体是一个用于配置GPIO引脚参数的数据结构,面是一个典型的GPIO配置结构体的说明:typedef struct { uint32_t GPIO_Pin; // GPIO引脚编号,可以是单个引脚或者多个引脚的组合,如 GPIO_Pin_0 | GPIO_Pin_1 GPIOMode_TypeDef Mode; // GPIO引脚的工作模式,包括输入模式...
/*代码太长可以参考野火指南者: PDF154页. 这里省略了CRH部分代码*/voidGPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct){uint32_tcurrentmode =0x00, currentpin =0x00, pinpos =0x00, pos =0x00;uint32_ttmpreg =0x00, pinmask =0x00;/* Check the parameters */assert_param(IS...
由于GPIO_TypeDef结构体变量里的成员变量的地址是连续的。所以GPIOx指向谁,地址就从谁开始。 1.2 解析 assert_param(IS_GPIO_ALL_PERIPH(GPIOx)) assert_param函数的作用就是检测传递给函数的参数是否是有效的参数。其中assert_param的传入参数是一个宏。