17-从零写库函数3

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相应的位进行置位和复位操作

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值