分析:
main.c
#include "led.h"
int main()
{
work_init();
while(1)
{
work_flash();
}
return 0;
}
.h文件
#ifndef __LED_H__
#define __LED_H__
typedef struct {
unsigned int MODER;
unsigned int OTYPER;
unsigned int OSPEEDR;
unsigned int PUPDR;
unsigned int IDR;
unsigned int ODR;
}gpio_t;
#define GPIOB ((gpio_t *)0x50003000)
#define GPIOE ((gpio_t *)0x50006000)
#define RCC (*(volatile unsigned int *)0x50000000)
void delay_ms(int ms);
void work_init();
void work_flash();
#endif
.c文件
#include"led.h"
//延时函数
void delay_ms(int ms)
{
int i,j;
for(i = 0; i < ms;i++)
for (j = 0; j < 1800; j++);
}
//响1秒,转5秒
void work_init()
{
//使能GPIOB和GPIOE
RCC |= (1 << 1);
RCC |= (1 << 4);
//设置GPIOB
GPIOB->MODER &= (~(0x3 << 12));
GPIOB->MODER |= (0x1 << 12);
GPIOB->OTYPER &= (~(0x1 << 6));
GPIOB->OSPEEDR &= (~(0x1 << 6));
GPIOB->PUPDR &= (~(0x3 << 12));
//设置GPIOE
GPIOE->MODER &= (~(0x3 << 18));
GPIOE->MODER |= (0x1 << 18);
GPIOE->OTYPER &= (~(0x1 << 9));
GPIOE->OSPEEDR &= (~(0x1 << 9));
GPIOE->PUPDR &= (~(0x3 << 18));
}
void work_flash()
{
GPIOB->ODR |= (0x1 << 6);
delay_ms(1000);
GPIOB->ODR &= (~(0x1 << 6));
GPIOE->ODR |= (0x1 << 9);
delay_ms(5000);
GPIOE->ODR &= (~(0x1 << 9));
}