打印
[STM32F3]

双for循环延时为什么不进入函数里面。

[复制链接]
1736|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bromine2008|  楼主 | 2015-3-31 16:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的MCU是STM32F301C8,刚学的IC编程就遇到莫名其妙的问题。我写的UserDelay函数应该没什么问题啊,
但是就是直接跳过了这个函数,照理说应该闪2次,然后果断时间再闪2次,结果LED灯一直常亮,不知道怎么
搞得。
程序简单描述如下:
main(){
    ......
    LED_Init();
    while(1){
        ......
        stm_state = MCI_GetSTMState(oMCI[0]);//这个函数是获得电机的状态
        UserDelay(5);
        LED_Application(2,1);//闪2次,后面的1是间隔
        ......
    }
    ....
}

void LED_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 ;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_Speed =GPIO_Speed_Level_3;
    GPIO_Init(GPIOC, &GPIO_InitStruct);
    GPIO_SetBits(GPIOC, GPIO_Pin_13 );
}

void UserDelay(uint16_t wTime)
{
    uint16_t i,j;
    for (i=0;i<wTime*1000;i++){
                for(j=0;j<1000;j++){
                  ;
                }
    }
}

//blinkNum : blink number
//delayTime : blink interval
void LED_Application(uint16_t blinkNum,uint16_t delayTime)
{
    uint16_t i=0;
    if (blinkNum == 0){
        LED_Open();
    }
    else{
        while(i<blinkNum){
            LED_Open();
            UserDelay(delayTime);
            LED_Close();
            UserDelay(delayTime);
            i++;
        }
    }

}
沙发
lei129210| | 2015-3-31 16:26 | 只看该作者
延时时间太短了。把delay带入的数值调大试试。

使用特权

评论回复
板凳
luy3728000| | 2015-3-31 16:29 | 只看该作者
楼主的延时函数 以为是 51时代:lol

使用特权

评论回复
地板
bromine2008|  楼主 | 2015-3-31 16:36 | 只看该作者
lei129210 发表于 2015-3-31 16:26
延时时间太短了。把delay带入的数值调大试试。

调大过的,没用UserDelay(200)我也试过,话说按照我这个函数UserDelay(1)的话是不是1秒?

使用特权

评论回复
5
bromine2008|  楼主 | 2015-3-31 16:37 | 只看该作者
luy3728000 发表于 2015-3-31 16:29
楼主的延时函数 以为是 51时代

我只会这个延时阿,见笑了。
本来想用windows.h里面的sleep的,但是我这个不带windows.h所以写了个for循环

使用特权

评论回复
6
lei129210| | 2015-3-31 16:37 | 只看该作者
bromine2008 发表于 2015-3-31 16:36
调大过的,没用UserDelay(200)我也试过,话说按照我这个函数UserDelay(1)的话是不是1秒? ...

:L:L

使用特权

评论回复
7
bromine2008|  楼主 | 2015-3-31 16:40 | 只看该作者

^_^,那这个for循环是多少时间?

使用特权

评论回复
8
cylnpy150411| | 2015-4-1 09:12 | 只看该作者

使用特权

评论回复
9
cooldog123pp| | 2015-4-1 13:38 | 只看该作者
时间太短了吧,设个断电 看看能进去不,就知道了。

使用特权

评论回复
10
cooldog123pp| | 2015-4-1 13:38 | 只看该作者
断点 打错字

使用特权

评论回复
11
hanyewei2009| | 2015-4-1 14:09 | 只看该作者
默默的留下了眼泪

使用特权

评论回复
12
sevenjul| | 2015-4-1 16:59 | 只看该作者
应该是时间太短了!

使用特权

评论回复
13
runningwzf| | 2015-4-1 21:00 | 只看该作者
windows.h
这个好用

使用特权

评论回复
14
张允| | 2015-4-1 21:55 | 只看该作者
void UserDelay(uint16_t wTime)
可能溢出,建议用void UserDelay(uint32_t wTime),数据调大

使用特权

评论回复
15
Serge_Ding| | 2015-4-1 22:25 | 只看该作者
被编译器优化掉了

使用特权

评论回复
16
lei129210| | 2015-4-1 22:32 | 只看该作者
张允 发表于 2015-4-1 21:55
void UserDelay(uint16_t wTime)
可能溢出,建议用void UserDelay(uint32_t wTime),数据调大 ...

void UserDelay(uint16_t wTime)溢出需要多少知道吗?:L

使用特权

评论回复
17
bromine2008|  楼主 | 2015-4-2 08:54 | 只看该作者
cooldog123pp 发表于 2015-4-1 13:38
时间太短了吧,设个断电 看看能进去不,就知道了。

能进入UserDelay函数,但就是不仅for循环,直接退出了

使用特权

评论回复
18
bromine2008|  楼主 | 2015-4-2 08:54 | 只看该作者
lei129210 发表于 2015-4-1 22:32
void UserDelay(uint16_t wTime)溢出需要多少知道吗?

试过了,貌似没用

使用特权

评论回复
19
bromine2008|  楼主 | 2015-4-2 08:55 | 只看该作者
Serge_Ding 发表于 2015-4-1 22:25
被编译器优化掉了

我怀疑是这样的,哎。

使用特权

评论回复
20
Serge_Ding| | 2015-4-2 22:12 | 只看该作者
bromine2008 发表于 2015-4-2 08:55
我怀疑是这样的,哎。

将优化等级调到最低,或在循环里加一条操作语句

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝