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

[复制链接]
2327|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秒?
 楼主| bromine2008 发表于 2015-3-31 16:37 | 显示全部楼层
luy3728000 发表于 2015-3-31 16:29
楼主的延时函数 以为是 51时代

我只会这个延时阿,见笑了。
本来想用windows.h里面的sleep的,但是我这个不带windows.h所以写了个for循环
lei129210 发表于 2015-3-31 16:37 | 显示全部楼层
bromine2008 发表于 2015-3-31 16:36
调大过的,没用UserDelay(200)我也试过,话说按照我这个函数UserDelay(1)的话是不是1秒? ...

:L:L
 楼主| bromine2008 发表于 2015-3-31 16:40 | 显示全部楼层

^_^,那这个for循环是多少时间?
cylnpy150411 发表于 2015-4-1 09:12 | 显示全部楼层
cooldog123pp 发表于 2015-4-1 13:38 | 显示全部楼层
时间太短了吧,设个断电 看看能进去不,就知道了。
cooldog123pp 发表于 2015-4-1 13:38 | 显示全部楼层
断点 打错字
hanyewei2009 发表于 2015-4-1 14:09 | 显示全部楼层
默默的留下了眼泪
sevenjul 发表于 2015-4-1 16:59 | 显示全部楼层
应该是时间太短了!
runningwzf 发表于 2015-4-1 21:00 | 显示全部楼层
windows.h
这个好用
张允 发表于 2015-4-1 21:55 | 显示全部楼层
void UserDelay(uint16_t wTime)
可能溢出,建议用void UserDelay(uint32_t wTime),数据调大
Serge_Ding 发表于 2015-4-1 22:25 | 显示全部楼层
被编译器优化掉了
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
 楼主| bromine2008 发表于 2015-4-2 08:54 | 显示全部楼层
cooldog123pp 发表于 2015-4-1 13:38
时间太短了吧,设个断电 看看能进去不,就知道了。

能进入UserDelay函数,但就是不仅for循环,直接退出了
 楼主| bromine2008 发表于 2015-4-2 08:54 | 显示全部楼层
lei129210 发表于 2015-4-1 22:32
void UserDelay(uint16_t wTime)溢出需要多少知道吗?

试过了,貌似没用
 楼主| bromine2008 发表于 2015-4-2 08:55 | 显示全部楼层
Serge_Ding 发表于 2015-4-1 22:25
被编译器优化掉了

我怀疑是这样的,哎。
Serge_Ding 发表于 2015-4-2 22:12 | 显示全部楼层
bromine2008 发表于 2015-4-2 08:55
我怀疑是这样的,哎。

将优化等级调到最低,或在循环里加一条操作语句
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部