打印
[其他ST产品]

systick定时器初始值设置为0有没有效

[复制链接]
478|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
classroom|  楼主 | 2025-1-17 12:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
cortex m3编程手册中说SysTick reload value register (STK_LOAD) 的值可以设置成0,但是实际没有作用。
同时也说了赋值应为实际值减一。
那是不是不能计数1个tick。计数1个tick需要设置SysTick reload value register (STK_LOAD) 为0,但实际又不起作用。

使用特权

评论回复
沙发
内政奇才| | 2025-1-17 13:51 | 只看该作者
在Cortex-M3的SysTick定时器中,SysTick reload value register (STK_LOAD) 的值确实可以理论上设置为0,但实际上这样做并没有意义,因为SysTick定时器是一个24位、向下递减的计数器,其主要目的是在计数器递减到0时产生中断或执行其他指定的操作。

使用特权

评论回复
板凳
内政奇才| | 2025-1-17 13:51 | 只看该作者
关于“赋值应为实际值减一”的说法,这通常是指在设置SysTick的重载值时,如果你希望定时器在特定的时钟周期数后产生中断,你需要将这个周期数减1后写入STK_LOAD寄存器。这是因为当计数器从设定的值递减到0时,SysTick定时器会产生中断(如果中断使能位被设置),而写入的值实际上是计数器需要递减到的目标值的前一个数。

使用特权

评论回复
地板
AutoMotor| | 2025-1-17 15:33 | 只看该作者
赋值成0应该就什么也用不了了吧?

使用特权

评论回复
5
Amazingxixixi| | 2025-1-21 17:17 | 只看该作者
学习一下啊,还有好多需要学习的。

使用特权

评论回复
6
SophiaOP| | 2025-1-22 21:43 | 只看该作者
m0有没有SysTick啊?

使用特权

评论回复
7
公羊子丹| | 2025-1-23 10:23 | 只看该作者
确实是这样的,STK_LOAD 设置为 0 的话,SysTick 就不会正常计数,相当于禁用了定时功能。

使用特权

评论回复
8
周半梅| | 2025-1-23 10:25 | 只看该作者
STK_LOAD 的值需要设置为你想计数的值减 1,最小能计数 1 个 tick,但 STK_LOAD 必须至少是 1 才有效。

使用特权

评论回复
9
帛灿灿| | 2025-1-23 10:27 | 只看该作者
想计数 1 个 tick,STK_LOAD 的确不能直接设为 0,你需要设为 1,这样它才能计 1 个 tick。

使用特权

评论回复
10
童雨竹| | 2025-1-23 10:28 | 只看该作者
这是硬件设计的问题,STK_LOAD 为 0 就相当于没有延时,定时器直接不工作了。

使用特权

评论回复
11
万图| | 2025-1-23 10:30 | 只看该作者
Cortex-M3 的计数器是从 STK_LOAD 的值减到 0 为止,设置为 0 自然没法倒数,所以没作用。

使用特权

评论回复
12
Wordsworth| | 2025-1-23 10:31 | 只看该作者
我之前也觉得 STK_LOAD 设置为 0 能用,后来发现必须设置为一个大于等于 1 的值才有效果。

使用特权

评论回复
13
Bblythe| | 2025-1-23 10:33 | 只看该作者
STK_LOAD = 0 就没法触发中断了,感觉它更像是一个“关闭计数”的状态。

使用特权

评论回复
14
Pulitzer| | 2025-1-23 10:34 | 只看该作者
要计 1 个 tick,只能把 STK_LOAD 设置为 1,让它倒数 1 tick,确实有点反直觉。

使用特权

评论回复
15
Uriah| | 2025-1-23 10:35 | 只看该作者
官方文档提到的“值减 1”这个点,其实是硬件电路上的计数规则导致的,没办法绕过。

使用特权

评论回复
16
Clyde011| | 2025-1-23 10:36 | 只看该作者
实际项目中很少需要 1 个 tick 的精度,通常都是设置稍大的值,要不你试着用别的方式解决?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

451

主题

2518

帖子

1

粉丝