无法跳出SysTick->CTRL的问题

2019-07-20 22:11发布

(第一次写贴,金钱较低望见谅)自己写一个WiFi控制代码,最后发现自己的代码卡在了延时函数SysTick定时器上,我仿真了原子哥给的WiFi例程(ATK-ESP8266 WIF的mini),发现程序也是死在延时函数SysTick定时器上,请求各位大神解答!!!!!!! 仿真情况 仿真情况
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
TinyBoy
1楼-- · 2019-07-21 00:41
/*
滴答定时器中断,上面滴答定时器初始化节拍时间,假设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;
            }  
        }
}
可这样做,不用老是关闭开启定时器,初始化打开就行了,这样就死不了了,中断还可以做其他用途。
正点原子
2楼-- · 2019-07-21 02:19
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-21 04:21
例程是可以正常运行才对,你别仿真,直接测试
cq790608
4楼-- · 2019-07-21 05:40
原子哥,嘀嗒时钟软件能仿真吗
vension
5楼-- · 2019-07-21 06:58
 精彩回答 2  元偷偷看……

一周热门 更多>