main.c
#include "led.h"
#include "delay.h"
int main()
{
LED1_Init();
LED2_Init();
LED3_Init();
while (1)
{
//LED1灯亮
LED1_TurnOn();
LED2_TurnOff();
LED3_TurnOff();
delay_ms(500);
//LED2灯亮
LED1_TurnOff();
LED2_TurnOn();
LED3_TurnOff();
delay_ms(500);
//LED3灯亮
LED1_TurnOff();
LED2_TurnOff();
LED3_TurnOn();
delay_ms(500);
}
return 0;
}
led.c
#include "led.h"
void LED1_Init(void)
{
//使能GPIOE时钟
*((unsigned int*)0x50000A28) |= (0x00000001<<4);
//设置PE10引脚模式为输出
GPIOE->MODER &= ~(0x00000003<<20);
GPIOE->MODER |= (0x00000001<<20);
//设置PE10引脚的输出模式为推挽输出
GPIOE->OTYPER &= ~(0x00000001<<10);
//设置PE10引脚的输出速度为低速
GPIOE->OSPEEDR &= (~(0x00000003<<20));
//设置PE10引脚无上拉下拉电阻
GPIOE->PUPDR &= (~(0x00000003<<20));
}
void LED2_Init(void)
{
//使能GPIOF时钟
*((unsigned int*)0x50000A28) |= (0x00000001<<5);
//设置PF10引脚模式为输出
GPIOF->MODER &= ~(0x00000003<<20);
GPIOF->MODER |= (0x00000001<<20);
//设置PF10引脚的输出模式为推挽输出
GPIOF->OTYPER &= ~(0x00000001<<10);
//设置PF10引脚的输出速度为低速
GPIOF->OSPEEDR &= (~(0x00000003<<20));
//设置PF10引脚无上拉下拉电阻
GPIOF->PUPDR &= (~(0x00000003<<20));
}
void LED3_Init(void)
{
//使能GPIOE时钟
*((unsigned int*)0x50000A28) |= (0x00000001<<4);
//设置PE8引脚模式为输出
GPIOE->MODER &= ~(0x00000003<<16);
GPIOE->MODER |= (0x00000001<<16);
//设置PE8引脚的输出模式为推挽输出
GPIOE->OTYPER &= ~(0x00000001<<8);
//设置PE8引脚的输出速度为低速
GPIOE->OSPEEDR &= (~(0x00000003<<16));
//设置PE8引脚无上拉下拉电阻
GPIOE->PUPDR &= (~(0x00000003<<16));
}
void LED1_TurnOn(void)
{
GPIOE->ODR |= (0x00000001<<10);
}
void LED1_TurnOff(void)
{
GPIOE->ODR &= (~(0x00000001<<10));
}
void LED2_TurnOn(void)
{
GPIOF->ODR |= (0x00000001<<10);
}
void LED2_TurnOff(void)
{
GPIOF->ODR &= (~(0x00000001<<10));
}
void LED3_TurnOn(void)
{
GPIOE->ODR |= (0x00000001<<8);
}
void LED3_TurnOff(void)
{
GPIOE->ODR &= (~(0x00000001<<8));
}
led.h
#ifndef __LED_H__
#define __LED_H__
#define GPIOA_BASE_ADDRESS 0x50002000
#define GPIOB_BASE_ADDRESS 0x50003000
#define GPIOC_BASE_ADDRESS 0x50004000
#define GPIOD_BASE_ADDRESS 0x50005000
#define GPIOE_BASE_ADDRESS 0x50006000
#define GPIOF_BASE_ADDRESS 0x50007000
#define GPIOG_BASE_ADDRESS 0x50008000
#define GPIOH_BASE_ADDRESS 0x50009000
#define GPIOI_BASE_ADDRESS 0x5000A000
#define GPIOJ_BASE_ADDRESS 0x5000B000
#define GPIOK_BASE_ADDRESS 0x5000C000
typedef struct
{
volatile unsigned int MODER; //GPIOx_MODER
volatile unsigned int OTYPER; //GPIOx_OTYPER
volatile unsigned int OSPEEDR; //GPIOx_OSPEEDR
volatile unsigned int PUPDR; //GPIOx_PUPDR
volatile unsigned int IDR; //GPIOx_IDR
volatile unsigned int ODR; //GPIOx_ODR
volatile unsigned int BSRR; //GPIOx_BSRR
}GPIOx_REGISTER_t;
#define GPIOA ((GPIOx_REGISTER_t*)GPIOA_BASE_ADDRESS)
#define GPIOB ((GPIOx_REGISTER_t*)GPIOB_BASE_ADDRESS)
#define GPIOC ((GPIOx_REGISTER_t*)GPIOC_BASE_ADDRESS)
#define GPIOD ((GPIOx_REGISTER_t*)GPIOD_BASE_ADDRESS)
#define GPIOE ((GPIOx_REGISTER_t*)GPIOE_BASE_ADDRESS)
#define GPIOF ((GPIOx_REGISTER_t*)GPIOF_BASE_ADDRESS)
#define GPIOG ((GPIOx_REGISTER_t*)GPIOG_BASE_ADDRESS)
#define GPIOH ((GPIOx_REGISTER_t*)GPIOH_BASE_ADDRESS)
#define GPIOI ((GPIOx_REGISTER_t*)GPIOI_BASE_ADDRESS)
#define GPIOJ ((GPIOx_REGISTER_t*)GPIOJ_BASE_ADDRESS)
#define GPIOK ((GPIOx_REGISTER_t*)GPIOK_BASE_ADDRESS)
void LED1_Init(void);
void LED2_Init(void);
void LED3_Init(void);
void LED1_TurnOn(void);
void LED1_TurnOff(void);
void LED2_TurnOn(void);
void LED2_TurnOff(void);
void LED3_TurnOn(void);
void LED3_TurnOff(void);
#endif