arm 点灯实验代码以及现象(c语言版本)

.led.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 GPIOE (*(gpio_t*)0x50006000)
#define GPIOF (*(gpio_t*)0x50007000)
#define RCC   (*((unsigned int *)0x50000A28))

void delay(int ms);
void all_led_init();

#endif

led.c

#include"led.h"
//延时函数
void delay(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
	{
		for(j=0;j<2000;j++);
	}
}

//GPIO初始化
void all_led_init()
{
	//RCC使能
	RCC |= (0x3<<20);
	//设置PE10 PF10 PE8为输出
	GPIOE.moder &= (~(0x3<<20));
	GPIOE.moder |= (0x1<<20);
	GPIOF.moder &= (~(0x3<<20));
	GPIOF.moder |= (0x1<<20);
	GPIOE.moder &= (~(0x3<<16));
	GPIOE.moder |= (0x1<<16);
	//设置推挽输出
	GPIOE.otyper &= (~(0x1<<10));
	GPIOF.otyper &= (~(0x1<<10));
	GPIOE.otyper &= (~(0x1<<8));
	//设置三个管脚低速输出
	GPIOE.ospeedr &= (~(0x3<<20));
	GPIOF.ospeedr &= (~(0x3<<20));
	GPIOE.ospeedr &= (~(0x3<<16));
	//设置三个管脚输出时无上拉电阻和下拉电阻
	GPIOE.pupdr &= (~(0x3<<20));
	GPIOE.pupdr &= (~(0x3<<20));
	GPIOE.pupdr &= (~(0x3<<20));
	



}

main.c

#include "led.h"

int main()
{
	//完成GPIO的相关初始化
	all_led_init();
	while(1)
	{
		//LED1亮
		GPIOE.odr |= (0x1<<10);
		GPIOF.odr &= (~(0x1<<10));
		GPIOE.odr &= (~(0x1<<8));
 		delay(1000);
		GPIOE.odr &= (~(0x1<<10));
		GPIOF.odr |= ((0x1<<10));
		GPIOE.odr &= (~(0x1<<8));
 		delay(1000);
		GPIOE.odr &= (~(0x1<<10));
		GPIOF.odr &= (~(0x1<<10));
		GPIOE.odr |= (0x1<<8);
 		delay(1000);


	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值