[STM32L4] 如何配置 SysTick微妙级延时

[复制链接]
485|65
lxs0026 发表于 2026-7-21 10:30 | 显示全部楼层
楼主要注意,SysTick是24位计数器。如果你系统时钟是168MHz,想配1微秒中断,重装值就是168,这没问题。但如果系统时钟更高,或者你想配更短的时间,可能会溢出或者精度不够。而且频繁进中断会导致Cache命中率下降(如果L4带Cache的话),整体性能反而会降
grfqq325 发表于 2026-7-22 12:42 | 显示全部楼层
如果是为了驱动某些对时序敏感的传感器,比如DHT11或者单总线设备,别用SysTick中断。直接用GPIO模拟,中间穿插几个NOP或者简单的for循环延时就行。这种微秒级延时在关中断的情况下跑最稳,开了中断反而会被打断导致时序错乱
突然下起雨 发表于 2026-7-22 15:52 | 显示全部楼层
还有一个思路,用TIM6或TIM7这种基本定时器。它们可以产生更新中断,而且不占用IO口。你把定时器配成1微秒溢出,中断优先级设高。这样既不影响SysTick作为系统时基,又能实现你的微秒级触发需求。只是记得中断里只做标志位翻转,具体逻辑放主循环处理
天天向善 发表于 2026-7-24 22:48 | 显示全部楼层
在延时函数中,可以通过禁用中断或者使用中断服务例程(ISR)来避免中断干扰。
lllook 发表于 2026-7-27 12:01 | 显示全部楼层
微秒是时间单位,时钟周期是时钟频率的倒数,将微秒数乘以时钟频率,得到周期数。
线稿xg 发表于 2026-8-20 11:24 | 显示全部楼层
使用中断服务例程(ISR)完成必要处理,延迟函数中使用禁用中断的指令来保证执行时间。
星闪动力 发表于 2026-8-29 16:38 | 显示全部楼层
Systick是单片机内部计数器,用于软件延时;硬件定时器则由单片机外设实现,定时更准确,但需编程设置。区别主要在于准确度和编程复杂度。
WhisperingTrees 发表于 2026-9-1 16:55 | 显示全部楼层
直接操作NVIC优先级寄存器设置SysTick最高优先级,然后使用SysTick_Config配置好后直接手动更新重装载值,别让HAL_InitTick参与。
FranklinUNK 发表于 2026-9-2 12:43 | 显示全部楼层
直接操作NVIC的IPR寄存器设置SysTick中断优先级为最高,然后使用SysTick_Config手动计算重装载值。记得关闭其他中断以免冲突。
OceanDepths 发表于 2026-9-3 14:47 | 显示全部楼层
直接操作NVIC的优先级寄存器设置SysTick中断优先级,再手动配置SysTick的LOAD值,这样就不会被HAL库函数覆盖了。
OliviaSH 发表于 2026-9-4 14:17 | 显示全部楼层
直接操作SysTick寄存器设置中断优先级,再调用SysTick_Config,这样就不会冲突了。记得检查优先级设置。
ClarkLLOTP 发表于 2026-9-5 14:12 | 显示全部楼层
直接操作SysTick的LOAD寄存器,计算公式为:LOAD = SystemCoreClock / 1000000 - 1,然后写入即可。中断优先级单独用NVIC_SetPriority设置最高优先级。
捉虫天师 发表于 2026-9-5 20:42 | 显示全部楼层
以 STM32(HAL 库 / 标准库)为例,SysTick 是内核定时器,属于 Cortex‑M 内核,不是片上外设。
闪烁黎明 发表于 2026-9-6 15:21 | 显示全部楼层
直接操作NVIC的IPR寄存器设置SysTick中断优先级,再调用SysTick_Config()进行配置。记得计算好重装载值。
EmmaTT 发表于 2026-9-7 15:17 | 显示全部楼层
配置SysTick微秒级延时,建议直接操作NVIC寄存器,单独设置SysTick中断优先级,然后手动配置SysTick计数器。记得检查中断服务程序是否正确。
EchoInSilence 发表于 2026-9-8 13:09 | 显示全部楼层
直接操作NVIC_SetPriority(SysTick_IRQn, 0)设置SysTick中断优先级最高,再手动配置SysTick的LOAD寄存器实现微秒级延时。
ShimmeringDawn 发表于 2026-9-9 13:19 | 显示全部楼层
SysTick直接操作寄存器,先配置LOAD,再设置中断优先级,HAL_InitTick可后调。记得检查NVIC配置。
Stahan 发表于 2026-9-10 14:10 | 显示全部楼层
直接操作NVIC的优先级寄存器,设置SysTick中断优先级为最高,再手动配置SysTick的LOAD值。
Bowclad 发表于 2026-9-11 15:04 | 显示全部楼层
SysTick中断优先级配置,建议直接操作NVIC寄存器,确保SysTick优先级最高,避免HAL库函数冲突。
梦境漫游者 发表于 2026-9-12 16:25 | 显示全部楼层
直接操作NVIC的IPR寄存器,设置SysTick中断优先级为最高,再手动配置SysTick重装载值,即可实现微秒级延时。记得检查SysTick的时钟源配置是否正确。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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