gpio.h
#ifndef __gpio_h__
#define __gpio_h__
#define RCC_AHB4_ENSETR (*(volatile unsigned int *)0x50000A28)
typedef struct
{
volatile unsigned int MODER;
volatile unsigned int OTYPER;
volatile unsigned int OSPEEDR;
volatile unsigned int PUPDR;
volatile unsigned int IDR;
volatile unsigned int ODR;
}gpio_t;
#define GPIOE ((gpio_t*)0x50006000)
#define GPIOE2 ((gpio_t*)0x50007000)
void led_init();
void led_on();
void led_off();
void led2_init();
void led2_on();
void led2_off();
void led3_init();
void led3_on();
void led3_off();
#endif
gpio.c
#include "gpio.h"
void led_init()
{
RCC_AHB4_ENSETR |=(0x1 <<4);
GPIOE->MODER &=(~(0x3<<20));
GPIOE->MODER |=(0x1<<20);
GPIOE->OSPEEDR &=(~(0x3<<20));
GPIOE->OTYPER &=(~(0x1<<10));
GPIOE->PUPDR &=(~(0x3<<20));
}
void led2_init()
{
RCC_AHB4_ENSETR |=(0x1 <<5);
GPIOE2->MODER &=(~(0x3<<20));
GPIOE2->MODER |=(0x1<<20);
GPIOE2->OSPEEDR &=(~(0x3<<20));
GPIOE2->OTYPER &=(~(0x1<<10));
GPIOE2->PUPDR &=(~(0x3<<20));
}
void led3_init()
{
RCC_AHB4_ENSETR |=(0x1 <<4);
GPIOE->MODER &=(~(0x3<<16));
GPIOE->MODER |=(0x1<<16);
GPIOE->OSPEEDR &=(~(0x3<<8));
GPIOE->OTYPER &=(~(0x1<<16));
GPIOE->PUPDR &=(~(0x3<<16));
}
void led_on()
{
GPIOE->ODR |=(0x1<<10);
}
void led_off()
{
GPIOE->ODR &=(~(0x1<<10));
}
void led2_on()
{
GPIOE2->ODR |=(0x1<<10);
}
void led2_off()
{
GPIOE2->ODR &=(~(0x1<<10));
}
void led3_on()
{
GPIOE->ODR |=(0x1<<8);
}
void led3_off()
{
GPIOE->ODR &=(~(0x1<<8));
}
main.c
#include "gpio.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++);
}
int main()
{
led_init(); // LED灯初始化
led2_init(); // LED灯初始化
led3_init(); // LED灯初始化
while(1)
{
led_on();
led2_on();
led3_on();
delay_ms(500);
led_off();
led2_off();
led3_off();
delay_ms(500);
}
return 0;