用C语言方式实现STM32实现灯亮灭

实验现象

在这里插入图片描述

实现代码

gpio.h

#ifndef __GPIO_H__                                                  
#define __GPIO_H__                                                  
                                                                    
#define RCC_AHB4_ENSETR (*(volatile unsigned int*)0x50000A28)       
                                                                    
typedef struct{                                                     
    volatile unsigned int MODER;                                    
    volatile unsigned int OTYPER;                                   
    volatile unsigned int OSPEEDR;                                  
    volatile unsigned int PUPDR;                                    
    volatile unsigned int IDR;                                      
    volatile unsigned int ODR;                                      
}gpio;                                                              
#define GPIOE ((gpio*)0x50006000)                                   
#define GPIOF ((gpio*)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()
{
    RCC_AHB4_ENSETR |=(0x1<<4);

    GPIOE->MODER &=(~(0x3<<20));
    GPIOE->MODER |=(0x1<<20);

    GPIOE->OTYPER &=(~(0x1<<10));

    GPIOE->OSPEEDR &=(~(0x3<<20));

    GPIOE->PUPDR &=(~(0x3<<20));

}
void LED1_ON()
{
    GPIOE->ODR |=(0x1<<10);
}
void LED1_OFF()
{
    GPIOE->ODR &=(~(0x1<<10));
}

void LED2_INIT()
{
    RCC_AHB4_ENSETR |=(0x1<<5);

    GPIOF->MODER &=(~(0x3<<20));
    GPIOF->MODER |=(0x1<<20);

    GPIOF->OTYPER &=(~(0x1<<10));

    GPIOF->OSPEEDR &=(~(0x3<<20));

    GPIOF->PUPDR &=(~(0x3<<20));

}
void LED2_ON()
{
    GPIOF->ODR |=(0x1<<10);
}
void LED2_OFF()
{
    GPIOF->ODR &=(~(0x1<<10));
}


void LED3_INIT()
{
    RCC_AHB4_ENSETR |=(0x1<<4);

    GPIOE->MODER &=(~(0x3<<16));
    GPIOE->MODER |=(0x1<<16);

    GPIOE->OTYPER &=(~(0x1<<8));

    GPIOE->OSPEEDR &=(~(0x3<<16));

    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();
    LED2_INIT();
    LED3_INIT();
    // LED灯初始化

    while(1)
    {
        LED1_ON();
        LED2_ON();
        LED3_ON();
        delay_ms(500);
        LED1_OFF();
        LED2_OFF();
        LED3_OFF();
        delay_ms(500);
    }
    r

eturn 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你好,以下是控制 STM32 控制 LED 的程序: #include "stm32f10x.h" void delay(uint32_t time); int main(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); while (1) { GPIO_SetBits(GPIOC, GPIO_Pin_13); delay(100000); GPIO_ResetBits(GPIOC, GPIO_Pin_13); delay(100000); } } void delay(uint32_t time) { while (time--) ; } 希望能对你有所帮助。 ### 回答2: 编写STM32控制LED的程序如下: 首先,确保将LED连接到正确的GPIO引脚。假设我们将LED连接到STM32的PA5引脚。 接下来,需要在代码开头包含STM32的相关库文件。例如:#include "stm32f4xx.h" 然后,需要配置PA5引脚为输出模式,以及配置其他必要的寄存器。例如: RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // 使能GPIOA时钟 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); 在主循环中,可以使用GPIO_SetBits和GPIO_ResetBits函数来控制LED的。例如: while (1) { GPIO_SetBits(GPIOA, GPIO_Pin_5); // 点LED Delay(1000); // 延时1秒 GPIO_ResetBits(GPIOA, GPIO_Pin_5); // 熄LED Delay(1000); // 延时1秒 } 这里的Delay函数需要自己编写,用于实现延时功能。可以使用定时器或者循环实现延时。 以上就是控制STM32上的LED的简单程序。通过配置GPIO引脚以及使用GPIO_SetBits和GPIO_ResetBits函数,可以轻松实现LED的控制。 ### 回答3: 要控制STM32控制LED,我们首先需要了解STM32的编程环境和程序结构。STM32是一款基于ARM Cortex-M系列内核的微控制器,可以使用C语言或汇编语言来编写程序。 首先,我们需要在STM32的开发环境中创建一个新的工程,并选择合适的开发板型号。接下来,我们需要配置GPIO端口,将LED引脚连接到STM32的某个GPIO引脚上。我们可以使用开发环境提供的图形化界面或手动编写代码来配置GPIO端口。 一旦GPIO端口配置完成,我们可以开始编写控制LED的程序。首先,我们需要包含相应的头文件,例如"stm32f4xx.h",以便使用STM32的相关函数和定义。 接下来,我们需要在程序的主函数中初始化相关的GPIO端口。例如,我们可以使用"GPIO_InitTypeDef"结构体来初始化LED所连接的GPIO引脚。我们可以设置引脚的模式(输入或输出)、速度、推挽类型和上拉/下拉等参数。然后,我们可以调用相应的初始化函数来将配置应用到实际的GPIO引脚上。 初始化完成后,我们可以进入一个循环中,在循环中控制LED。我们可以使用"GPIO_WriteBit"函数来设置LED的状态,例如将LED引脚输出高电平则LED起,将LED引脚输出低电平则LED。 最后,我们可以根据需要添加延时函数来控制LED时间。例如,可以使用"Delay_ms"函数来实现毫秒级的延时。 综上所述,我们可以通过配置GPIO端口和编写相应的控制程序来实现STM32控制LED的功能。这只是一个简单的示例程序,你可以根据实际需求进行更复杂的程序设计。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值