cortex-A7核引脚初始化代码

------------------------------------------------------
led.h
------------------------------------------------------
#ifndef __LED_H__
#define __LED_H__

//RCC ->0x50000A28
#define RCC_AHB4 (*(volatile unsigned int *)0x50000A28)
//GPIOE ->0x50006000
#define GPIOE ((GPIO_t *)0x50006000)
//GPIOF ->0x50007000
#define GPIOF ((GPIO_t *)0x50007000)
//引脚初始化
#define GPIO_PIN_0 0
#define GPIO_PIN_1 1
#define GPIO_PIN_2 2
#define GPIO_PIN_3 3
#define GPIO_PIN_4 4
#define GPIO_PIN_5 5
#define GPIO_PIN_6 6
#define GPIO_PIN_7 7
#define GPIO_PIN_8 8
#define GPIO_PIN_9 9
#define GPIO_PIN_10 10
#define GPIO_PIN_11 11
#define GPIO_PIN_12 12
#define GPIO_PIN_13 13
#define GPIO_PIN_14 14
#define GPIO_PIN_15 15

//GPIO_MODER枚举
typedef enum
{
	INPUT,//输入模式
	OUTPUT,//输出模式
	ALT,//复用模式
	ANA,//模拟模式
}GPIO_MODER;

//GPIO_OTYPER枚举
typedef enum
{
	PUSH_PULL,//推挽输出
	OPEN_DRAIN,//开漏输出
}GPIO_OTYPER;

//GPIO_OSPEED枚举
typedef enum
{
	LOW,//低速
	MED,//中速
	HIGH,//高速
	VERY_HIGH,//快速
}GPIO_OSPEED;

//GPIO_PUPDR枚举
typedef enum
{
	NO_UD,//禁止上下拉
	UP,//上拉电阻
	DOWN,//下拉电阻
}GPIO_PUPDR;

//GPIO_ODR枚举
typedef enum
{
	PIN_RESET,//低电平
	PIN_SET,//高电平
}GPIO_ODR;
//GPIO结构体
typedef struct
{
	volatile unsigned int MODER;
	volatile unsigned int OTYPER;
	volatile unsigned int OSPEED;
	volatile unsigned int PUPDR;
	volatile unsigned int IDR;
	volatile unsigned int ODR;
}GPIO_t;

//GPIO初始化结构体
typedef struct
{
	GPIO_MODER moder;
	GPIO_OTYPER otyper;
	GPIO_OSPEED ospeed;
	GPIO_PUPDR pupdr;
}GPIO_INIT_t;

//GPIO初始化函数
void HAL_GPIO_INIT(GPIO_t *GPIOx,unsigned int GPIO_PIN,GPIO_INIT_t* INIT);

//LED灯状态
void HAL_GPIO_WRITE(GPIO_t *GPIOx,unsigned int GPIO_PIN,GPIO_ODR STAT);
#endif


------------------------------------------------------
led.c
------------------------------------------------------
#include "led.h"
//GPIO初始化函数
void HAL_GPIO_INIT(GPIO_t *GPIOx,unsigned int PIN,GPIO_INIT_t *INIT)
{
	//GPIO_MODER初始化
	GPIOx->MODER &= (~(0x3 << (PIN * 2)));
	GPIOx->MODER |= (INIT->moder << (PIN * 2));
	//GPIO_OTYPER初始化
	GPIOx->OTYPER &= (~(0x1 << PIN));
	GPIOx->OTYPER |= (INIT->otyper << PIN);
	//GPIO_OSPEED初始化
	GPIOx->OSPEED &= (~(0x3 << (PIN * 2)));
	GPIOx->OSPEED |= (INIT->ospeed << (PIN * 2));
	//GPIO_PUPDR初始化
	GPIOx->PUPDR &= (~(0x3 << (PIN * 2)));
	GPIOx->PUPDR |= (INIT->pupdr << (PIN * 2));
}

//LED灯状态
void HAL_GPIO_WRITE(GPIO_t *GPIOx,unsigned int PIN,GPIO_ODR STAT)
{
	//设置LED灯输出电平
	GPIOx->ODR &= (~(0x1 << PIN));
	GPIOx-> ODR |= (STAT << PIN);
}


------------------------------------------------------
main.c
------------------------------------------------------
#include "led.h"
extern void printf(const char *fmt, ...);
void delay_ms(int ms)
{
	int i,j;
	for(i = 0; i < ms;i++)
		for (j = 0; j < 1800; j++);
}

//GPIO初始化函数
void GPIO_init()
{
	GPIO_INIT_t init = {OUTPUT,PUSH_PULL,LOW,NO_UD};
	RCC_AHB4 |= (0x3 << 4);
	HAL_GPIO_INIT(GPIOE,GPIO_PIN_10,&init);
	HAL_GPIO_INIT(GPIOF,GPIO_PIN_10,&init);
	HAL_GPIO_INIT(GPIOE,GPIO_PIN_8,&init);
}

int main()
{
	//初始化
	GPIO_init();

	while(1)
	{
		HAL_GPIO_WRITE(GPIOE,GPIO_PIN_10,PIN_SET);
		delay_ms(500);
		HAL_GPIO_WRITE(GPIOE,GPIO_PIN_10,PIN_RESET);
		delay_ms(500);
		HAL_GPIO_WRITE(GPIOF,GPIO_PIN_10,PIN_SET);
		delay_ms(500);
		HAL_GPIO_WRITE(GPIOF,GPIO_PIN_10,PIN_RESET);
		delay_ms(500);
		HAL_GPIO_WRITE(GPIOE,GPIO_PIN_8,PIN_SET);
		delay_ms(500);
		HAL_GPIO_WRITE(GPIOE,GPIO_PIN_8,PIN_RESET);
		delay_ms(500);
	}
	return 0;
}

你可能感兴趣的:(arm开发,c语言)