OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3554|回复: 18

闪烁灯程序为什么灯不能闪烁

[复制链接]

1

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2016-8-25
在线时间
3 小时
发表于 2016-8-25 00:50:48 | 显示全部楼层 |阅读模式
2金钱


本人新手,板子是f0discovery,带芯片F051,目前挑战闪烁灯,但是不知道何故,灯一直亮,完全不闪,源程序如下:
#include "stm32f0xx.h"
#include "stm32f0xx_rcc.h"
#include "stm32f0xx_flash.h"
#include "stm32f0xx_cec.h"
#include "stm32f0xx_gpio.h"
#include <stdio.h>

void RCC_Config(void)
{
        RCC_DeInit();
        RCC_HSICmd(ENABLE);
        
        while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) != SET)                                        /* check out, if HSI ready */
        {
        }
                                
        FLASH_PrefetchBufferCmd(ENABLE);                                                                                                        /* Enable Flash */
        FLASH_SetLatency(FLASH_Latency_1);                                                                                 /* Flash wait two State */

        RCC_HCLKConfig(RCC_SYSCLK_Div1);
        RCC_PCLKConfig(RCC_HCLK_Div2);

        RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);                        /* PLLCLK = HSI/2 * 16 = 64 MHz */
        RCC_PLLCmd(ENABLE);
        
        while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) != SET)                                        /* check out, if PLL ready */
        {
        }
        
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                        /* SYSCLK = PLLCLK = 64 MHz -> APB1 = 32 MHz, APB2 = 64 MHz */
        
        while (RCC_GetSYSCLKSource() != 0x08)                                /* check out, if SYSCLK uses PLLCLK */
        {
        }
        
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
}

void GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitS;
        
        GPIO_InitS.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitS.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitS.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitS.GPIO_OType = GPIO_OType_PP;
        
        GPIO_Init(GPIOC,&GPIO_InitS);

}


int main(void)
{
        int i = 0;
        
        while(1)
        {
                RCC_Config();
                GPIO_Config();
        
                while (1)
                {
        
                 
                        GPIO_SetBits(GPIOC, GPIO_Pin_9);
                        for(i=1;i<5;i++);
                        GPIO_ResetBits(GPIOC, GPIO_Pin_9);
                        for(i=1;i<5;i++);

               
                }
        }
}


但我使用debuger一步一步走的话,灯是可以闪烁的,但是整个程序跑的话led也不能闪烁,各位知道是什么原因吗?谢谢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2016-8-25 00:50:49 | 显示全部楼层
afox2001 发表于 2016-8-25 19:05
就是说把i++去掉吗?

你把i<5改成i<0xfffff
回复

使用道具 举报

7

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2016-7-20
在线时间
36 小时
发表于 2016-8-25 02:57:19 | 显示全部楼层
你这里的for循环的i++,换成延迟试试!
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2016-8-25 08:30:59 | 显示全部楼层
延时时间过短,眼睛分辨不出来
回复

使用道具 举报

0

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
295
金钱
295
注册时间
2016-6-17
在线时间
60 小时
发表于 2016-8-25 10:07:40 | 显示全部楼层
闪是闪,就是你我都看不见,太快了。。。。。
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2016-8-25
在线时间
3 小时
 楼主| 发表于 2016-8-25 19:04:14 | 显示全部楼层
zzx499 发表于 2016-8-25 10:07
闪是闪,就是你我都看不见,太快了。。。。。

但是开关两个状态的时长不是一样的么?为什么灯是一直亮而不是一直不亮呢?
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2016-8-25
在线时间
3 小时
 楼主| 发表于 2016-8-25 19:05:01 | 显示全部楼层
Da Wen 发表于 2016-8-25 08:30
延时时间过短,眼睛分辨不出来

但是开关两个状态的时长不是一样的么?为什么灯是一直亮而不是一直不亮呢?
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2016-8-25
在线时间
3 小时
 楼主| 发表于 2016-8-25 19:05:19 | 显示全部楼层
ycc1169 发表于 2016-8-25 02:57
你这里的for循环的i++,换成延迟试试!

就是说把i++去掉吗?
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2016-8-25
在线时间
3 小时
 楼主| 发表于 2016-8-25 22:33:54 | 显示全部楼层

五个f吗?这是一个普通的十六位数,还是有什么含义?谢谢!
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2016-8-25 22:49:47 | 显示全部楼层
afox2001 发表于 2016-8-25 22:33
五个f吗?这是一个普通的十六位数,还是有什么含义?谢谢!

普通的数而已,数越大,延时时间越长,闪烁间隔越长
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-8-25
在线时间
2 小时
发表于 2016-8-25 22:56:45 | 显示全部楼层
afox2001 发表于 2016-8-25 19:05
但是开关两个状态的时长不是一样的么?为什么灯是一直亮而不是一直不亮呢?

实际上是时长一样,但人眼有视觉暂留,间隔太短就看着一直亮了。
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2016-8-25
在线时间
3 小时
 楼主| 发表于 2016-8-26 06:43:32 | 显示全部楼层
Da Wen 发表于 2016-8-25 22:49
普通的数而已,数越大,延时时间越长,闪烁间隔越长

果然得把这个数调大才会闪.....软件理论跟硬件果然有区别
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2016-8-25
在线时间
3 小时
 楼主| 发表于 2016-8-26 06:50:41 | 显示全部楼层
liulei587 发表于 2016-8-25 22:56
实际上是时长一样,但人眼有视觉暂留,间隔太短就看着一直亮了。

我觉得应该是别的问题,有可能是电容或者什么的,不然为什么看上去是一直亮而不是一直不亮呢?
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-8-26 06:54:44 | 显示全部楼层
afox2001 发表于 2016-8-26 06:50
我觉得应该是别的问题,有可能是电容或者什么的,不然为什么看上去是一直亮而不是一直不亮呢?

光辐射量由原来的100%降低到50%,你说应该是亮着的还是灭着的?

听说过PWM调光,或者呼吸灯吗?


别说人眼没感觉出亮度是原来的一半,
光辐射通量与人眼感知亮度不是线性关系的
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2016-8-26 08:57:59 | 显示全部楼层
这个新人,还要多看书啊,不然会把网友给气死。
自己选择的路,成家前走完。
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-8-26 09:18:53 | 显示全部楼层
延迟时间太短,
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-8-26 09:19:40 | 显示全部楼层
起码延迟200ms以上我估计肉眼才能看见闪,你那延迟才多少ns啊,
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2016-8-25
在线时间
3 小时
 楼主| 发表于 2016-8-26 19:04:56 | 显示全部楼层
xkwy 发表于 2016-8-26 06:54
光辐射量由原来的100%降低到50%,你说应该是亮着的还是灭着的?

听说过PWM调光,或者呼吸灯吗?

哦!原来这样!受教了
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2016-8-25
在线时间
3 小时
 楼主| 发表于 2016-8-26 19:05:49 | 显示全部楼层
xujian468 发表于 2016-8-26 09:19
起码延迟200ms以上我估计肉眼才能看见闪,你那延迟才多少ns啊,

好的,现在把循环弄成3000000,刚刚好
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-30 14:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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