ARM cortex-A7核LED灯实验 C代码

通过对控制寄存器的封装,实现LED灯的循环点亮。

头文件:

 1 #ifndef __LED_H__                                                           
 2 #define __LED_H__                                                           
 3                                                                             
 4 //结构体封装                                                                
 5 typedef struct                                                              
 6 {                                                                           
 7     volatile unsigned int MODER;                                            
 8     volatile unsigned int OTYPER;                                           
 9     volatile unsigned int OSPEEDR;                                          
10     volatile unsigned int PUPDR;                                            
11     volatile unsigned int IDR;                                              
12     volatile unsigned int ODR;                                              
13 }gpio_t;                                                                    
14 #define GPIOE ((gpio_t*)0x50006000)                                         
15 #define GPIOF ((gpio_t*)0x50007000)                                         
16                                                                             
17 #define RCC_MP_AHB4ENSETR (*(volatile unsigned int*)0x50000A28)             
18                                                                             
19 //LED1灯初始化                                                              
20 void led1_init(void);                                                       
21 //LED1灯点亮                                                                
22 void led1_on(void);                                                         
23 //LED1灯熄灭                                                                
24 void led1_off(void);                                                        
25                                                                             
26 //LED2灯初始化                                                              
27 void led2_init(void);                                                       
28 //LED2灯点亮                                                                
29 void led2_on(void);                                                         
30 //LED2灯熄灭                                                                
31 void led2_off(void);                                                        
32                                                                             
33 //LED3始化                                                                  
34 void led3_init(void);                                                       
35 //LED3灯点亮                                                                
36 void led3_on(void);                                                         
37 //LED3灯熄灭                                                                
38 void led3_off(void);                                                        
39                                                                             
40 #endif                                                                      
                                                                               

源文件:

#include "led.h"

//LED1灯初始化
void led1_init(void)
{
	//1.设置GPIOE控制器使能 4位置1
	RCC_MP_AHB4ENSETR |= (0x1<<4);

	//2.设置PE10引脚为输出模式 21:20 位置 01
	GPIOE->MODER &= (~(0x3<<20));
	GPIOE->MODER |= (0x1<<20);
	
	//3.设置PE10引脚为推晚输出模式 10位置0
	GPIOE->OTYPER &= (~(0x1<<10));

	//4.设置PE10引脚为低速输出 21:20 位置 00
	GPIOE->OSPEEDR &= (~(0x3<<20)); 

	//5.设置PE10引脚禁止上下拉电阻 21:20位置 00
	GPIOE->PUPDR &= (~(0x3<<20));
}
//LED1灯点亮
void led1_on(void)
{
	//1.设置PE10引脚输出高电平 10 位置 1
	GPIOE->ODR |= (0x1<<10);
}
//LED1灯熄灭
void led1_off(void)
{
	//1.设置PE10引脚输出低电平 10 位置 0
	GPIOE->ODR &= (~(0x1<<10));
}

//LED2灯初始化
void led2_init(void)
{
	//1.设置GPIOF控制器使能 5位置1
	RCC_MP_AHB4ENSETR |= (0x1<<5);

	//2.设置PF10引脚为输出模式 21:20 位置 01
	GPIOF->MODER &= (~(0x3<<20));
	GPIOF->MODER |= (0x1<<20);
	
	//3.设置PF10引脚为推晚输出模式 10位置0
	GPIOF->OTYPER &= (~(0x1<<10));

	//4.设置PF10引脚为低速输出 21:20 位置 00
	GPIOF->OSPEEDR &= (~(0x3<<20)); 

	//5.设置PF10引脚禁止上下拉电阻 21:20位置 00
	GPIOF->PUPDR &= (~(0x3<<20));
}
//LED2灯点亮
void led2_on(void)
{
	//1.设置PF10引脚输出高电平 10 位置 1
	GPIOF->ODR |= (0x1<<10);
}
//LED2灯熄灭
void led2_off(void)
{
	//1.设置PF10引脚输出低电平 10 位置 0
	GPIOF->ODR &= (~(0x1<<10));
}

//LED3灯初始化
void led3_init(void)
{
	//1.设置GPIOE控制器使能 4位置1
	RCC_MP_AHB4ENSETR |= (0x1<<4);

	//2.设置PE8引脚为输出模式 17:16 位置 01
	GPIOE->MODER &= (~(0x3<<16));
	GPIOE->MODER |= (0x1<<16);
	
	//3.设置PE8引脚为推晚输出模式 8位置0
	GPIOE->OTYPER &= (~(0x1<<8));

	//4.设置PE8引脚为低速输出 17:16 位置 00
	GPIOE->OSPEEDR &= (~(0x3<<16)); 

	//5.设置PE8引脚禁止上下拉电阻 17:16位置 00
	GPIOE->PUPDR &= (~(0x3<<16));
}
//LED3灯点亮
void led3_on(void)
{
	//1.设置PE8引脚输出高电平 8 位置 1
	GPIOE->ODR |= (0x1<<8);
}
//LED3灯熄灭
void led3_off(void)
{
	//1.设置PE8引脚输出低电平 8 位置 0
	GPIOE->ODR &= (~(0x1<<8));
}

主函数测试:

 1 #include "led.h"
 2 
 3 extern void printf(const char *fmt, ...);
 4 void delay_ms(int ms)
 5 {
 6     int i,j;
 7     for(i = 0; i < ms;i++)
 8         for (j = 0; j < 1800; j++);
 9 }
10 
11
12 int main()
13 {
14     led1_init();
15     led2_init();
16     led3_init();
17     while(1)
18     {
19         led1_on();
20         delay_ms(500);
21         led1_off();
22 
23         led2_on();
24         delay_ms(500);
25         led2_off();
26 
27         led3_on();
28         delay_ms(500);
29         led3_off();
30     }
31     return 0;
32 }                                             
                                                 
                                                 

make:

 

实验现象截图:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值