ARM第二次

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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值