社区导航

 

搜索
查看: 7256|回复: 22

[求助] 新手求助STM32的流水灯问题

[复制链接]

25

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-11-17 21:10 | 显示全部楼层 |阅读模式
看《零死角玩转STM32》的初级篇中的流水灯,根据他的步骤写完程序,烧进去,结果灯全亮,不闪,后来干脆不高延时,改成如下所示还是全亮;
LED1( ON );     // 亮             LED1( OFF );    // 灭
LED2( ON );                         LED2( OFF );
LED3( ON );                           LED3( OFF );
后又改了一下
  LED1( ON );     // 亮            Delay(0x0FFFEF);               LED1( OFF );    // 灭           
LED2( ON );                        LED2( OFF );                       
LED3( ON );                          LED3( OFF );
结果只有LED1亮;
完整的程序如下

#include "stm32f10x.h"
#include "led.h"
//#define    MI_ERR    (-2)
void Delay(__IO u32 nCount);
int main(void)
{
/* LED 端口初始化 */
LED_GPIO_Config();
while (1)
{
  LED1( ON );     // 亮
  Delay(0x0FFFEF);
  LED1( OFF );    // 灭
  LED2( ON );
  LED2( OFF );
  LED3( ON );
  LED3( OFF );      
}
}
void Delay(__IO u32 nCount)  //简单的延时函数
{
for(; nCount != 0; nCount--);
}
此帖出自stm32/stm8论坛

回复

使用道具 举报

7493

TA的帖子

4946

TA的资源

版主

Rank: 6Rank: 6

资源大师勋章

发表于 2012-11-17 23:50 | 显示全部楼层
亮后面有延时,灭后面的延时呢?

回复

使用道具 举报

25

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2012-11-18 00:11 | 显示全部楼层
我把它改成这样还是全亮
int main(void)
{       
        /* LED 端口初始化 */
        LED_GPIO_Config();

        while (1)
        {
                LED1( ON );                          // 亮
                Delay(5000);
                LED1( OFF );                  // 灭
               
                LED2( ON );
                Delay(5000);
                LED2( OFF );
               
                LED3( ON );
                Delay(5000);
                LED3( OFF );      
        }
}

void Delay(int nCount)         //简单的延时函数
{
        for(; nCount != 0; nCount--);
}

回复

使用道具 举报

25

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2012-11-18 00:21 | 显示全部楼层
void Delay(__IO u32 nCount)         //简单的延时函数
{
        for(; nCount != 0; nCount--);
上面是源程序的延时函数;我把它改成下面这种就全亮;
void Delay(int nCount)         //简单的延时函数
{
         for(; nCount != 0; nCount--);
}

回复

使用道具 举报

32

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-11-18 02:44 | 显示全部楼层
是不是 延时不够,变成扫描显示了啊, 第一种和 最后一种的 全亮 是不是 亮度不一样啊,我是新手,猜的

回复

使用道具 举报

3

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-11-18 04:32 | 显示全部楼层
LED1( OFF );  后面加上Delay(5000);
你的LED关掉后又立即ON了

回复

使用道具 举报

7493

TA的帖子

4946

TA的资源

版主

Rank: 6Rank: 6

资源大师勋章

发表于 2012-11-19 08:06 | 显示全部楼层
给你说你也没看明白,
那么6楼说的你明白了吗

回复

使用道具 举报

3538

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2012-11-19 15:38 | 显示全部楼层
你 LED1( OFF );宏写的有问题,贴出来看看

回复

使用道具 举报

3538

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2012-11-19 15:41 | 显示全部楼层
#define LED_IOPORT        GPIOA        //mini2.0 pa0,1//mini3.0 Pa 2,3
#define LED2_IOBIT         GPIO_Pin_3
#define LED3_IOBIT         GPIO_Pin_2

#define        LED2_LIGHT        LED_IOPORT->ODR |= LED2_IOBIT
#define        LED2_DARK        LED_IOPORT->ODR &= ~LED2_IOBIT
#define        LED3_LIGHT        LED_IOPORT->ODR |= LED3_IOBIT
#define        LED3_DARK        LED_IOPORT->ODR &= ~LED3_IOBIT

回复

使用道具 举报

25

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2012-11-19 16:42 | 显示全部楼层

回复 6楼 雅剑 的帖子

不明白!详细点,难道我的Delay函数没用

回复

使用道具 举报

25

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2012-11-19 16:44 | 显示全部楼层

回复 7楼 tiankai001 的帖子

不明白,求大神详解!

回复

使用道具 举报

7493

TA的帖子

4946

TA的资源

版主

Rank: 6Rank: 6

资源大师勋章

发表于 2012-11-19 17:09 | 显示全部楼层

回复 11楼 szengjiaqi 的帖子

LEDOFF后面也加个延时,然后试试

回复

使用道具 举报

115

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-11-19 21:48 | 显示全部楼层
会不会延时函数被优化了

回复

使用道具 举报

3

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-11-20 09:23 | 显示全部楼层

回复 10楼 szengjiaqi 的帖子

while (1)
        {
                LED1( ON );                          // 亮
        Delay(5000);
                LED1( OFF );                  // 灭
        Delay(5000);
               
        LED2( ON );
                Delay(5000);
                LED2( OFF );
               Delay(5000);
              
                LED3( ON );
                Delay(5000);
                LED3( OFF );  
               Delay(5000);   
        }

改成这样

回复

使用道具 举报

24

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-11-21 09:47 | 显示全部楼层
端口没配置好吧,还是时钟没打开

回复

使用道具 举报

25

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2012-11-22 20:11 | 显示全部楼层
多谢各位的解答我知道了错在哪里了,延时太短了

回复

使用道具 举报

16

TA的帖子

1

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-12-13 18:07 | 显示全部楼层
delay 5000太少了 stm32太快了起碼5000*5000

回复

使用道具 举报

452

TA的帖子

5

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

发表于 2012-12-15 14:41 | 显示全部楼层
搞不清楚你的delay是不是太长还是太短,你干脆就不要用delay了,要么用timer来延时,更简单的,不要延时了,在调试模式下加断点,上一句是亮灯,下一句是灭灯,你加断点来看到底是不是按照你的想法和程序流程来的,确定是对灯的操作没问题了,再来搞定延时。不要灯操作也有问题,延时也有问题,然后一起调。问题一个一个的查,一个一个的解决。

回复

使用道具 举报

2927

TA的帖子

1

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2012-12-18 21:36 | 显示全部楼层
看楼主的程序好笑

while (1)
{
  LED1( ON );     // 亮    亮
  Delay(0x0FFFEF);
  LED1( OFF );    // 灭  看不到
  LED2( ON ); //           看不到
  LED2( OFF ); //看不到

  LED3( ON ); //看不到


  LED3( OFF );       //看不到


}
关键是你眼不够快。不是程序没写好。哈哈。

回复

使用道具 举报

35

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-12-24 11:51 | 显示全部楼层

回复 4楼 szengjiaqi 的帖子

int 数据类型是16位,你的延时是Delay(5000);
超出范围了,将int改为unsigned int 就可以

回复

使用道具 举报

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

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-1-20 22:52 , Processed in 0.535093 second(s), 20 queries , Gzip On, MemCache On.

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