OpenEdv-开源电子网

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

while里加delay函数,程序不能正常执行

[复制链接]

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
发表于 2017-6-8 23:25:42 | 显示全部楼层 |阅读模式
5金钱
while 里加 delay 函数,程序不能正常执行
把delay 函数注释掉,就可以正常执行了,求解,谢谢


int main(void)
{         

        LED_Init();                                         
        delay_init();                            
  ID_Init();  
        RS485_USART1_Init( );       
       
                                                                          
        while(1)
        {                  
    //ER_LED= ~ER_LED;
        //        delay_ms(1000);         
               
    RS4851_RX_TX();
               
         
  }
       
}


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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-6-8 23:40:20 | 显示全部楼层
说明你的delay可能没配置好,仿真进去看看就知道了
回复

使用道具 举报

43

主题

481

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1352
金钱
1352
注册时间
2014-12-24
在线时间
321 小时
发表于 2017-6-9 00:24:13 | 显示全部楼层
你那个4851是轮询模式吧?你delay把cpu耗在那里了,还怎么查询啊!
回复

使用道具 举报

19

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
308
金钱
308
注册时间
2014-10-19
在线时间
42 小时
发表于 2017-6-9 11:02:06 | 显示全部楼层
我只能说  你这点代码 看不出什么问题来
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-6-9 11:15:48 | 显示全部楼层
看门狗动作了吧
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3774
金钱
3774
注册时间
2015-4-26
在线时间
766 小时
发表于 2017-6-9 13:05:09 | 显示全部楼层
延时改短点
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2017-6-9 22:58:02 | 显示全部楼层
正点原子 发表于 2017-6-8 23:40
说明你的delay可能没配置好,仿真进去看看就知道了

我软件仿真试了下,一直在执行do while语句,也就是说while的条件一直不满足

void delay_ms(u16 nms)
{                                     
        u32 temp;                  
        SysTick->LOAD=(u32)nms*fac_ms;                                //时间加载(SysTick->LOAD为24bit)
        SysTick->VAL =0x00;                                                        //清空计数器
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;        //开始倒数  
        do
        {
                temp=SysTick->CTRL;
        }while((temp&0x01)&&!(temp&(1<<16)));                //等待时间到达   
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;        //关闭计数器
        SysTick->VAL =0X00;                                               //清空计数器                      
}
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2017-6-9 22:58:18 | 显示全部楼层
正点原子 发表于 2017-6-8 23:40
说明你的delay可能没配置好,仿真进去看看就知道了

我软件仿真试了下,一直在执行do while语句,也就是说while的条件一直不满足

void delay_ms(u16 nms)
{                                     
        u32 temp;                  
        SysTick->LOAD=(u32)nms*fac_ms;                                //时间加载(SysTick->LOAD为24bit)
        SysTick->VAL =0x00;                                                        //清空计数器
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;        //开始倒数  
        do
        {
                temp=SysTick->CTRL;
        }while((temp&0x01)&&!(temp&(1<<16)));                //等待时间到达   
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;        //关闭计数器
        SysTick->VAL =0X00;                                               //清空计数器                      
}
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2017-6-9 22:58:31 | 显示全部楼层
jinggx 发表于 2017-6-9 00:24
你那个4851是轮询模式吧?你delay把cpu耗在那里了,还怎么查询啊!

我软件仿真试了下,一直在执行do while语句,也就是说while的条件一直不满足

void delay_ms(u16 nms)
{                                     
        u32 temp;                  
        SysTick->LOAD=(u32)nms*fac_ms;                                //时间加载(SysTick->LOAD为24bit)
        SysTick->VAL =0x00;                                                        //清空计数器
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;        //开始倒数  
        do
        {
                temp=SysTick->CTRL;
        }while((temp&0x01)&&!(temp&(1<<16)));                //等待时间到达   
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;        //关闭计数器
        SysTick->VAL =0X00;                                               //清空计数器                      
}
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-18 20:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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