OpenEdv-开源电子网

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

无法跳出SysTick->CTRL的问题

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2017-7-6
在线时间
3 小时
发表于 2017-7-6 21:52:52 | 显示全部楼层 |阅读模式
1金钱
(第一次写贴,金钱较低望见谅)自己写一个WiFi控制代码,最后发现自己的代码卡在了延时函数SysTick定时器上,我仿真了原子哥给的WiFi例程(ATK-ESP8266 WIF的mini),发现程序也是死在延时函数SysTick定时器上,请求各位大神解答!!!!!!!

仿真情况

仿真情况

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

使用道具 举报

10

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1784
金钱
1784
注册时间
2014-6-27
在线时间
965 小时
发表于 2017-7-7 09:38:25 | 显示全部楼层
/*
滴答定时器中断,上面滴答定时器初始化节拍时间,假设5MS
*/
void  SysTick_Handler(void)
{
    SYS_Ticker=1;  //节拍标志,MS级别,程序基本延时由此完成 ,或者下面的累加变量完成等                              
    bus_count++;
}
/*

us级别延时,不影响滴滴定时器的运行,虽然可以定时很长,建议多用在延时小于一个节拍时间的场合,用在不经常运行的地方。
滴答定时器运行就行了,不会造成死循环。
*/

void delay_us(u32 x)//可以延时大于节拍时间的us时间
{
        u32 new_load,old_load,cmp_load=0,tickers;
        tickers=x;//根据滴滴定时器修改,比如滴滴定时器跑8M,则  tickers=x*8;
        old_load=SysTick->VAL;
        while(1)
        {
            new_load=SysTick->VAL;
            if(new_load!=old_load)
            {        
                if(new_load<old_load)
                    cmp_load+=old_load-new_load;
                else
                    cmp_load+=SysTick->LOAD+old_load-new_load;        
                old_load=new_load;
                if(cmp_load>=tickers)break;
            }  
        }
}
可这样做,不用老是关闭开启定时器,初始化打开就行了,这样就死不了了,中断还可以做其他用途。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2017-7-8 23:24:06 | 显示全部楼层
我们例程不可能死这里哦
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2017-7-8 23:24:20 | 显示全部楼层
例程是可以正常运行才对,你别仿真,直接测试
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2016-5-23
在线时间
5 小时
发表于 2017-8-16 23:42:52 | 显示全部楼层
原子哥,嘀嗒时钟软件能仿真吗
回复

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2019-5-16
在线时间
24 小时
发表于 2019-7-18 18:40:32 | 显示全部楼层
你调用delay_init()没?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2022-1-18
在线时间
1 小时
发表于 2022-1-18 17:53:20 | 显示全部楼层
hi,解决了吗?我也遇到了这个问题
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2020-7-23
在线时间
6 小时
发表于 2022-3-18 23:35:44 | 显示全部楼层
我也遇到这问题了,6楼给的思路,检查后发现是延时初始化放在其他初始化后面导致的。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2020-7-23
在线时间
6 小时
发表于 2022-3-18 23:36:13 | 显示全部楼层
需要审核,请等待通过
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2022-3-14
在线时间
2 小时
发表于 2022-4-2 10:10:20 | 显示全部楼层
遇到同样的问题,调试发现会卡在这里,因为使用了LCD 里面用到了delay相关函数,(之前主函数里面没有初始化)解决方法是要在主函数的最前面初始化delay_init,程序就可以执行了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 17:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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