1:首先构建结构体
typedef struct
{
uint32_t MODER;//moder在配置时,只有4种值,然而uint32_t可以表示2^32种数值
//为了防止配置结构体取值错误,这里对MODER的取值进行了限定
uint32_t PUPDR;
uint32_t OTYPER;
uint32_t OSPEEDR;
}GPIO_InitTypeDef;
2:在C语言中限制结构体成员的值,用enum这种结构体
在enum中,用逗号隔开,最后一个不加逗号
typedef enum //在C语言中限制结构体成员的值,用enum这种结构体
{
GPIO_Mode_IN=0x00,
GPIO_Mode_OUT=0x01,
GPIO_Mode_AF=0x02,
GPIO_Mode_AN=0x03
}GPIOMode_TypeDef;
3:将1中的uint32_t MOEDR替换成GPIOMode_TypeDef结构体
更改后的结构体为:
typedef struct
{
GPIOMode_TypeDef;//moder在配置时,只有4种值,然而uint32_t可以表示2^32种数值
//为了防止配置结构体取值错误,这里对MODER的取值进行了限定
uint32_t PUPDR;
uint32_t OTYPER;
uint32_t OSPEEDR;
}GPIO_InitTypeDef;
4:给结构体赋值
GPIO_InitTypeDef GPIO_InitStruct;//将结构体重新命名,结构体定义一个变量
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;//往结构体里面写值,说明往第10个引脚里面写数
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_PuPd=GPIO_Mode_UP;//配置成默认,上拉
GPIO_InitStruct.GPIO_OType=GPIO_Mode_PP;//通用的推挽输出
GPIO_InitStruct.GPIO_Speed=GPIO_Mode_2MHz;
5:把结构体里面的值赋值给GPIO各个寄存器
GPIO_Init(GPIOF,&GPIO_InitStruct);//把结构体里面的数据转换成地址&
总结一下从0来时创建固件库的思路
1:通过寄存器的方式来控制GPIO---与51单片机的控制方式进行对比
2:了解stm32地址的分配方式
3:写GPIO的结构体
4:写GPIO置位复位函数,用Set和Reset代替之前的位移操作
5:在写一个结构体用于GPIO的初始化
6:写一个函数将5的结构体里面的数据写到寄存器指定的位置
7:控制GPIO相应的位进行置位和复位操作