[其他ST产品] 请教关于SysTick—系统定时器使用问题

[复制链接]
 楼主| elephant00 发表于 2023-2-20 10:34 | 显示全部楼层 |阅读模式
我部分程序片段:


Delay(5);

void Delay(u32 nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);  // 仿真时看到TimingDelay等于0了,始终不能退出while。
}

void SysTick_Handler(void)  // 仿真时看到TimingDelay第一次进入是5,最终是0。
{
if(TimingDelay != 0) TimingDelay--;
}

上述问题是什么原因,怎么解决?谢谢!

sjnh 发表于 2023-2-20 12:23 | 显示全部楼层
中断和其它地方都用的变量,一定是volatile的,不然出什么问题是正常的,不出问题是意外的;
圣骑士by 发表于 2023-2-20 17:06 | 显示全部楼层
优化级别调成 level 0试试 可以有限规避楼上的情况
圣骑士by 发表于 2023-2-20 17:06 | 显示全部楼层
优化级别调成 level 0试试 可以有限规避楼上的情况
xch 发表于 2023-2-20 17:31 | 显示全部楼层
void Delay(u32 nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0)
{
   __WFI();
  
}
}

volatile uint32_t TimingDelay =0;

用上述两招试试
guijial511 发表于 2023-2-20 18:55 来自手机 | 显示全部楼层
写法有问题,应该在delay延时函数中赋初始值后,在启动嘀嗒时钟。
zchong 发表于 2023-2-21 07:31 来自手机 | 显示全部楼层
大哥,作用域详细了解一下,c语言基本功不够扎实啊,
ayb_ice 发表于 2023-2-21 08:32 | 显示全部楼层
加__nop,在此设断点

void Delay(u32 nTime)
{
        TimingDelay = nTime;
        while(TimingDelay != 0)  // 仿真时看到TimingDelay等于0了,始终不能退出while。
        {
                __nop();
        }
        __nop();
}
ayb_ice 发表于 2023-2-21 08:34 | 显示全部楼层
另外delay不要在中断中调用
两只袜子 发表于 2023-2-21 10:00 | 显示全部楼层
截图看怎么看出TimingDelay等于0了但还在执行循环

jcky001 发表于 2023-2-22 10:00 | 显示全部楼层
你在Delay()里的while循环里添加打印再看下

cr315 发表于 2023-2-23 10:00 | 显示全部楼层
怎么判断退不出来?

uytyu 发表于 2023-3-3 21:09 | 显示全部楼层
Systick定时器,是一个简单的定时器
Henryko 发表于 2023-3-3 22:42 | 显示全部楼层
怎么看出来程序不会退出的啊?
ingramward 发表于 2023-3-4 13:02 | 显示全部楼层
STM32怎么用库函数使用滴答定时器?
youtome 发表于 2023-3-4 20:56 | 显示全部楼层
Systick允许的最长和最短定时是多少
mikewalpole 发表于 2023-3-4 21:33 | 显示全部楼层
定时器和systick哪个好               
averyleigh 发表于 2023-3-4 22:05 | 显示全部楼层
ST的CM3、CM4、CM7内核芯片,都有Systick定时器
ingramward 发表于 2023-3-4 22:45 | 显示全部楼层
用内部晶振 设置Systick延时怎么设置
hearstnorman323 发表于 2023-3-5 10:49 | 显示全部楼层
怎么开启systick定时器               
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1030

主题

3864

帖子

7

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