
概述 Systick是一个定时器,Cortex M3,M4的芯片中都有 Systick定时器通常用于实现延时函数,节约MCU资源 Systick定时器就是系统滴答定时器,是一个24位的倒计时定时器,计到0为止 从RELOAD寄存器中自动装载定时初始值 只要不把它在Systick控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作 Systick定时器被捆绑在NVIC中,用于产生SYSTICK异常 Systick中断的优先级可以设置 Systick的寄存器 ![]() CTRL ![]() ENABLE 使能 TICKINT 是否产生中断 CLKSOURCE 时钟源,外部时钟源是HCLK的1/8,内核时钟是HCLK COUNTFLAG 一个FLAG LOAD ![]() VAL ![]() CALIB 不常用 相关函数 Systick_CLKSourceConfig 在固件库中的misc.c文件中(misc.c主要是用于中断管理) 函数实现如下 ![]() SysTick定义如下 core_cm3.h ![]() 同一个文件中,查看其结构体类型 ![]() 查看Systick_CLKSourceConfig函数入口参数的可选项,点击断言 ![]() ![]() 可以看到,可选性分别是 SysTick_CLKSource_HCLK_Div8 SysTick_CLKSource_HCLK 因此: ![]() 内核级别的SysTick_Config SysTick_Config core_cm3.h(用于内核级别的函数) ![]() 入口参数是两个中断之间的时间间隔 ![]() 判断有效性 ![]() 设定装载值 ![]() 设定优先级,且初值为0 ![]() 设置时钟源,开启中断,使能定时器 设定了两个Systick中断之间的间隔,也就是说每过这么多的时间,systick的中断服务函数就要运行一次 一种实现方法
这样子,每次Systick定时器减1,都需要进入一次中断服务函数,这样会对CPU造成很大的浪费 另一种实现方法 SYSTEM文件下的 delay.c delay.h ![]() 若使用操作系统,则使能该宏 ![]() delay_init函数 ![]() delay_us 注意:nus或nms不能大于LOAD的最大值,即2的24次方-1 ![]() ———————————————— 版权声明:CodeForCoffee |
经验分享 | STM32U5系列TIMER+DMA+DAC应用演示
经验分享 | STM32G4 UART+TIMER+DMA应用示例
经验分享 | STM32定时器同步启动示例及应用提醒
经验分享 | STM32 TIMER+DMA输出PWM异常二案例
经验分享 | 更改STM32定时器周期后的输出疑问分析
基于定时器捕获测量脉宽的应用示例
狂欢三】STM32C031使用TIM定时器DMA方式实现WS2812彩灯输出(三)
【狂欢三】STM32C031使用TIM定时器DMA方式实现PWM输出(二)
【狂欢三】STM32C031使用TIM定时器PWM输出
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法