你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32 LED循环点亮

[复制链接]
STMCU小助手 发布时间:2022-5-25 18:00
4个LED采用共阳极接法,其阴极接在STM32F103芯片的PB8,PB9,PB10和PB11引脚上

如图所示
7cc7baa4f038479e914ea6e54464252e.jpg

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

第一种方法

  1. #include "stm32f10x.h"
  2. uint16_t temp,i;
  3. void Delay(unsigned int count)               //延时函数
  4. {
  5.     unsigned int i;
  6.     for(;count!=0;count--)
  7.     {
  8.         i=5000;
  9.         while(i--);
  10.     }
  11. }
  12. void main(void)
  13. {
  14.                 GPIO_InitTypeDef GPIO_InitStructure;
  15.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);                 //使能GPIOB时钟
  16.                 GPIO_InitStructure.GPIO_Pin =
  17.         GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;              //PB8-PB11引脚配置
  18.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;            //配置引脚为推挽输出
  19.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;           //GPIOB速度为50MHz
  20.                 GPIO_Init(GPIOB, &GPIO_InitStructure);                      //初始化PB8-PB11
  21.         while(1)               
  22.         {
  23.             temp=0x0100;                   //设置初始控制码
  24.             for(i=0;i<4;i++)
  25.             {
  26.                 GPIO_Write(GPIOB,~temp);       //向GPIOB口写点亮LED的控制码
  27.                 Delay(100);
  28.                 temp=temp<<1;           //上一位控制码左移一位,获得下一个控制码
  29.             }                                 
  30.         }
  31. }
复制代码


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

第二种方法

  1.                //这一段程序与上面的while(1)实现的效果是一样的
  2. while(1)
  3. {
  4.     GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
  5.     GPIO_ResetBits(GPIOB,GPIO_Pin_8);      //PB8输出低电平,D1点亮
  6.     Delay(100);
  7.     GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
  8.     GPIO_ResetBits(GPIOB,GPIO_Pin_9);      //PB9输出低电平,D2点亮
  9.     Delay(100);
  10.     GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
  11.     GPIO_ResetBits(GPIOB,GPIO_Pin_10);     //PB10输出低电平,D3点亮
  12.     Delay(100);
  13.     GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
  14.     GPIO_ResetBits(GPIOB,GPIO_Pin_11);     //PB11输出低电平,D4点亮
  15.     Delay(100);
  16. }
复制代码


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

第三种方法

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

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



收藏 评论0 发布时间:2022-5-25 18:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版