ARM使用C语言实现点灯

 gpio.h

#ifndef __GPIO_H__
#define __GPIO_H__
#define RCC_AHB4_ENSETR (*(volatile unsigned int*)0x50000A28)

typedef struct
{
	volatile unsigned int MODER; //00
    volatile unsigned int OTYPER; //04
	volatile unsigned int OSPEEDR; //08
	volatile unsigned int PUPDR; //0c
	volatile unsigned int IDR; //10
	volatile unsigned int ODR; //14

}gpio_t;
#define GPIOE ((gpio_t*)0x50006000)
#define GPIOF ((gpio_t*)0x50007000)


void LED1_init();

void LED1_on();

void LED1_off();

void LED2_init();

void LED2_on();

void LED2_off();

void LED3_init();

void LED3_on();

void LED3_off();


#endif

gpio.c

#include"gpio.h"


void LED1_init()
{
    //0.设置GPIOE时钟使能
	RCC_AHB4_ENSETR |=(0x1 << 4);

	//1.设置PE10引脚为输出模式
	GPIOE->MODER &= (~(0x3 << 20));
    GPIOE->MODER |=(0x1 << 20);

	//2.设置PE10引脚为推挽模式
	GPIOE->OTYPER &=(~(0x1 << 10));
	
	//3.设置PE10引脚为低速模式
	GPIOE->OSPEEDR &=(~(0x3 << 20));

	
	//4.设置PE10引脚禁止上下拉
	GPIOE->PUPDR &=(~(0x3 << 20));


   
}

void LED2_init()
{
    //0.设置GPIOF时钟使能
	RCC_AHB4_ENSETR |=(0x1 << 5);

	//1.设置PF10引脚为输出模式
	GPIOF->MODER &= (~(0x3 << 20));
    GPIOF->MODER |=(0x1 << 20);

	//2.设置PF10引脚为推挽模式
	GPIOF->OTYPER &=(~(0x1 << 10));
	
	//3.设置PF10引脚为低速模式
	GPIOF->OSPEEDR &=(~(0x3 << 20));

	
	//4.设置PF10引脚禁止上下拉
	GPIOF->PUPDR &=(~(0x3 << 20));


   
}
void LED1_on()
{
   GPIOE->ODR |=(0x1 << 10);


}

void LED1_off()
{
    GPIOE->ODR &=(~(0x1 << 10));

}

void LED2_on()
{
   GPIOF->ODR |=(0x1 << 10);


}

void LED2_off()
{
    GPIOF->ODR &=(~(0x1 << 10));

}


void LED3_init()
{
    //0.设置GPIOE时钟使能
	RCC_AHB4_ENSETR |=(0x1 << 5);

	//1.设置PE10引脚为输出模式
	GPIOE->MODER &= (~(0x3 << 16));
    GPIOE->MODER |=(0x1 << 16);

	//2.设置PE10引脚为推挽模式
	GPIOE->OTYPER &=(~(0x1 << 8));
	
	//3.设置PE10引脚为低速模式
	GPIOE->OSPEEDR &=(~(0x3 << 16));

	
	//4.设置PE10引脚禁止上下拉
	GPIOE->PUPDR &=(~(0x3 << 16));
   
}



void LED3_on()
{
   GPIOE->ODR |=(0x1 << 8);


}

void LED3_off()
{
    GPIOE->ODR &=(~(0x1 << 8));

}

main.c

#include "gpio.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(); // LED灯初始化

	LED2_init();

	LED3_init();

	while(1)

	{

		LED1_on();

		LED2_on();

		LED3_on();



		delay_ms(1000);

		LED1_off();

		LED2_off();

		LED3_off();

		delay_ms(1000);

	}

	return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32F9是一款高性能的微控制器,它具有完善的硬件支持,可以帮助我们编写出一个简单的点灯程序。要写一个点灯程序,首先需要熟悉STM32F9的外设,包括I/O口,定时器,中断和ADC等,以及它们之间的交互。然后,可以使用相关的语言,如C / C++,编写程序逻辑,实现点灯的功能。 ### 回答2: 要使用STM32F9编写一个点灯程序,我们需要遵循以下步骤: 1. 首先,我们需要在开发环境中配置STM32F9芯片。这包括设置时钟频率,配置GPIO引脚以控制LED以及选择合适的开发板和调试工具。 2. 然后,我们需要创建一个新的工程,并选定合适的编程语言和开发工具。一般来说,可以选择C语言以及常见的集成开发环境(IDE),如Keil MDK或STM32CubeIDE。 3. 创建一个主函数,该函数将是程序的入口点。在主函数中,我们需要初始化GPIO引脚以控制LED,并设置为输出模式。这样,我们就可以通过改变引脚的电平来控制LED的亮灭。 4. 在主函数中,使用一个循环结构,例如while循环,来反复执行点灯的操作。在循环内部,我们可以使用延时函数来控制LED的亮灭时间间隔,或者通过外部输入(如按键)来触发点灯操作。 5. 在循环中,通过改变GPIO引脚的电平(高或低)来控制LED点亮和熄灭。我们可以使用一些简单的逻辑操作符(如逻辑与、逻辑或)来实现不同的点灯模式,如循环闪烁、交替闪烁等。 6. 最后,编译程序并将其下载到STM32F9芯片上运行。可以通过调试工具进行调试,观察LED的亮灭情况,精调程序以实现期望的点灯效果。 需要注意的是,以上仅为编写一个简单的点灯程序的基本步骤,实际情况可能因开发环境、开发板和需求的不同而有所变化。在实际开发中,可能还需要处理中断、使用定时器等功能来实现更复杂的点灯模式。 ### 回答3: 使用STM32F9写一个点灯程序相对简单。首先,我们需要设置好开发环境,包括安装STM32CubeMX和MDK-ARM开发工具,然后创建一个新的工程。接下来,我们需要选择使用哪个GPIO引脚来控制LED。 在STM32CubeMX中,我们可以配置GPIO引脚的模式和速度。我们需要将引脚设置为输出模式,并选择相应的速度。然后,我们可以生成初始化代码,用于配置系统时钟和引脚。 在初始化代码生成后,我们需要打开生成的文件,找到相关的函数,以便配置STM32F9和配置我们选择的GPIO引脚。确保将引脚配置为输出模式。 接下来,我们可以编写主函数,用于控制LED点亮和熄灭。我们可以使用库函数来设置引脚的电平,即将引脚设置为高电平或低电平。例如,如果我们想点亮LED,我们可以使用函数GPIO_SetPin,将所选的GPIO引脚设置为高电平。 然后,我们可以添加一个延时函数,用于控制LED的持续时间。我们可以使用库函数Delay进行延时。 最后,我们可以在代码中添加循环,使LED点亮和熄灭循环进行。这样,我们就完成了一个简单的点灯程序。 需要注意的是,具体的代码细节会略有不同,具体取决于使用的具体开发工具和配置。上述步骤仅为大致流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值