野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11615|回复: 12

f4新手,关于流水灯的问题

[复制链接]
发表于 2016-8-1 14:52:06 | 显示全部楼层 |阅读模式
代码如图,为什么while(1)里的代码不能循环的红绿蓝一个接着一个亮,只是红绿蓝各亮一次然后就不亮了。

为什么while(1)的代码不能循环RGB亮

为什么while(1)的代码不能循环RGB亮
回复

使用道具 举报

发表于 2016-8-1 15:05:18 | 显示全部楼层
1、LED是负逻辑点亮,你用了 GPIO_SetBits()不对吧?

2、LED_GPIO_Config()里面封装的是什么?

3、直接配套火哥的例程来修改,看看哪里有不一样
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-1 15:25:47 | 显示全部楼层

RE: f4新手,关于流水灯的问题

许亮 发表于 2016-8-1 15:05
1、LED是负逻辑点亮,你用了 GPIO_SetBits()不对吧?

2、LED_GPIO_Config()里面封装的是什么?

是负逻辑点亮,这我知道。我用Setbit是为了灭灯。


  1. void LED_GPIO_Config_RGB(LED_PIN_Typedef LED_Pin)
  2. {
  3.     GPIO_InitTypeDef GPIO_InitStruct;
  4.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH, ENABLE);

  5.     GPIO_InitStruct.GPIO_Pin   = LED_Pin;
  6.     GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_OUT;
  7.     GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  8.     GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;
  9.     GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed;
  10.    
  11.     GPIO_Init(GPIOH, &GPIO_InitStruct);
  12. }

  13. typedef enum
  14. {
  15.     LED_R_GPIO_PIN = GPIO_Pin_10,
  16.     LED_G_GPIO_PIN = GPIO_Pin_11,
  17.     LED_B_GPIO_PIN = GPIO_Pin_12
  18. }LED_PIN_Typedef;
复制代码

回复 支持 反对

使用道具 举报

发表于 2016-8-1 18:51:59 | 显示全部楼层
感觉乱乱的  ,,,,,你对照下火哥的例程。。。。看看缺少什么。。。你点灯的方式不对。。。。还有就是::用的着每次都进行配置端口吗??一部到位难道不好吗??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-1 20:20:42 | 显示全部楼层
Mr.Guo 发表于 2016-8-1 18:51
感觉乱乱的  ,,,,,你对照下火哥的例程。。。。看看缺少什么。。。你点灯的方式不对。。。。还有就是: ...

谢谢,我已经知道了
回复 支持 反对

使用道具 举报

发表于 2016-8-2 09:32:33 | 显示全部楼层
woaiwm 发表于 2016-8-1 20:20
谢谢,我已经知道了

知道问题出现在哪里了  把解决方法贴出来。。。。让以后遇到同样问题的人  有解决的办法
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-2 13:05:13 | 显示全部楼层
int main(void)
{
    LED_GPIO_Config_RGB(LED_R_GPIO_PIN,GPIO_OType_OD);
    LED_GPIO_Config_RGB(LED_G_GPIO_PIN,GPIO_OType_OD);
    LED_GPIO_Config_RGB(LED_B_GPIO_PIN,GPIO_OType_OD);
        while(1)
    {   
        GPIO_ToggleBits(GPIOH, LED_R_GPIO_PIN);
        Delay(0xffffff);
        GPIO_SetBits(GPIOH, LED_R_GPIO_PIN);
        
        GPIO_ToggleBits(GPIOH, LED_G_GPIO_PIN);
        Delay(0xffffff);
        GPIO_SetBits(GPIOH, LED_G_GPIO_PIN);
      
        GPIO_ToggleBits(GPIOH, LED_B_GPIO_PIN);
        Delay(0xffffff);
        GPIO_SetBits(GPIOH, LED_B_GPIO_PIN);
    }
}

void Delay(uint32_t t)
{
    for(;t>0;t--);   
}


这样就可以了,没必要每一次配置,toggle翻转电平一次然后再灭掉,就行了
回复 支持 反对

使用道具 举报

发表于 2016-8-2 14:34:06 | 显示全部楼层
woaiwm 发表于 2016-8-2 13:05
int main(void)
{
    LED_GPIO_Config_RGB(LED_R_GPIO_PIN,GPIO_OType_OD);

不错,解决了就好
回复 支持 反对

使用道具 举报

发表于 2016-8-4 13:38:09 | 显示全部楼层
配置是不能写到循环里的,不只是灯,我昨天配置串口也是,那样不科学,虽然不知道怎么回事。好像是时序跟不上。一直toggle就行了干嘛要关掉。。
回复 支持 反对

使用道具 举报

发表于 2016-8-4 13:53:56 | 显示全部楼层
woaiwm 发表于 2016-8-2 13:05
int main(void)
{
    LED_GPIO_Config_RGB(LED_R_GPIO_PIN,GPIO_OType_OD);

不错, 能自己解决代码问题了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-4 22:33:59 | 显示全部楼层
国丫先森 发表于 2016-8-4 13:38
配置是不能写到循环里的,不只是灯,我昨天配置串口也是,那样不科学,虽然不知道怎么回事。好像是时序跟不 ...

我也试了,一直Toogle会出现别的颜色,所以我Toogle一次就关掉
回复 支持 反对

使用道具 举报

发表于 2016-8-5 08:34:26 | 显示全部楼层
woaiwm 发表于 2016-8-4 22:33
我也试了,一直Toogle会出现别的颜色,所以我Toogle一次就关掉

原来是rgb么,恕我逗逼了。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-5 13:10:37 | 显示全部楼层
国丫先森 发表于 2016-8-5 08:34
原来是rgb么,恕我逗逼了。。。

木事木事,哈哈
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 04:56 , Processed in 0.063823 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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