野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9020|回复: 2

关于使用寄存器点亮LED的闪烁问题

[复制链接]
发表于 2017-9-23 16:37:46 | 显示全部楼层 |阅读模式
#include "stm32f10x.h"
void delay(unsigned int i)
{
          unsigned int a,b;
          for(a = 0 ; a ++ ; a < i)
              for(b = 0 ; b ++ ; b < i);
}

int main()
{
   while(1)
   {
  //绿灯
          RCC_APB2ENR |= (1 << 3);
          GPIOB_CRL   &= ~((0x0F) << (4*0) );
          GPIOB_CRL   |= (1 << (4*0) );
          GPIOB_ODR   &= ~(1 << 0);

                delay(0xfffffff);
               
//红灯
          RCC_APB2ENR |= (1 << 3);
          GPIOB_CRL   &= ~((0x0F) << (4*5) );
          GPIOB_CRL   |= (1 << (4*5) );
          GPIOB_ODR   |=(1 << 0);
          GPIOB_BRR   |= (1 << 5);   
               
                delay(0xfffffff);
               
//蓝灯
        RCC_APB2ENR |= (1 << 3);
        GPIOB_CRL   &= ~((0x0F) << (4*5) );
        GPIOB_CRL   |= (1 << (4*1) );
        GPIOB_ODR   |= (1 << 5);
        GPIOB_BRR   |= (1 << 1);  
               
                delay(0xfffffff);
   }
}
本意是想让三个灯闪烁
为什么我下载到板子上之后竟然不是三种颜色的任何一种?

回复

使用道具 举报

发表于 2017-9-23 17:19:40 | 显示全部楼层
因为这个是RGB灯,如果只想让红灯亮的话,那么剩下的两个G灯和B灯必须关闭,要不然只要其中两个亮了,就会混合成其他的一种颜色。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-23 21:12:52 | 显示全部楼层
可是在点亮第二个灯的时候已经关闭第一个灯了。。
比如红灯里面我加了个 GPIOB_ODR   |= (1 << 0);
      绿灯里面             GPIOB_ODR   |= (1 << 5);
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-1 21:42 , Processed in 0.026126 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表