STM32封裝自己的庫函數

定義自己的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);

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章