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

szengjiaqi   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--);
}

回复评论 (22)

亮后面有延时,灭后面的延时呢?
点赞  2012-11-17 23:50
我把它改成这样还是全亮
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--);
}
点赞  2012-11-18 00:11
void Delay(__IO u32 nCount)         //简单的延时函数
{
        for(; nCount != 0; nCount--);
上面是源程序的延时函数;我把它改成下面这种就全亮;
void Delay(int nCount)         //简单的延时函数
{
         for(; nCount != 0; nCount--);
}
点赞  2012-11-18 00:21
是不是 延时不够,变成扫描显示了啊, 第一种和 最后一种的 全亮 是不是 亮度不一样啊,我是新手,猜的
点赞  2012-11-18 02:44
LED1( OFF );  后面加上Delay(5000);
你的LED关掉后又立即ON了
点赞  2012-11-18 04:32
给你说你也没看明白,
那么6楼说的你明白了吗
点赞  2012-11-19 08:06
你 LED1( OFF );宏写的有问题,贴出来看看
点赞  2012-11-19 15:38
#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
点赞  2012-11-19 15:41

回复 6楼 雅剑 的帖子

不明白!详细点,难道我的Delay函数没用
点赞  2012-11-19 16:42

回复 7楼 tiankai001 的帖子

不明白,求大神详解!
点赞  2012-11-19 16:44

回复 11楼 szengjiaqi 的帖子

LEDOFF后面也加个延时,然后试试
点赞  2012-11-19 17:09
会不会延时函数被优化了
点赞  2012-11-19 21:48

回复 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);   
        }

改成这样
点赞  2012-11-20 09:23
端口没配置好吧,还是时钟没打开
点赞  2012-11-21 09:47
多谢各位的解答我知道了错在哪里了,延时太短了
点赞  2012-11-22 20:11
delay 5000太少了 stm32太快了起碼5000*5000
点赞  2012-12-13 18:07
搞不清楚你的delay是不是太长还是太短,你干脆就不要用delay了,要么用timer来延时,更简单的,不要延时了,在调试模式下加断点,上一句是亮灯,下一句是灭灯,你加断点来看到底是不是按照你的想法和程序流程来的,确定是对灯的操作没问题了,再来搞定延时。不要灯操作也有问题,延时也有问题,然后一起调。问题一个一个的查,一个一个的解决。
点赞  2012-12-15 14:41
看楼主的程序好笑

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

  LED3( ON ); //看不到


  LED3( OFF );       //看不到


}
关键是你眼不够快。不是程序没写好。哈哈。
点赞  2012-12-18 21:36

回复 4楼 szengjiaqi 的帖子

int 数据类型是16位,你的延时是Delay(5000);
超出范围了,将int改为unsigned int 就可以
点赞  2012-12-24 11:51
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复