STM32封装自己的库函数

0 篇文章 0 订阅

定义自己的GPIO引脚的结构体

原始封装定引脚比较复杂如下需要多次重复容易错移植性差

#include “stm32f4xx.h”

/*peripheral*/

#define PERIPH_BASE ((unsiged int )0x400000000)

#define AHB1PERIPH_BASE (PERIHP_BASE+0x00020000)

#define GPIOH_BASE (AH1PERIPH +0x00001c00)

#define GPIOA_BASE  (AH1PERIPH +0x00000000)

#define GPIO_MODER   *(unsigned int *)(GPIO_BSAE+0x00)

#define GPIO_OTYPER  *(unsigned int *)(GPIO_BSAE+0x04)

#define GPIO_OSPEEDER  *(unsigned int *)(GPIO_BSAE+0x08)

#define GPIO_PUPDR   *(unsigned int *)(GPIO_BSAE+0x0c)

#define GPIO_IDR   *(unsigned int *)(GPIO_BSAE+0x10)

#define GPIO_ODR   *(unsigned int *)(GPIO_BSAE+0x14)

#define GPIO_BSRR  *(unsigned int *)(GPIO_BSAE+0x18)

#define GPIO_LCKR   *(unsigned int *)(GPIO_BSAE+0x1c)

#define GPIO_AFRL  *(unsigned int *)(GPIO_BSAE+0x20)

#define GPIO_AFRH  *(unsigned int *)(GPIO_BSAE+0x24)

采用结构体封装类型强转可简化代码提高可移植性和可读性

typedef unsigned int  unit32_t

typedef unsigned short unit16_t

typedef struct

{

unit32_t  MODER

unit32_t   OTYPER

unit32_t   OSPEEDER

unit32_t   PUPDR

unit32_t   IDR

unit32_t   ODR

unit16_t   BSRRL

unit16_t BSRRH

unit32_t   LCKR

unit32_t  AFR[2]

}GPIO_Typedef

#define  GPIOH   ((GPIO_Typedef *) GPIOH_BASE)

#define  GPIOA     ((GPIO_Typedef *) GPIOA_BASE)

#define RCC_BASE  (AHB1PERIPH_BASE+0x00003800)

#define RCC_AHB1ENR  *(unsigned int *)(RCC_BASE+0x00)

void GPIO_SetBits() #GPIO引脚置位

void GPIO_ResetBits() #GPIO引脚复位

void main()

{

}

void SystemInit(void)

{

}

void GPIO_SetBits(GPIO_Typedef *GPIOx, uint16_t GPIO_pin)

{

GPIOx->BSRRL|=(1<<GPIO_PIN);

}

void GPIO_ResetBit(GPIO_Typedef *GPIOx,unit16_t GPIO_pin)

{

GPIOx->BSRRH|=(1<<GPIO_pin);

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值