

1. 头文件
- #ifndef __LED_H__
- #define __LED_H__
-
- //结构体封装
- /*LED1*/
- 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;
- #define GPIOE ((gpio_t*)0x50006000)
- #define GPIOF ((gpio_t*)0x50007000)
-
- //LED1灯初始化
- void led1_init(void);
- //LED1灯点亮
- void led1_on(void);
- //LED1灯熄灭
- void led1_off(void);
-
-
- //LED2灯初始化
- void led2_init(void);
- //LED2灯的点亮
- void led2_on(void);
- //LED2灯的熄灭
- void led2_off(void);
-
- //LED3灯初始化
- void led3_init(void);
- //LED3灯的点亮
- void led3_on(void);
- //LED3灯的熄灭
- void led3_off(void);
-
- #endif
2.功能函数
- #include "led.h"
-
- //LED1灯初始化
- void led1_init(void)
- {
- //1.设置GPIOE控制器使能
- *(volatile unsigned int*)0x50000A28 |= (0x1 << 4);
-
- //2.设置PE10引脚为输出模式
- GPIOE->MODER &= (~(0x3 << 20));
- GPIOE->MODER |= (0x1 << 20);
-
- //3.设置PE10引脚为推晚输出模式
- GPIOE->OTYPER &= (~(0x1 << 10));
-
- //4.设置PE10引脚为低速输出
- GPIOE->OSPEED &= (~(0x3 << 20));
-
- //5.设置PE10引脚禁止上下拉电阻
- GPIOE->PUPDR &= (~(0x3 << 20));
- }
-
- //LED1灯点亮
- void led1_on(void)
- {
- //1.设置PE10引脚输出高电平
- GPIOE->ODR |= (0x1 << 10);
- }
-
- //LED1灯熄灭
- void led1_off(void)
- {
- //1.设置PE10引脚输出低电平
- GPIOE->ODR &= (~(0x1 << 10));
- }
-
-
- //LED2灯初始化
- void led2_init(void)
- {
- //1.设置GPIOF控制器使能
- *(volatile unsigned int*)0x50000A28 |= (0x1 << 5);
-
- //2.设置PF10引脚为输出模式
- GPIOF->MODER &= (~(0x3 << 20));
- GPIOF->MODER |= (0x1 << 20);
-
- //3.设置PF10的引脚为推挽输出模式
- GPIOF->OTYPER &= (~(0x3 << 20));
-
- //4.设置PF10引脚为低速输出
- GPIOF->OSPEED &= (~(0x3 << 20));
-
- //设置PF10引脚进制上下拉电阻
- GPIOF->PUPDR &= (~(0x3 << 20));
-
-
- }
- //LED2灯的点亮
- void led2_on(void)
- {
- GPIOF->ODR |= (0x1 << 10);
- }
-
- //LED2灯的熄灭
- void led2_off(void)
- {
- GPIOF->ODR &= (~(0x1 << 10));
- }
-
-
- //LED3灯初始化
- void led3_init(void)
- {
- //1.设置GPIOE控制器是使能
- *(volatile unsigned int*)0x50000A28 |= (0x1 << 4);
-
- //2.设置PE8为输出模式
- GPIOE->MODER &= (~(0x3 << 16));
- GPIOE->MODER |= (0x1 << 16);
-
- //3.设置PE8为推挽输出
- GPIOE->OTYPER &= (~(0x1 << 8));
-
- //4.设置PE8为低速运行
- GPIOE->OSPEED &= (~(0x3 << 16));
-
- //5.设置PE8进制上下拉电阻
- GPIOE->PUPDR &= (~(0x3 << 16));
- }
- //LED3灯的点亮
- void led3_on(void)
- {
- GPIOE->ODR |= (0x1 << 8);
- }
- //LED3灯的熄灭
- void led3_off(void)
- {
- GPIOE->ODR &= (~(0x1 << 8));
- }
-
3.测试函数
- #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++);
- }
-
-
- int main()
- {
- led1_init();
- led2_init();
- led3_init();
- while(1)
- {
- led1_on();
- delay_ms(500);
- led1_off();
- delay_ms(500);
-
- led2_on();
- delay_ms(500);
- led2_off();
- delay_ms(500);
-
- led3_on();
- delay_ms(500);
- led3_off();
- delay_ms(500);
-
-
-
- }
-
-
-
- return 0;
- }