STM32 LED循环点亮

4个LED采用共阳极接法,其阴极接在STM32F103芯片的PB8,PB9,PB10和PB11引脚上

 如图所示

下面是代码的实现,和数学一样实现一个目的代码可以有很多种编程方法,下面列举3个

第一种方法

#include "stm32f10x.h"
uint16_t temp,i;
void Delay(unsigned int count)               //延时函数
{
    unsigned int i;
    for(;count!=0;count--)
    {
        i=5000;
        while(i--);
    }
}
void main(void)
{
		GPIO_InitTypeDef GPIO_InitStructure;
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 		//使能GPIOB时钟
		GPIO_InitStructure.GPIO_Pin = 
        GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;              //PB8-PB11引脚配置
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;            //配置引脚为推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;           //GPIOB速度为50MHz
		GPIO_Init(GPIOB, &GPIO_InitStructure);                      //初始化PB8-PB11
        while(1)                
        {
            temp=0x0100;                   //设置初始控制码
            for(i=0;i<4;i++)
            {
                GPIO_Write(GPIOB,~temp);       //向GPIOB口写点亮LED的控制码
                Delay(100);
                temp=temp<<1;           //上一位控制码左移一位,获得下一个控制码
            }                                 
        }
}

代码说明:“GPIO_Write(GPIOB,~temp);”语句将初始控制码取反后,从GPIOB口输出,使得PB8为低电平,点亮D1,其他点位为高电平;然后延时一段时间;让控制码左移一位,获取下一个控制码;以此类推,就实现了LED循环点亮的效果了

第二种方法

               //这一段程序与上面的while(1)实现的效果是一样的
while(1)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
    GPIO_ResetBits(GPIOB,GPIO_Pin_8);      //PB8输出低电平,D1点亮
    Delay(100);
    GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
    GPIO_ResetBits(GPIOB,GPIO_Pin_9);      //PB9输出低电平,D2点亮
    Delay(100);
    GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
    GPIO_ResetBits(GPIOB,GPIO_Pin_10);     //PB10输出低电平,D3点亮
    Delay(100);
    GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
    GPIO_ResetBits(GPIOB,GPIO_Pin_11);     //PB11输出低电平,D4点亮
    Delay(100);
}

代码说明:GPIO_SetBits()函数可以同时对多个I/O口进行置位,这样也可以实现LED循环点亮 

第三种方法

             //这一段程序与上面的while(1)实现的效果是一样的
while(1)                
{
     temp=0x0100;                   //设置初始控制码
     for(i=0;i<4;i++)
     {
          GPIO_SetBits(GPIOB,0x0FFFF);       //GPIOB口输出高电平,4个LED熄灭
          GPIO_ResetBits(GPIOB,temp);        //控制码对应的GPIOB口引脚上的LED点亮
          Delay(100);
          temp=temp<<1;           //上一位控制码左移一位,获得下一个控制码
      }                                 
}

代码说明:使用for语句 ,比较简单,控制几个LED灯就让for循环几次即可

  • 9
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用STM32F103的GPIO控制器来实现LED循环点亮。首先,需要将LED连接到STM32F103的GPIO引脚上,然后在代码中配置GPIO引脚为输出模式。接着,使用循环语句控制LED点亮和熄灭,实现LED循环点亮效果。具体实现方法可以参考STM32F103的开发手册和相关示例代码。 ### 回答2: STM32F103是一款基于Cortex-M3架构的32位微控制器,它广泛应用于工控、家电、汽车电子、医疗设备等领域。 LED循环点亮STM32F103学习入门的基础应用之一,下面我将详细介绍如何实现LED循环点亮。 步骤: 1.硬件连接:首先需要将LEDSTM32F103对应的GPIO口连接,一般我们将LED的正极连接到P0端口,负极连接到GND。 2.编写程序:使用Keil等软件编写C语言程序,实现LED循环点亮程序实现原理是通过对STM32F103的GPIO口进行设置,控制LED点亮和熄灭。 在程序中通常需要定义变量和函数,实现以下功能: - 定义头文件和变量,包括STM32F103鉴定头文件、GPIO口控制头文件和LED端口定义等。 - 初始化GPIO口状态,将LED端口设置为输出状态。 - 循环控制LED端口输出高电平或低电平,使LED循环点亮。 - 添加延时函数,控制LED点亮的时间和频率。 3.程序调试:启动调试模式,调试程序是否能正常运行。如果出现编译错误或者程序无法运行的异常情况,可通过Keil的调试工具分析错误原因,并修正代码。 总之,STM32F103实现LED循环点亮是一项非常简单的入门应用,只需要掌握GPIO口控制的基本原理即可。在这个基础上,我们可以继续扩展其他应用,例如模拟输入输出(MIO)、定时器控制等。这些模块的使用,是学习STM32F103深入应用的基础。 ### 回答3: stm32f103是一款基于Cortex-M3内核的芯片,它拥有强大的性能和丰富的外设,可以很方便地实现各种功能。这里我们来讨论如何利用它的GPIO外设实现LED循环点亮。 GPIO是芯片的通用输入输出端口,它可以控制各种类型的外设,比如LED、按键等。在stm32f103上,它的GPIO外设非常灵活,可以实现多种不同的功能。 首先,我们需要了解如何使用GPIO口控制LED点亮。通常LED的工作电压比较低,一般是3.3V或5V。所以我们需要在芯片的GPIO输出口和LED之间加上限流电阻,以避免LED过流烧坏。 在stm32f103上,每个GPIO输出口都有一个端口复用器(AFIO)控制器,用来配置不同的复用功能。对于LED输出控制,我们需要将对应的GPIO口配置为推挽输出模式,并设置输出电平为高。这样,LED就会点亮。 接下来,我们需要编写一段简单的循环程序,来控制LED循环点亮。首先,需要定义一个计数器变量,用来控制循环次数。然后,我们可以使用循环语句(比如for或while)来实现LED循环点亮。在循环体中,我们需要对LED的输出电平进行切换,来控制它的点亮和熄灭。 还有一个需要注意的问题是,stm32f103的GPIO输出口需要先进行初始化,才能正确地控制外设。在我们的程序中,需要先调用GPIO初始化函数,来配置对应的端口和模式。否则,LED可能无法正确地点亮或熄灭。 综上所述,实现stm32f103的LED循环点亮,需要了解GPIO的输出控制和端口复用器的配置。在此基础上,编写一个简单的循环程序,就可以完成LED循环点亮任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值