[其他ST产品] systick定时器初始值设置为0有没有效

[复制链接]
 楼主| 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应该就什么也用不了了吧?
Amazingxixixi 发表于 2025-1-21 17:17 | 显示全部楼层
学习一下啊,还有好多需要学习的。
SophiaOP 发表于 2025-1-22 21:43 来自手机 | 显示全部楼层
m0有没有SysTick啊?
公羊子丹 发表于 2025-1-23 10:23 | 显示全部楼层
确实是这样的,STK_LOAD 设置为 0 的话,SysTick 就不会正常计数,相当于禁用了定时功能。
周半梅 发表于 2025-1-23 10:25 | 显示全部楼层
STK_LOAD 的值需要设置为你想计数的值减 1,最小能计数 1 个 tick,但 STK_LOAD 必须至少是 1 才有效。
帛灿灿 发表于 2025-1-23 10:27 | 显示全部楼层
想计数 1 个 tick,STK_LOAD 的确不能直接设为 0,你需要设为 1,这样它才能计 1 个 tick。
童雨竹 发表于 2025-1-23 10:28 | 显示全部楼层
这是硬件设计的问题,STK_LOAD 为 0 就相当于没有延时,定时器直接不工作了。
万图 发表于 2025-1-23 10:30 | 显示全部楼层
Cortex-M3 的计数器是从 STK_LOAD 的值减到 0 为止,设置为 0 自然没法倒数,所以没作用。
Wordsworth 发表于 2025-1-23 10:31 | 显示全部楼层
我之前也觉得 STK_LOAD 设置为 0 能用,后来发现必须设置为一个大于等于 1 的值才有效果。
Bblythe 发表于 2025-1-23 10:33 | 显示全部楼层
STK_LOAD = 0 就没法触发中断了,感觉它更像是一个“关闭计数”的状态。
Pulitzer 发表于 2025-1-23 10:34 | 显示全部楼层
要计 1 个 tick,只能把 STK_LOAD 设置为 1,让它倒数 1 tick,确实有点反直觉。
Uriah 发表于 2025-1-23 10:35 | 显示全部楼层
官方文档提到的“值减 1”这个点,其实是硬件电路上的计数规则导致的,没办法绕过。
Clyde011 发表于 2025-1-23 10:36 | 显示全部楼层
实际项目中很少需要 1 个 tick 的精度,通常都是设置稍大的值,要不你试着用别的方式解决?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

526

主题

3258

帖子

2

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